CoppeliaSim添加ROS自定义消息类型

CoppeliaSim

CoppeliaSim作为具有高扩展性的仿真平台,提供了许多接口,可谓万物皆插件,只要便于生成插件即可。github提供了simExtROS插件的源代码。当自带的ROS插件功能无法满足时,可以修改其源代码,编译生成插件即可。

准备工作

建立ROS工作空间

安装catkin-tools

官网
注意 由于Ubunt 20.04 是Python3,所以使用sudo apt-get install python3-catkin-tools会出现依赖问题。完整过程如下
添加repositories

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu `lsb_release -sc` main" > /etc/apt/sources.list.d/ros-latest.list'
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -

安装catkin_tools
注意下面是python3,如果是更低版本的ubuntu系统则用python
sudo apt-get update sudo apt-get install python3-catkin-tools

问题:
在这里插入图片描述
解决:看上面图的最下一行,这是缺少一个依赖osrf_pycommon,安装时要同时安装上osrf-pycommon

sudo apt install python3-catkin-tools python3-osrf-pycommon

编写自定义ROS消息包

大家自行查询,这里以我在github下载的阿克曼消息为例

git clone https://github.com/ros-drivers/ackermann_msgs.git ackermann_msgs

在这里插入图片描述
在工作空间下编译

编译sim_ros_interface

  1. 下载libPlugin
    注意:libPlugin版本必须与CoppeliaSim的版本相对应,可以下载历史版本
    在这里插入图片描述

  2. 下载sim_ros_interface
    注意:同libPlugin,版本必须与CoppeliaSim版本相同,可下载历史版本

git clone --recursive https://github.com/CoppeliaRobotics/simExtROSInterface.git sim_ros_interface
  1. 添加自定义消息ackermann_msgs
    修改sim_ros_interface包CMakeLists.txt、package.xml、meta/messages.txt。
    在cmakelist.txt添加ackermann_msgspackage.xml添加ackermann_msgs添加ackermann_msgs的两个子类型

  2. 启动roscore

  3. 工作空间下编译
    将sim_ros_interface放在工作空间src下
    在这里插入图片描述

问题1:COPPELIASIM_ROOT_DIR 路径没设置
在这里插入图片描述
解决:在~/.bashrc末尾添加export COPPELIASIM_ROOT_DIR=/home/lyz/sim_ws/src/CoppeliaSim_Edu_V4_1_0_Ubuntu16_04/(具体路径根据自己的CoppeliaSim路径而定)。确认环境变量添加成功,如果添加后还报同样的错误,关闭终端重启即可。

问题2:
在这里插入图片描述
解决:这是因为libPlugin不是最新的,需要先下载最新的libPlugin,替换CoppeliaSim里的libPlugin,然后编译会出现新的问题,
在这里插入图片描述按照提示,sudo apt install xsltproc 之后编译便没啥问题了。
6. 参考博客

由于ubuntu 16 18 的ROS都是基于python2,下载的CoppeliaSim版本一定要注意,因此上面的过程不适合,需要在github上下载历史版本的sim_ros_interface, 还有下载对应版本的libPlugin,否则编译会出现很多奇怪错误。下载历史历史版本的github教程

CoppeliaSim中测试

随便找个场景,订阅消息话题
在这里插入图片描述
在这里插入图片描述
编译没问题,在终端能看到这个话题
在这里插入图片描述

catkin build 与 catkin_make的区别

https://catkin-tools.readthedocs.io/en/latest/migration.html
主要区别是catkin build编译是独立构建的,而catkin_make编译是有依赖的,本例的工作空间下有自定义消息包ackerman_msgs与sim_ros_interface,用catkin_make编译生成的.so插件是有依赖项的,因此将其放在CoppeliaSim下是无法识别ackermann_msgs消息的。而用catkin build编译的包已经将所有需要的依赖添加,相对独立,因此放在CoppeliaSim下是不会出现依赖问题。
在这里插入图片描述
除了用catkin build编译,还可以用catkin_make_isolated单独对sim_ros_interface编译,生成的插件效果一样。

教训

一定用按照官方教程来做,否则白白浪费那么多时间,自作聪明用catkin_make可以替代catkin build,结果一直没成功,还是乖乖安装好catkin tools后一下子就成功了。

参考博客

猜你喜欢

转载自blog.csdn.net/github_39582118/article/details/113093349