前言
有时候需要自己定制一些特定的msg消息类型,而原有的就不一定能满足,这时候就需要自己进行一些相关的设置了
对于自定义的ros节点,也能通过roslaunch启动节点(py程序)
rosmsg相关设置
默认msg消息类型
如geometry_msgs:msg API
一、创建工作空间
我这里采用的编译方式是catkin build,而不是catkin_make,是因为一些需要,如mavros和mavlink的编译方式为catkin build,如果不需要下载这两个包,则采用哪一种编译方式都不影响
1 | mkdir -p catkin_ws/src |
下图是我已经全部创建好后的所有ros包,也正是有mavlink和mavros,所有才采用catkin build编译
二、在工作空间创建新的ros消息包
1 | cd ~/catkin_ws/src |
然后打开Velocity.msg
1 | gedit Velocity.msg |
将如下代码复制粘贴进去
1 | float32 vx |
文件结构如下图
三、修改package.xml
因为需要message_generation生成C++或Python能使用的代码,所以向package.xml文件中添加如下两行:
1 | <build_depend>message_generation</build_depend> |
在如下位置进行添加
四、修改CMakeLists.txt
CMakeLists.txt中有四个地方需要修改:
4.1 添加message_generation
向find_package()中添加message_generation
1 | find_package(catkin REQUIRED COMPONENTS |
在如下位置进行修改为上面的代码
4.2 添加Velocity.msg
向add_message_files()中添加Velocity.msg
1 | add_message_files( |
在如下位置进行修改为上面的代码
4.3 去掉generate_message()注释
4.4 添加message_runtime
向catkin_package()添加message_runtime
1 | catkin_package( |
在如下位置进行修改为上面的代码
五、编译
1 | cd ~/catkin_ws |
六、测试
首先,要启动roscore
然后,在另一个新终端,执行如下命令
1
2
3cd ~/catkin_ws
source devel/setup.bash
rosmsg show ldg_msgs/Velocity出现如下信息,则说明配置成功
python代码测试
创建test.py程序,拷贝如下代码,不报错即可
1 | #!/usr/bin/env python |
七、添加多个自定义msg消息类型
7.1 创建多个msg文件
ldg_msgs
文件夹下中添加VelocityZ.msg
、Imu.msg
、Position.msg
等文件
ldg_msgs/msg
文件目录结构
msg消息类型
7.2 CMakeLists.txt添加msg
7.3 编译
1 | cd ~/catkin_ws |
已经定义过msg消息类型后,在此基础之上,只需要照着第七步就可以完成后面的多个msg消息类型的定制化了,同样的,也能参照第六步进行相关测试
roslaunch相关设置
已经通过多个py程序定义了多个ros节点
一、文件结构
- 工作空间名:catkin_ws
- 编译方式:catkin build
- 自定义msg包名:ldg_msgs
- ros控制程序包名:ros_controller
- roslaunch启动文件:ros_airsim.launch
- ros节点对应驱动py:*_driver.py
- ros控制程序py:ros_controller.py
二、roslaunch文件编写
在catkin_ws/src文件夹下创建一个和include、src同级的launch文件夹,并在launch文件夹下创建
.luanch
文件,.launch
文件内容如下
1 | <launch> |
pkg是ros的程序包名,name是对节点重新进行命名,type是对应相应节点的py程序
三、roslaunch启动多节点
1 | cd catkin_ws |
启动launch文件后,终端输出信息如下:
利用rostopic list查看信息,这里自定义的节点订阅和发布的topic就都显示出来了
参考文献
总结
因为控制代码使用python语言写的,因此在利用roslaunch启动ros的多个节点时,并不需要在CMakeLists.list和package.xml里面进行相关的配置,但是自定义msg消息类型则是需要进行配置的,至此,就能全部通过ros来控制了,最开始我通过shell命令来启动多个python文件从而来启动多个节点,这种方式不如roslaunch好