【ROS学习3(Topic)】发布者(Publisher)的编程实现

发布者(Publisher)的编程实现:

【ROS学习3(Topic)】发布者(Publisher)的编程实现_第1张图片
我们仍然以小海龟仿真器为例。

目的:使用程序实现publisher,将海龟的速度指令发布给topic

再复习一下基本的话题模型:
·ros master用以管理所有节点
·publisher发布海龟的速度指令
·topic(turtle1)接收发布消息
·subscriber(turtlesim)订阅这个消息,使海龟发生运动。

创建功能包 (learning_topic) :

cd catkin_ws/src
catkin_create_pkg learning_topic roscpp rospy
std_msgs geometry_msgs turtlesim

创建发布者代码(velocity_publisher):

1.初始化ros节点
2.向ros master注册节点信息,包括发布的话题名和话题中的消息类型
3.创建消息数据
4.按照一定频率循环发布消息

代码实现:

/**
 * 该例程将发布turtle1/cmd_vel话题,消息类型geometry_msgs::Twist
 */
#include 
#include 

int main(int argc, char **argv)
{
     
    //ROS节点初始化
    //发布者节点
    ros::init(argc,argv, "velocity_publisher");
    
    //创建节点句柄(管理节点资源)
    ros::NodeHandlen;
    //创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10
    //当发布者发布数据频率过快的时候,队列用于存储未来的及发布的数据(缓冲)
    // 若缓冲区域长度超过队列长度时,ros会默认把时间戳最老的数据剔除,有可能会出现“掉帧”现象。

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

    //设置循环的频率
    ros::Rate loop_rate(10);

    int count = 0;

    while (ros::ok())//循环
    {
     
        // 初始化geometry_msgs::Twist类型的消息
         geometry_msgs::Twist vel_msg;
         vel_msg.linear.x= 0.5;  //线速度
         vel_msg.angular.z= 0.2;  //角速度

         // 发布消息
         turtle_vel_pub.publish(vel_msg);  //vel_msg
         ROS_INFO("Publsh turtle velocity command[%0.2f m/s, %0.2f rad/s]", //ROS_INFO类似于printf
         vel_msg.linear.x,vel_msg.angular.z);
            
         // 按照循环频率延时
         loop_rate.sleep();
    }
    return 0;
}

在CMakeLists中添加可执行程序和链接库:

add_executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher${catkin_LIBRARIES})

编译:

cd catkin_ws
catkin_make

设置环境变量:

source devel/setup.bash

如果嫌每次都要添加麻烦,只需在主文件夹/home的.bashrc中添加环境变量路径,注意路径名书写正确。

然后是常规操作:

roscore
rosrun turtlesim turtlesim_node

运行发布者程序:

rosrun learning_topic velocity_publisher

双击tab补全
【ROS学习3(Topic)】发布者(Publisher)的编程实现_第2张图片
【ROS学习3(Topic)】发布者(Publisher)的编程实现_第3张图片

你可能感兴趣的:(笔记)