博客参考:https://www.jianshu.com/p/5509c8ba522b?utm_campaign
利用Turtlesim,编写简单的消息发布器和订阅器
1. Twist消息,它的Topic是/cmd_vel,base controler订阅Twist消息来控制电机, 在终端中执行以下指令查看Twist消息的具体内容
rosmsg show geometry_msgs/Twist
2. 编写一个控制turtlesim的发布器
2.1 Roboware 创建turtlesim package, then add Src Folder including source file talker.cpp
#include
#include
#include
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;
}
源代码内重要的部分
1. 定义一个publisher类的对象,其中advertise内的参数为(话题,发布的缓冲区大小)
ros::Publisher chatter_pub = n.advertise
2 geometry_msgs::Twist msg
//定义一个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.
运行
1. 运行roscore
2. 运行turtlesim仿真器
rosrun turtlesim turtlesim_node
3. 运行编译的消息发布结点
source devel/setup.bash
rosrun turrlesim talker
测试效果如下
手机扫一扫
移动阅读更方便
你可能感兴趣的文章