利用sw2rudf插件从solidworks导出urdf文件并导入ros中,已经非常成熟且有很多教程了,不熟悉的朋友可以自行搜索。
然而ros2和ros有较大的差别,urdf的使用也有不少的差异。最重要的是sw2urdf插件导出的urdf模型并不能直接在ros2中使用,这给ros2使用者带来了不少的麻烦,目前网上也缺乏一个系统详细的教程。
本教程主要分享笔者利用sw2urdf插件生成的urdf并导入ros2中的一些经验,仅供参考~~
笔者所使用的配置环境如下:
操作系统:ubuntu 20.04LTS (在虚拟机下使用)
ros2版本:ros2 foxy
软件:vscode
软件:solidworks 2016 sp5 (win10下建模使用)
首先,安装sw2urdf插件,下载地址:sw_urdf_exporter - ROS Wiki
其次,按照教程,依次设置坐标系、坐标轴、运动副等,并导出urdf文件。注意在最后导出的时候,选择导出完整的urdf文件。这一步在网上有很多教程,大家自行搜索解决。笔者建立的模型是非常简单几个旋转运动副,如图所示(有点丑陋,勿怪。。。。。)。大家根据自己的需要建立模型即可。
最后,导出urdf是一个文件夹,拷贝在ros中略微修改可以直接使用,但是在ros2中却不可以。笔者导出的文件夹名字是urdf2.SLDASM,其中包含的目录如下图。
第一步,确保自己的ros2环境配置成功,能够运行官方turtle demo,这表明ros2环境配置是好的。
第二步,确保已安装rviz2,以及另外两个包joint_state_publisher_gui和robot_state_publisher,这两个包可以用来控制urdf模型的运动。可使用命令行安装:
sudo apt install ros-$ROS_DISTRO-joint-state-publisher-gui ros-$ROS_DISTRO-robot-state-publisher
这两步准备工作做完就可以正式配置urdf了。
在这一步,需要进行ros2的workspace,package,launch,urdf等文件的创建,笔者在这里选取的方法是使用前人已经写好的成品,在上面进行修改,已满足自己的需求。大家也可以从头建立这一些文件。总之,咱们的目标是一致的,把sw2urdf导出的urdf文件在ros2中显示出来。
ps:网上已有很多相似的工作,大家可以大胆的借鉴使用,提高效率,避免重复造轮子。
*重点来了~~~~*
第一步:在ubuntu环境下,先创建一个工作空间,笔者在这里建立了一个名为ros2_ws的工作空间,其实就是建立一个名字叫ros2_ws的文件夹。
第二步:鉴于我们要使用前人的轮子,因此cd到ros2_ws文件夹下,git clone一个已有的仓库:GitHub - olmerg/lesson_urdf: This is a ros2 package to create an arm robot in rviz using robot_state_publisher and joint_state_publisher gui,
使用的命令是:
git clone https://github.com/olmerg/lesson_urdf.git
笔者习惯在vscode中进行相关代码编写,因此使用vscode打开了这一工作空间ros2_ws,大家也可以使用终端来配置。打开后文件目录如图所示
这里面lesson_urdf是主要的package,lesson_urdf是package的名字。
第三步:git clone完成之后,可以colcon build一下看看是否可以正常build,然后launch一下,对应的命令分别是:
colcon build
记得source:
source install/setup.bash
然后launch一下:
ros2 launch lesson_urdf view_robot_launch.py
大家应该看到rviz2的界面以及模型了
至此,我们就已经将前人的工作给复制到我们的工作空间了,接下来就需要进行自定义修改了,把自己的urdf文件应用到这一工作空间中。
既然要建立自己的package和urdf文件,那么我们有两个办法,一个是在前人的工作上进行覆盖,比如前文的从git上clone的lesson_urdf这个package;另一个是重新建立package,这里我们选择重新建立package,并借鉴部分前人代码,这可以给我们更大的自由。
第一步:ros2中创建package需要使用ros2 pkg create命令;
ros2 pkg create test_urdf --build-type ament_python
第二步:将lesson_urdf文件夹中的launch, meshes,urdf,rviz共4个文件夹拷贝到新建的test_urdf文件夹目录下。
第三步:由于我们直接拷贝的4个文件夹包含的信息是原来lensson_urdf中的,所以我们需要修改其中的信息,替换成我们所需要的。
1.修改setup.py
将lesson_urdf中setup.py的部分代码拷贝到test_urdf的setup.py中,覆盖原来的代码;注意只需要拷贝覆盖setup里面的代码,上面的代码只需要增添一行
from glob import glob
也可以全部拷贝,然后修改package_name='test_urdf'
(推荐)
将lesson__urdf中的package.xml代码复制覆盖到test_urdf的package.xml,并修改图中所示。
我们从sw_urdf插件导出的文件夹中有一个meshes文件夹,其中是STL格式的文件(3D打印的同学应该很熟悉)。将其拷贝到新建的package的meshes/visual文件夹下,并把原来的文件删除。
首先把从sw_urdf插件导出的urdf文件夹中后缀为urdf的文件拷贝到test_urdf的urdf文件夹下面
接下来打开这个urdf文件,我们需要进行一定的修改。尤其是其中的filename的路径,需要我们进行修改。需要修改为你工作空间中对应STL文件的路径。
PS:从这里我们可以看出,在从sw_urdf导出urdf文件的时候,记得取一个与package name相对应的文件名,可以省去很多麻烦!!!
依次将其中所有的filename进行修改,如果filename较多的话可能比较麻烦,但是也有其他办法,以后再分享吧,算是先挖个坑。
需要修改的有两处,一是将文件夹路径替换为自己的工作空间,笔者的是test_urdf
二是将原来的urdf文件名字替换为自己的,笔者的是urdf2.SLDASM.urdf
同时,我们可以将launch.py文件名字修改一下,以作区分
至此,必要的修改就完成了
完成以上修改后,我们只需要colcon build,然后source,接着launch一下,launch命令如下:
ros2 launch test_urdf view2_robot_launch.py
然后就可以进入RVIZ2了。
首次进入可能不显示模型,无需惊慌,检查一下Fixed Frame是否正确。通常首次进入都需要重新选择。
接着就可以在RVIZ中看到自己的模型了。
很多情况下,可能Axis太大遮盖了模型,或者没有TF之类的,大家可以搜索一下ros RVIZ相关教程,有很多详细的解释,这里就不罗嗦了。
弹出的Joint State Publisher可以手动来控制自己的模型运动,大家可以试试了~~
可以手动来控制自己的模型运动,大家可以试试了~~