博客参考:https://www.jianshu.com/p/5509c8ba522b?utm_campaignnode
利用Turtlesim,编写简单的消息发布器和订阅器bash
1. Twist消息,它的Topic是/cmd_vel,base controler订阅Twist消息来控制电机, 在终端中执行如下指令查看Twist消息的具体内容oop
rosmsg show geometry_msgs/Twist
2. 编写一个控制turtlesim的发布器测试
2.1 Roboware 建立turtlesim package, then add Src Folder including source file talker.cpp对象
#include <ros/ros.h> #include <std_msgs/String.h> #include <geometry_msgs/Twist.h> int main(int argc, char** argv) { ros::init(argc, argv,"talker"); ros::NodeHandle n; ros::Publisher pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 1000); ros::Rate loop_rate(10); while(ros::ok()) { geometry_msgs::Twist msg; msg.linear.x = 1; msg.angular.z = 1; pub.publish(msg); ros::spinOnce(); loop_rate.sleep(); } return 0; }
源代码内重要的部分blog
1. 定义一个publisher类的对象,其中advertise内的参数为(话题,发布的缓冲区大小)get
ros::Publisher chatter_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 1000);
2 geometry_msgs::Twist msgcmd
//定义一个twist类消息对象 msg.linear.x = 1; // 设置线速度为1m/s,正为前进,负为后退 msg.angular.z = 1; // 设置角速度为1rad/s,正为左转,负为右转
3 pub.publish(msg)博客
经过刚才建立的publisher对象发布刚才建立的twist类对象, 这样执行完上面的代码,咱们就能够将复制好linear和angular参数的twist对象广播出去,广播的topic是/turtle1/cmd_vel,也就是turtlesim会自动订阅的topic.it
运行
1. 运行roscore
2. 运行turtlesim仿真器
rosrun turtlesim turtlesim_node
3. 运行编译的消息发布结点
source devel/setup.bash rosrun turrlesim talker
测试效果以下