ROS(robot operation system)主要解决了两个问题:
1,进程间通信及主机间通信
2,代码管理
这篇笔记记录ROS进程间通信的方法。
ROS解决进程间通信的方法主要有:主题,服务及动态参数。
1,主题适合于多个节点需要频繁通信的场合,例如智能小车的超声波测距节点,不断的将距离数据发送给处理单元节点。
2,服务适合于不频繁通信的场合。某个节点A向节点B提交服务申请,节点B执行回调函数,并将结果返回给节点A。实际中,我发现调用服务(即便是最简单的服务)到返回结果,在时间上是有明显的延迟的,暂时还不清楚是程序执行耗时,还是ros::spin()间歇耗时。总之,调用服务比主题通信耗费资源更多。
3,动态参数是对目标进程的内存的写操作,适合于修改目标节点的参数。
==============================1,编写自定义.msg文件=========
cd ~/catkin_ws/src
在/src目录下,执行
catkin_create_pkg study_topic std_msgs rospy roscpp
生成study_topic包
在study_topic目录下
mkdir msg
生成msg文件夹
在msg目录下,用常用的编辑器gedit,vim…都可以
vim study.msg
生成study.msg文件,并编辑
string xingming
int32 xuehao
float32 shengao
可以看到.msg文件的内容,跟c的结构体的定义很相似。我猜,等会catkin会把.msg文件编译成消息的结构体,我们使用主题通信时,也会用到这个结构体通信。
接下来,我们要编写配置文档package.xml以及cmakelists。
vim package.xml
1,打开package.xml,加上两行
<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>
然后打开CMakeLists.txt
vim CMakeLists.txt
2,从最顶段开始,找到
find_package(catkin REQUIRED COMPONENTS
roscpp rospy std_msg)
<