#include<ros/ros.h>
#include<geometry_msgs/Twist.h>
#include<stdlib.h>
int main(int argc,char **argv)
{
ros::init(argc,argv,"public_vel");
ros::NodeHandle nh;
ros::Publisher pub= nh.advertise<geometry_msgs::Twist>("turtle1/cmd_vel",1000);
srand(time(0));
ros::Rate rate(2);
while(ros::ok())
{
geometry_msgs::Twist msg;
msg.linear.x=double(rand())/double(RAND_MAX);
msg.angular.z=2*double(rand())/double(RAND_MAX)-1;
pub.publish(msg);
ROS_INFO_STREAM("send random velocity command :"<<"linear"<<msg.linear.x<<"angular"<<msg.angular.x);
rate.sleep();
}
}
listener.cpp :
#include<ros/ros.h>
#include<geometry_msgs/Twist.h>
#include<stdlib.h>
#include <iomanip>
void chatterCallback(const geometry_msgs::Twist& msg)
{
ROS_INFO_STREAM( " position =(" << msg .linear. x << " , " << msg .linear. y << " ) "
<< " *direction=" << msg . angular.z ) ;
}
int main(int argc,char **argv)
{
ros::init(argc,argv,"listener");
ros::NodeHandle nh;
ros::Subscriber sub= nh.subscribe("turtle1/cmd_vel",1000,chatterCallback);
ros::spin();
return 0;
}
CMakeLists.txt :
添加:
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
geometry_msgs //添加这一行
)
add_executable(pub_vel src/pubvel.cpp)
target_link_libraries(pub_vel ${catkin_LIBRARIES})
add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
额外说明:
catkin 把所有的 package 并行的编译,所以如果你要使用其他 catkin 工作空间中其他 package 的消息,你同样也需要添加对他们各自生成的消息文件的依赖。当然,如果在 *Groovy* 版本下,你可以使用下边的这个变量来添加对所有必须的文件依赖:
add_dependencies(listener ${catkin_EXPORTED_TARGETS})
添加这一句话就可以了,不需要修改宏里面的东西
具体添加项参考:
http://wiki.ros.org/catkin/CMakeLists.txt#Library_Targets
package.xml:
添加:
<build_depend>geometry_msgs</build_depend>
<exec_depend>geometry_msgs</exec_depend>
然后在工作空间catkin_make就可以了
联系客服