在安装好ROS后,接着学习如何创建节点和节点之间的通信方式,以一个简单的主题发布节点和主题订阅节点说明。

  节点是连接ROS网络等可执行文件,是实现某些功能的软件包,也是一个主要计算执行的进程。

  一、创建工作空间

  创建新文件夹,名字自定义,路径也根据自己设定。

cd ~mkdir -p ros_workspace

  创建好后,就需要将次路径添加到ROS_PACKAGE_PATH中。

  查看目前ROS的工作空间,

echo $ROS_PACKAGE_PATH

  一般显示如下:

  /opt/ros/kinetic/share

  下面将路径添加到~/.bashrc中

echo "export ROS_PACKAGE_PATH=~/ros_workspace:${ROS_PACKAGE_PATH}" >> ~/.bashrc
. ~/.bashrc

  再次查看ROS正在使用的空间,确保路径正确添加。

  二、创建ROS功能包

  打开ROS工作目录:

cd ~/ros_workspace

  在该目录下创建功能包:

roscreate-pkg test1_tutorials std_msgs rospy roscpp

  功能包文件夹下一般包括Makefile、manifest.xml、CMakeLists.txt、mainpage.dox等文件。

  std_msgs  包含常见等消息类型

  rospy    py库

  roscpp    cpp库

  运行命令,查看功能包是否创建

rospack find test1_tutorials

  

  三、编写代码

  1、主题发布节点

  在功能包中创建src/test1_a.cpp,并添加代码:

 1 #include "ros/ros.h"
 2 #include "std_msgs/String.h"
 3 #include <sstream>
 4
 5
 6 int main(int argc, char **argv)
 7 {
 8     ros::init(argc,argv,"test1_a");
 9     ros::NodeHandle n;
10     ros::Publisher chatter_pub = n.advertise<std_msgs::String>("message",1000);
11     ros::Rate loop_rate(10);
12     while(ros::ok()) {
13         std_msgs::String msg;
14         std::stringstream ss;
15         ss << "Hello test1_b! I am test1_a.";
16         msg.data = ss.str();
17         ROS_INFO("%s",msg.data.c_str());
18         chatter_pub.publish(msg);
19         ros::spinOnce();
20         loop_rate.sleep();
21     }
22     return 0;
23 }

  第8行: 初始化,其中第三个参数是节点名称,在ROS系统中必须唯一。

  第10行:声明主题message上发布一个消息类型为str_msgs::String的消息,并设置消息缓冲区的大小。

  第11行:设置发送消息的频率 10HZ,它追踪自从上一次Rate::sleep()被唤醒之后的持续时间,并在到达时间后继续休眠。

  第12行:ros::ok()函数返回值,在下列情况返回false。

  •   SIGINT句柄接收到Ctrl+C命令来结束;
  •   被名称相同的节点提出ROS网络;
  •   ros::shutdown()被应用的另一部分唤醒。

  第18行:把消息通过主题发布出去。

  第19行:和下面test1_b.cpp程序ros::spin()进行对比,参考http://www.yfworld.com/?p=2318

  2、主题订阅节点

  在功能包中创建src/test1_b.cpp,并添加代码:

 1 #include "ros/ros.h"
 2 #include "std_msgs/String.h"
 3
 4 void chatterCallback(const std_msgs::String::ConstPtr &msg)
 5 {
 6     ROS_INFO("Hello test1_a! I am test1_b. I heard:[%s]",msg->data.c_str());
 7 }
 8
 9 int main(int argc, char **argv)
10 {
11     ros::init(argc,argv,"test1_b");
12     ros::NodeHandle n;
13     ros::Subscriber sub = n.subscribe("message",1000,chatterCallback);
14     ros::spin();
15
16     return 0;
17 }

  第4-7行:回调函数,当一个新消息到达指定主题时即调用。

  第17行:第一个参数指定订阅主题;第二个参数设置消息缓冲区的大小;第三个参数指定回调函数。

  订阅节点需要做四件事情:

  1)初始化;

  2)从主题订阅消息;

  3)然后等待消息到达;

  4)当消息到达时,chatterCallback()被回调。

  四、编译节点

  编辑CMakeLists.txt文件,在末尾处添加如下代码:

rosbuild_add_executable(test1_a src/test1_a.cpp)
rosbuild_add_executable(test1_b src/test1_b.cpp)

  rosmake工具进行编译:

rosmake test1_tutorials

  五、运行功能包

  在运行功能包前,请确认节点管理器已经打开。使用下面的命令运行:

roscore

  在不同的终端窗口分别运行:

rosrun test1_tutorials test1_a
rosrun test1_tutorials test1_b

  可以看到以下信息:

  

  

  六、参考

  http://wiki.ros.org/ROS/Tutorials

  《ROS机器人程序设计》 刘品杰 译

  (欢迎转载,转载请注明出处。)

转载于:https://www.cnblogs.com/xuanxiaochen/p/6013886.html

