Roboware Turtlesim Ubuntu 16.04 测试

博客参考: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 <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;
}

源代码内重要的部分

1. 定义一个publisher类的对象,其中advertise内的参数为(话题,发布的缓冲区大小)

ros::Publisher chatter_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 1000);

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

测试效果如下

 

posted @ 2019-09-07 15:01  采男孩的小蘑菇  阅读(526)  评论(0编辑  收藏  举报