CoppeliaSim学习互助群:1084817794
CoppeliaSim
CoppeliaSim作为具有高扩展性的仿真平台,提供了许多接口,可谓万物皆插件,只要编译生成插件即可。github提供了simExtROS插件的源代码。当自带的ROS插件功能无法满足时,可以修改其源代码,编译生成插件即可。本文基于Ubuntu 20.04系统测试。
准备工作
建立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
-
下载libPlugin
注意:libPlugin版本必须与CoppeliaSim的版本相对应,可以下载历史版本
-
下载sim_ros_interface
注意:同libPlugin,版本必须与CoppeliaSim版本相同,可下载历史版本
git clone --recursive https://github.com/CoppeliaRobotics/simExtROSInterface.git sim_ros_interface
-
添加自定义消息ackermann_msgs
修改sim_ros_interface包CMakeLists.txt、package.xml、meta/messages.txt。
-
启动roscore
-
工作空间下编译
将sim_ros_interface放在工作空间src下,注意,如果工作空间用catkin_make编译过,需要删除devel与build文件,才能用catkin build 编译,或者用catkin_make_isolated编译(我没试过,但其功能与catkin build 差不多)
问题1:COPPELIASIM_ROOT_DIR 路径没设置
解决:在~/.bashrc末尾添加export COPPELIASIM_ROOT_DIR=/home/lyz/sim_ws/src/CoppeliaSim_Edu_V4_1_0_Ubuntu16_04/
(具体路径根据自己的CoppeliaSim路径而定)。确认环境变量添加成功,如果添加后还报同样的错误,关闭终端重启即可。
问题2:
解决:这是因为CoppeliaSim是最新的,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后一下子就成功了。
发现CoppeliaSim学习资料好少,建立个CoppeliaSim学习互助群:1084817794