sw2urdf导入ros2

sw2urdf插件导出urdf模型并在ros2-rviz2显示


利用sw2rudf插件从solidworks导出urdf文件并导入ros中,已经非常成熟且有很多教程了,不熟悉的朋友可以自行搜索。

然而ros2和ros有较大的差别,urdf的使用也有不少的差异。最重要的是sw2urdf插件导出的urdf模型并不能直接在ros2中使用,这给ros2使用者带来了不少的麻烦,目前网上也缺乏一个系统详细的教程。

本教程主要分享笔者利用sw2urdf插件生成的urdf并导入ros2中的一些经验,仅供参考~~


0. 软件配置

笔者所使用的配置环境如下:

  • 操作系统:ubuntu 20.04LTS (在虚拟机下使用)

  • ros2版本:ros2 foxy

  • 软件:vscode

  • 软件:solidworks 2016 sp5 (win10下建模使用)

1. solidworks建模并导出urdf

首先,安装sw2urdf插件,下载地址:sw_urdf_exporter - ROS Wiki

其次,按照教程,依次设置坐标系、坐标轴、运动副等,并导出urdf文件。注意在最后导出的时候,选择导出完整的urdf文件。这一步在网上有很多教程,大家自行搜索解决。笔者建立的模型是非常简单几个旋转运动副,如图所示(有点丑陋,勿怪。。。。。)。大家根据自己的需要建立模型即可。

最后,导出urdf是一个文件夹,拷贝在ros中略微修改可以直接使用,但是在ros2中却不可以。笔者导出的文件夹名字是urdf2.SLDASM,其中包含的目录如下图。

2. ros2准备工作

第一步,确保自己的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了。

3. ros2与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文件应用到这一工作空间中。

4. 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'(推荐)

  • 2.修改package.xml文件

将lesson__urdf中的package.xml代码复制覆盖到test_urdf的package.xml,并修改图中所示。

  • 3.修改meshes文件夹

我们从sw_urdf插件导出的文件夹中有一个meshes文件夹,其中是STL格式的文件(3D打印的同学应该很熟悉)。将其拷贝到新建的package的meshes/visual文件夹下,并把原来的文件删除。

  • 4.修改urdf文件夹

首先把从sw_urdf插件导出的urdf文件夹中后缀为urdf的文件拷贝到test_urdf的urdf文件夹下面

接下来打开这个urdf文件,我们需要进行一定的修改。尤其是其中的filename的路径,需要我们进行修改。需要修改为你工作空间中对应STL文件的路径。

PS:从这里我们可以看出,在从sw_urdf导出urdf文件的时候,记得取一个与package name相对应的文件名,可以省去很多麻烦!!!

依次将其中所有的filename进行修改,如果filename较多的话可能比较麻烦,但是也有其他办法,以后再分享吧,算是先挖个坑。

  • 5.修改launch文件夹

需要修改的有两处,一是将文件夹路径替换为自己的工作空间,笔者的是test_urdf

二是将原来的urdf文件名字替换为自己的,笔者的是urdf2.SLDASM.urdf

同时,我们可以将launch.py文件名字修改一下,以作区分

至此,必要的修改就完成了

5. RVIZ2中显示

完成以上修改后,我们只需要colcon build,然后source,接着launch一下,launch命令如下:

ros2 launch test_urdf view2_robot_launch.py

然后就可以进入RVIZ2了。

首次进入可能不显示模型,无需惊慌,检查一下Fixed Frame是否正确。通常首次进入都需要重新选择。

接着就可以在RVIZ中看到自己的模型了。

6. RVIZ2显示问题

很多情况下,可能Axis太大遮盖了模型,或者没有TF之类的,大家可以搜索一下ros RVIZ相关教程,有很多详细的解释,这里就不罗嗦了。

弹出的Joint State Publisher可以手动来控制自己的模型运动,大家可以试试了~~

可以手动来控制自己的模型运动,大家可以试试了~~

你可能感兴趣的:(自动驾驶,ubuntu,物联网)