ROS2-rviz2实例化机械臂

ROS2-rviz2实例化机械臂

摘要

本文基于ROS2 实现了机械臂在rviz2中的建模,实现过程真的很艰辛,没有ROS1的经验,ROS2的rviz2教程又很少,虽然rviz和rviz2打开后几乎一样,但是编译过程,launch文件的编写,其代表的含义都不一样。这也算是一个rviz2实例化的教程吧!在这里插入图片描述

实现环境和对象

ROS版本:ROS2-foxy
机械臂:aubo-i5-机械臂(其urdf文件可在官网下载得到,后文会给出下载链接)

学习基础:学习过官网的基础教程,懂得创建、编译和运行package

教学开始

  1. 在dev_ws/src 下创建一个包命名为aubo_i5_simulation
ros2 pkg create aubo_i5_simulation --build-type ament_cmake --dependencies rclcpp
  1. 配置urdf和rviz文件
    a. 进入dev_ws/src/aubo_i5_simulation,新建一个urdf文件夹,用来放urdf文件。
    我们使用现成的urdf文件(下载地址:https://github.com/lg609/aubo_robot/blob/master/aubo_description/urdf/aubo_i5.urdf),下载到urdf文件夹,命名为aubo_i5.urdf
    关于urdf文件的格式及含义这里简单解释一下,它就是一个模型文件。aubo_i5.urdf包含了机械臂的框架,比如节点和轴的信息,以及具体的几何数据。需要注意的是,这个urdf文件把几何结构用STL、DAE文件来表示的,比如:
<geometry>
        <mesh filename="package://aubo_description/meshes/aubo_i5/collision/base_link.STL" />
      </geometry>

因此,我们还需要补充一下这些文件。
b.在aubo_i5_simulation中再新建一个meshes文件夹,把这个链接(https://github.com/lg609/aubo_robot/tree/master/aubo_description/meshes)里的aubo_i5文件夹下载到meshes中。
c.注意我们这里包的名字是aubo_i5_simulation, 下载的urdf里meshes的路径是aubo_description下的,所以我们需要把urdf/aubo_i5.urdf里有关有关meshes的路径全部修改一下,把aubo_description改成aubo_i5_simulation。比如:

<geometry>
        <mesh filename="package://aubo_i5_simulation/meshes/aubo_i5/collision/base_link.STL" />
      </geometry>

d. 至此urdf文件算是搞定了,下面配置rviz文件,ROS2的默认rviz文件在/opt/ros/foxy/share/rviz_common下,复制该目录下的default.rviz到aubo_i5_simulation/urdf文件夹下。即跟urdf文件在同一文件夹下。

3.配置launch文件
在aubo_i5_simulation里新建一个launch文件夹,然后在launch文件夹里新建一个display.launch.py文件,其内容为下列代码:

import os
from ament_index_python.packages import get_package_share_directory
import launch
from launch.substitutions import Command, LaunchConfiguration
import launch_ros
import os

def generate_launch_description():
    pkg_share=launch_ros.substitutions.FindPackageShare(package='aubo_i5_simulation').find('aubo_i5_simulation')
    urdf_path =os.path.join(pkg_share, 'urdf/aubo_i5.urdf')
    rviz_path =os.path.join(pkg_share, 'urdf/default.rviz')
    with open(urdf_path, 'r') as infp:
        robot_desc = infp.read()
    rsp_params = {'robot_description': robot_desc}
    
    
    
    robot_state_publisher_node = launch_ros.actions.Node(
        package='robot_state_publisher',
        executable='robot_state_publisher',
        output='screen',
        parameters=[rsp_params]
    )
    joint_state_publisher_node = launch_ros.actions.Node(
        package='joint_state_publisher',
        executable='joint_state_publisher',
        name='joint_state_publisher',
        output='screen',
        condition=launch.conditions.UnlessCondition(LaunchConfiguration('gui'))
    )
    joint_state_publisher_gui_node = launch_ros.actions.Node(
        package='joint_state_publisher_gui',
        executable='joint_state_publisher_gui',
        name='joint_state_publisher_gui',
        output='screen',
        condition=launch.conditions.IfCondition(LaunchConfiguration('gui'))
    )
    rviz_node = launch_ros.actions.Node(
        package='rviz2',
        executable='rviz2',
        name='rviz2',
        output='screen',
        arguments=['-d', rviz_path],
    )
 
    return launch.LaunchDescription([
        launch.actions.DeclareLaunchArgument(name='gui', default_value='True',
                                             description='Flag to enable joint_state_publisher_gui'),
        launch.actions.DeclareLaunchArgument(name='model', default_value=urdf_path,
                                             description='Absolute path to robot urdf file'),
        
        joint_state_publisher_node,
        joint_state_publisher_gui_node,
        robot_state_publisher_node,
        rviz_node
    ])

note:这里用了一个joint_state_publisher_gui_node,需要在编译前安装好,安装命令:

sudo apt-get install ros-foxy-joint-state-publisher-gui 

4.修改cmakelists.txt
打开cmakelists.txt,在ament_package()前面加上以下几行:

# Install launch files.
install(DIRECTORY
  launch
  meshes
  urdf
  DESTINATION share/${PROJECT_NAME}/
)

这是为了编译时把你自己建立的launch,meshes,urdf一起复制到执行文件夹内,不然编译后运行时会找不到相应的文件。

5.编译该包
在dev_ws下打开命令窗,输入:

colcon build --packages-select aubo_i5_simulation

配置启动文件

. install/setup.bash 

执行launch文件

ros2 launch aubo_i5_simulation display.launch.py 
  1. 这个时候会自动启动rviz2,打开后的界面是这样的
    在这里插入图片描述
    把左上角Fixed frame 里的map改为base_link
    然后点击左下角add,找到robotmodel,添加进去
    在这里插入图片描述
    然后把robotmodel的选项按下图更改,机械臂就出来了
    在这里插入图片描述

总结

本文没有讲的很细,只能说是初步实现了rviz2的建模,很多细节还是要靠自己理解!!!答主也在学习ROS2的过程中,以后也会陆续分享一些学习经验!与君共勉!

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值