[ROS2]机械臂urdf和meshes导入及模型rviz2可视化

前言:本人新学小白,实践做个记录笔记,如有侵权,请联系删除。

1.建立工作空间

mkdir z1_ws
cd z1_ws
mkdir src
cd src
ros2 pkg create z1_description --build-type ament_python 

2. 建立urdf文件夹,并导入urdf文件

cd z1_description
mkdir urdf
cd urdf
touch z1_base.urdf

将模型urdf文件复制到z1_base.urdf文件中

3.建立meshes文件夹,并将meshes文件复制放入

cd ..
mkdir meshes

4.建立并编写launch文件

将命令退回到z1_description内

mkdir launch
cd launch
touch z1_rviz2.launch.py

编写z1_rviz2.launch.py文件

import os
from launch import LaunchDescription
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageShare


def generate_launch_description():
    package_name = 'z1_description'
    urdf_name = "z1_base.urdf"

    ld = LaunchDescription()
    #用于描述一组要同时启动的ROS 2组件(节点、服务等)及其配置。

    pkg_share = FindPackageShare(package=package_name).find(package_name) 
    #FindPackageShare是ament_index_python库提供的一个工具,用于定位ROS 2包的共享资源目录。
    #这通常包括包的share目录,其中可能包含URDF文件、配置文件、启动文件等。

    urdf_model_path = os.path.join(pkg_share, f'urdf/{urdf_name}')
    #这行代码使用os.path.join函数来构建URDF文件的完整路径。
    #pkg_share: 是从FindPackageShare获取的包的share目录路径。
    #f'urdf/{urdf_name}': 是一个格式化字符串,其中urdf_name应该是一个变量,存储了URDF文件的名称(不包括扩展名,通常是.urdf或.urdf.xacro)。
    #这个字符串指定了相对于share目录的URDF文件的位置。

    #joint_state_publisher_gui 负责发布机器人关节数据信息,通过joint_states话题发布
    #robot_state_publisher_node负责发布机器人模型信息robot_description,并将joint_states数据转换tf信息发布
    #rviz2_node负责显示机器人的信息。

    robot_state_publisher_node = Node(
        package='robot_state_publisher',     # 指定节点的 ROS 包名
        executable='robot_state_publisher',  # 指定节点的可执行文件名
        arguments=[urdf_model_path]          # 传递给节点的命令行参数,这里是 URDF 文件的路径
        )

    joint_state_publisher_node = Node(
        package='joint_state_publisher_gui',
        executable='joint_state_publisher_gui',
        name='joint_state_publisher_gui',
        arguments=[urdf_model_path]
        )

    rviz2_node = Node(
        package='rviz2',
        executable='rviz2',
        name='rviz2',
        output='screen',
        )
    # 将节点添加到 LaunchDescription 对象中
    ld.add_action(robot_state_publisher_node)
    ld.add_action(joint_state_publisher_node)
    ld.add_action(rviz2_node)
    # 返回 LaunchDescription 对象
    return ld

 安装joint_state_publisher_guirobot_state_publisher两个包

sudo apt install ros-$ROS_DISTRO-joint-state-publisher-gui ros-$ROS_DISTRO-robot-state-publisherCopy to clipboardErrorCopied

5. 修改setup.py

from glob import glob
import os
from setuptools import find_packages, setup

package_name = 'z1_description'

setup(
    name=package_name,
    version='0.0.0',
    packages=find_packages(exclude=['test']),
    data_files=[
        ('share/ament_index/resource_index/packages',
            ['resource/' + package_name]),
        ('share/' + package_name, ['package.xml']),
        (os.path.join('share', package_name, 'launch'), glob('launch/*.launch.py')),
        (os.path.join('share', package_name, 'urdf'), glob('urdf/**')),
        
        ('share/' + package_name + '/meshes/visual', [
        'meshes/visual/z1_Link00.dae',
        'meshes/visual/z1_Link01.dae',
        'meshes/visual/z1_Link02.dae',
        'meshes/visual/z1_Link03.dae',
        'meshes/visual/z1_Link04.dae',
        'meshes/visual/z1_Link05.dae',
        'meshes/visual/z1_Link06.dae',
        ]),
        ('share/' + package_name + '/meshes/collision', [
        'meshes/collision/z1_Link00.STL',
        'meshes/collision/z1_Link01.STL',
        'meshes/collision/z1_Link02.STL',
        'meshes/collision/z1_Link03.STL',
        'meshes/collision/z1_Link04.STL',
        'meshes/collision/z1_Link05.STL',
        'meshes/collision/z1_Link06.STL',
        ]),
    ],
    install_requires=['setuptools'],
    zip_safe=True,
    maintainer='song',
    maintainer_email='song@todo.todo',
    description='TODO: Package description',
    license='TODO: License declaration',
    tests_require=['pytest'],
    entry_points={
        'console_scripts': [
        ],
    },
)

6.编译并运行

退回到工作空间再编译运行

colcon build
source install/setup.bash
ros2 launch z1_description display_rviz2.launch.py

运行结果

修改一

修改二

修改三:点击左下角的Add,增加RobotModel.

修改四:修改左边新加入的RobotModel中的Description.

模型已经显现出来了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值