个人学习ROS的过程记录(三):实现一个ROS订阅器

 a.编写一个ROS订阅器

我们在同样的程序包my_minimal nodes里创建这个节点源代码放在子目录src下。打开编辑器并在目录~/ros_ws/src/my_minimal_nodes/src中创建minimal_subscriber.cpp

文件,内容如下,代码内容也可以在文章最开始给出的github中找到。

#include<ros/ros.h> 
#include<std_msgs/Float64.h> 
void myCallback(const std_msgs::Float64& message_holder) 
{ 
  // 打印出我们接收到的值
  ROS_INFO("received value is: %f",message_holder.data); 
} 
 
int main(int argc, char **argv) 
{ 
  ros::init(argc,argv,"minimal_subscriber"); //初始化节点
  // 节点名定义为 minimal_subscriber
  ros::NodeHandle n; // 节点句柄,用来创建订阅器
  // 订阅话题‘topic1‘
  // subscribe中的mycallback是回调函数,每当有新数据到来时,该函数
  // 便会被调用
  // 实际的工作是在回调函数中完成的
  
  ros::Subscriber my_subscriber_object=
      n.subscribe("topic1",1,myCallback); 
 
  ros::spin(); // 类似于 `while(1)`语句,但是当有新消息到来时,会调用回调函数
 
  return 0; 
} 

  最小订阅器中的大多数代码都与最小发布器中的相同(尽管在第11行,节点名已经变成("minimal_subscriber”) 。有四行重要的新代码行需要注意。

 

b.修改CMakeLists.txt文件:

为了编译我们刚写的订阅器,我们还需要修改CMakeLists.txt文件,以便让编译器知道应该编译我们新增的文件。类比上篇文章的发布器,我们在CMakeLists.txt文件中加入如下两行:

  

add_executable(my_minimal_subscriber src/minimal_subscriber.cpp) # 第一个参数是生成后的可执行文件名 第二个参数是源文件路径名
target_link_libraries(my_minimal_subscriber ${catkin_LIBRARIES}) # 链接库

 

c.编译和运行订阅器:

打开终端,导航到工作区目录下~/catkin_ws,然后执行命令:

catkin_make

 等待编译完成后,依次执行命令(这些命令都是在不同的终端下输入):

roscore
rosrun my_minimal_nodes my_minimal_publisher
rosrun my_minimal_nodes my_minimal_subscriber

 在另一个终端,输入:

rosnode list //检查节点

  个人学习ROS的过程记录(三):实现一个ROS订阅器

 

 

运行命令:

rqt_graphs

 生成了运行系统的图行显示,如下图所示。

个人学习ROS的过程记录(三):实现一个ROS订阅器

由上面的直观展示可以看出,消息由发布器流出到话题topic1然后再流向订阅器。 

该图形显示展示了两个节点。最小发布器节点显示为发布到topic1, 而最小订阅器显示为订阅了该话题。

个人学习ROS的过程记录(三):实现一个ROS订阅器

上一篇:金融电销机器人哪里有?


下一篇:npm的一些小记