ROS笔记——创建简单的主题发布节点和主题订阅节点相关推荐

  1. ubuntu18.04 ROS melodic—创建简单的机器人模型smartcar

    因为古月原来链接内容和新版本有些差异问题,现在最新版基础上整理下记录供参考 ROS探索总结(五)-创建简单的机器人模型smartcar 前面我们使用的是已有的机器人模型进行仿真,这一节我们将建立一个简 ...

  2. ROS笔记(16) ArbotiX

    ROS笔记(16) ArbotiX 1. ArbotiX简介 2. 配置节点 3. 配置控制器 4. 运行仿真 1. ArbotiX简介 车模都搭好了,现在需要让小车动起来 此时需要一些工具 Arbo ...

  3. ROS入门笔记(十):编写与测试简单的消息发布器和订阅器(C++)

    ROS入门笔记(十):编写与测试简单的消息发布器和订阅器(C++) 文章目录 01 导读 02 功能包的创建 03 功能包的源代码编写 3.1 编写发布器节点(talker.cpp) 3.2 编写订阅 ...

  4. ROS学习笔记12(用Python写一个简单的消息发布和消息订阅)

    文章目录 1 写一个消息发布节点 2 写一个消息订阅节点 3 构建节点 1 写一个消息发布节点 $ roscd beginner_tutorials $ mkdir scripts $ cd scri ...

  5. ROS学习笔记11(用C++写一个简单的消息发布和消息订阅)

    文章目录 1 写一个消息发布节点 2 写一个消息订阅节点 3 构建节点 1 写一个消息发布节点 首先切换到工作目录: roscd beginner_tutorials 接着,创建src/talker. ...

  6. ROS学习笔记13(测试一个简单的消息发布和消息订阅)

    文章目录 1 运行消息发布 2 运行消息订阅 1 运行消息发布 $ roscore # In your catkin workspace $ cd ~/catkin_ws $ source ./dev ...

  7. ros订阅话题python_ROS入门教程 (写一个简单的消息发布器和订阅器 (Python))

    Note: This tutorial assumes that you have completed the previous tutorials: 创建ROS消息和ROS服务. Descripti ...

  8. ROS探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真

    ROS探索总结(四)--简单的机器人仿真 前边我们已经介绍了ROS的基本情况,以及新手入门ROS的初级教程,现在就要真正的使用ROS进入机器人世界了.接下来我们涉及到的很多例程都是<ROS by ...

  9. 判断frame是否已创建_大白菜的ROS笔记(8)(创建TF广播和监听,内容很多,细节满满)...

    创建TF广播和监听 #include <ros/ros.h> #include <tf/transform_broadcaster.h> #include <turtle ...

  10. 使用方法 ros_大白菜的ROS笔记(8)(创建TF广播和监听,内容很多,细节满满)...

    创建TF广播和监听 #include <ros/ros.h> #include <tf/transform_broadcaster.h> #include <turtle ...

最新文章

  1. 机器学习(实战)泰坦尼克号(游客存活率预估)
  2. 2字节取值范围_第二篇——整数和浮点数在计算机中的表示(2)
  3. matlab有限差分一维导热,一维导热方程-有限差分法-matlab实现11.docx
  4. 华为服务器忘记管理密码怎么修改,忘记云服务器密码怎么修改
  5. 单片机小白学步系列(十四) 点亮第一个LED的程序分析
  6. 漫步微积分三十一——定积分的直观含义
  7. ‘mvn‘ 不是内部或外部命令,也不是可运行的程序
  8. php pdo 抛出异常模式,php实现的PDO异常处理操作分析
  9. Android 十年之路: 主屏与导航
  10. 钽电容失效、爆炸、烧毁的种种原因!
  11. 网络安全笔记-18-ICMP 协议
  12. 无法加载文件C:\Users\TANG\AppData\Roaming\npm\nrm.ps1,因为在此系统上禁止运行脚本
  13. 消失的2000万辆小黄车去哪儿了?
  14. 网络工程师高薪就业行业有哪些
  15. 【优化求解】基于多策略黑猩猩优化算法求解单目标优化问题附matlab代码
  16. Python之小数点位数的控制输出
  17. oracle pdb还原为no-cdb,12c PDB备份与恢复测试
  18. Unity Shader unity文档学习笔记(十七):径向模糊 实现类似冲锋时的速度感
  19. 北上广深杭房价高压下,这也许是程序员扎根的唯一出路...
  20. MNE库读取gdf数据文件

热门文章

  1. 关于 Hypervisor的理解
  2. 高仿富途牛牛-组件化-优秀的时钟
  3. 2017普实软件迎新年会报道
  4. 常用邮箱服务器地址大全截止2020-9
  5. Windows锁屏图片文件存放位置
  6. Android开发之打卡功能
  7. python图标变成了白色_桌面图标上有个白色文件图标怎么去掉?解决桌面图标白色方块挡住...
  8. Vue入门(Vue.js,库与框架,MVVM,BootCDN,Vue入门,数据双向绑定,vue事件,生命周期,钩子函数 )
  9. 〖算法〗-- 排序lowB三人组:冒泡排序、选择排序、 插入排序
  10. 37岁老表弟接触Python,在危机中抓住新机,3年搭建Python金融“金字塔”