ros订阅/发布节点编程实现
ros系统是通过各个节点完成传递话题消息或者提供服务来进行通信。
启动:roscore (运行roscore指令后会自动启动:rosmaster,Parameter Server,rosout)
查看当前活跃节点:rosnode list
运行节点:1. rosrun ~
2. roslaunch ~
ros应用程序发布时,通常都是以包package为单位,查看package:rosrun package (然后按tab tab)
查看关于传送数据都能有什么操作:rosmsg
查看关于传送话题都能有什么操作:rostopic
查看当前ros系统中活跃的话题:rostopic list
来查看相关指令的功能:rossrv
查看当前系统活跃的服务:rosservice list
话题
话题和节点是ros系统中两大基本组件,节点是基本的处理单元,话题是节点间基本的通信单元之一
发布节点编程实现
过程
-
创建话题文件 .cpp/.py
由四部分构成:1. 初始化ROS节点 2.向Ros Master注册节点信息,包括发布的话题名和话题消息类型。3.创建消息数据(无论是官方提供的还是自定义的消息,在消息类型文件(.msg文件)中只是声明了变量及其数据类型,因此你自己在这里需要为变量复等…)4.按照一定的频率循环发布消息。
-
编译 .cpp文件需要编译,.py文件不需要
保存该文件后,就该去编译了,注意cpp文件需要编译,py文件不需要。具体编译方法为:
2.1设置编译规则
回到功能包目录下,找到CMakeLists.txt(设置编译规则),然后把下面两行代码复制到Install上边
add_executable(文件名字 src/文件名字.cpp)#设置需要编译的代码文件的名字和生成的可执行文件,即把哪一个程序文件编译成按一个可执行文件
target_link_libraries(velocity_publisher${catkin_LIBRARIES})#设置链接库,把你的可执行文件和ROS中的库做一个链接。
2.2 catkin_make
修改好之后就可以回到工作空间根目录去编译了。catkin_make
-
配置环境变量
编译好之后再用source配置个环境变量就OK了。source devel/setup.bash
具体的编译和配置环境变量内容在ROS学习笔记1中有介绍。
-
执行发布话题文件
rosrun 文件夹名 文件名
订阅节点编程实现
订阅话题和发布话题大体思路都一样
1.创建订阅者程序 在相应的工作空间的Src下创建.cpp或.py文件
文件至少由四部分组成: 1.初始化ROS节点 2.订阅需要的话题,注册回调函数(订阅话题就像响应中断,你也不知道你订阅的话题什么时候会来,因此需要像响应终端一样,在话题没来的时候一直等待,在话题来了之后就马上调用回调函数响应,因此回调函数尽可能写的短一点。主要是打印消息或者对消息做简单的处理)3.循环等待话题消息,一旦接受到消息后就进入回调函数 4.在回调函数中完成消息的处理(此时需注意,回调函数不能太复杂,不然在程序运行的时候就光运行你的函数了,等到下一次话题消息再来也不响应。)
2.编译
1.设置编译规则
2.在工作空间中catkin_make
3.配置环境变量
source devel/setup.bash
4.执行订阅话题文件
rosrun 文件夹名 话题名