Robotics StackExchange | Archived questions

Error while catkin_make with ompl code

Hi, I am writing a simple program for OMPL to publish the path in ROS. while I doing catkin_make for the below code and getting following error.

Code:

include "ros/ros.h"

include "geometry_msgs/Point.h"

include

include

include

include

include

include

include

using namespace ompl;

int main(int argc,char **argv) {

// Declaring the variables

std::vector<geometry_msgs::Point> traj;
geometry_msgs::Point node;

// Initializing the node to publish the data      
ros::init(argc,argv,"bot1");

// Creating a node handle for the node
ros::NodeHandle bot_1;


// Defining the topic and the message type
ros::Publisher waypoints_pub=bot_1.advertise<geometry_msgs::Point>("trajectory_bot1",10);


// plan in SE3, defining the setup in 3D state space
app::SE3RigidBodyPlanning setup;

// loading the robot and the environment
std::string robot_fname = std::string(OMPLAPP_RESOURCE_DIR) + "/3D/quadrotor.dae";
std::string env_fname = std::string(OMPLAPP_RESOURCE_DIR) + "/3D/manhattan-19k.dae";
setup.setRobotMesh(robot_fname);
setup.setEnvironmentMesh(env_fname);

// define start state
base::ScopedState<base::SE3StateSpace> start(setup.getSpaceInformation());
start->setX(-20.38);
start->setY(-0.11);
start->setZ(-90.72);
start->rotation().setIdentity();

// define goal state
base::ScopedState<base::SE3StateSpace> goal(start);
goal->setX(800.49);
goal->setY(-0.11);
goal->setZ(45.72);
goal->rotation().setIdentity();

// set the start & goal states
setup.setStartAndGoalStates(start, goal);

// setting collision checking resolution to 1% of the space extent
setup.getSpaceInformation()->setStateValidityCheckingResolution(0.1);

//Setting up the planner- RRT#
setup.setPlanner(std::make_shared<geometric::RRTsharp>(setup.getSpaceInformation()));

// we call setup just so print() can show more information
setup.setup();
setup.print();

// try to solve the problem
if (setup.solve(10))
{
    // simplify & print the solution
    setup.simplifySolution();


       // setup.getSolutionPath().printAsMatrix(std::cout);

    // computing the path and storing into ompl_path variable
auto ompl_path = setup.getSolutionPath();

// creating object to extarct the path components
geometric::PathGeometric path (ompl_path);

// Counting the number of states in the path
unsigned int number_of_states = path.getStateCount();


// Displaying the number of states computed
std::cout<< number_of_states<<std::endl;


// converting the OMPL states into ROS pose
for ( int i=0; i<number_of_states; i++)
{
    node.x=path.getState(i)->as<base::SE3StateSpace::StateType>()->getX();
    node.y=path.getState(i)->as<base::SE3StateSpace::StateType>()->getY();
    node.z=path.getState(i)->as<base::SE3StateSpace::StateType>()->getZ();

    traj.push_back(node);
}

}

//Publishing the computed trajectory on the topic "trajectory_bot1"
waypoints_pub.publish(traj);

return 0;

}

Error:

In file included from /opt/ros/kinetic/include/ros/serialization.h:37:0, from /opt/ros/kinetic/include/ros/publisher.h:34, from /opt/ros/kinetic/include/ros/nodehandle.h:32, from /opt/ros/kinetic/include/ros/ros.h:45, from /home/manas/catkinws/src/testing/Practice.cpp:12: /opt/ros/kinetic/include/ros/messagetraits.h: In instantiation of ‘static const char* ros::messagetraits::MD5Sum::value(const M&) [with M = std::vector > >]’: /opt/ros/kinetic/include/ros/messagetraits.h:255:102: required from ‘const char* ros::messagetraits::md5sum(const M&) [with M = std::vector > >]’ /opt/ros/kinetic/include/ros/publisher.h:112:7: required from ‘void ros::Publisher::publish(const M&) const [with M = std::vector > >]’ /home/manas/catkinws/src/testing/Practice.cpp:117:28: required from here /opt/ros/kinetic/include/ros/messagetraits.h:126:34: error: ‘const class std::vector > >’ has no member named ‘getMD5Sum’ return m.getMD5Sum().cstr(); ^ /opt/ros/kinetic/include/ros/messagetraits.h: In instantiation of ‘static const char* ros::messagetraits::DataType::value(const M&) [with M = std::vector<geometrymsgs::Pointstd::allocator<void > >]’: /opt/ros/kinetic/include/ros/messagetraits.h:264:104: required from ‘const char* ros::messagetraits::datatype(const M&) [with M = std::vector<geometrymsgs::Pointstd::allocator<void > >]’ /opt/ros/kinetic/include/ros/publisher.h:112:7: required from ‘void ros::Publisher::publish(const M&) const [with M = std::vector<geometrymsgs::Pointstd::allocator<void > >]’ /home/manas/catkinws/src/testing/Practice.cpp:117:28: required from here /opt/ros/kinetic/include/ros/messagetraits.h:143:36: error: ‘const class std::vector<geometrymsgs::Pointstd::allocator<void > >’ has no member named ‘getDataType’ return m.getDataType().cstr(); ^

Asked by manas93 on 2018-06-07 15:39:53 UTC

Comments

Answers

I believe your issue is in the second-to-last line:

waypoints_pub.publish(traj);

Specifically, a ROS publisher can only publish ROS messages (see the API docs), but traj is a std::vector, which explains the line your error:

error: ‘const class std::vector<geometry_msgs::point_<std::allocator<void> > >’ has no member named ‘__getMD5Sum’ 

The publisher expect the type that you pass in to have the method __getMD5Sum, which std::vector does not have.

I expect that you are looking for some message in trajectory_msgs, or you could make your own message that is a list of geometry_msgs::Points.

Asked by BryceWilley on 2018-06-08 10:35:27 UTC

Comments