1. 使用 RVIZ2 可视化 URDF 模型
  2. 建立机器人描述功能包
ros2 pkg create fishbot_description --build-type ament_python
  1. 建立 urdf 文件夹编写 urdf 文件
cd fishbot_description && mkdir urdf 
touch fishbot_base.urdf
<?xml version="1.0"?>
<robot name="fishbot">
 
	<!-- base link -->
	<link name="base_link">
		<visual>
			<origin xyz="0 0 0.0" rpy="0 0 0"/>
			<geometry>
				<cylinder length="0.12" radius="0.10"/>
			</geometry>
		</visual>
	</link>
	
	<!-- laser link -->
	<link name="laser_link">
		<visual>
			<origin xyz="0 0 0" rpy="0 0 0"/>
			<geometry>
				<cylinder length="0.02" radius="0.02"/>	
			</geometry>
			<material name="black">
				<color rgba="0.0 0.0 0.0 0.5" /> 
			</material>
		</visual>
	</link>
	
	<!-- laser joint -->
	<joint name="laser_joint" type="fixed">
		<parent link="base_link" />
		<child link="laser_link" />
		<origin xyz="0 0 0.075" />
	</joint>
 
</robot>
  1. 建立 launch 文件夹,编写 launch 文件
    • joint_state_publisher_gui 负责发布机器人关节数据信息,通过 joint_states 话题发布
    • robot_state_publisher_node 负责发布机器人模型信息 robot_description,并将 joint_states 数据转换 tf 信息发布
    • rviz2_node 负责显示机器人的信息
mkdir launch
touch display_rviz2.launch.py
sudo apt install ros-$ROS_DISTRO-joint-state-publisher-gui ros-$ROS_DISTRO-robot-state-publisher
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 = 'fishbot_description'
    urdf_name = "fishbot_base.urdf"
 
    ld = LaunchDescription()
    pkg_share = FindPackageShare(package=package_name).find(package_name) 
    urdf_model_path = os.path.join(pkg_share, f'urdf/{urdf_name}')
 
    robot_state_publisher_node = Node(
        package='robot_state_publisher',
        executable='robot_state_publisher',
        arguments=[urdf_model_path]
        )
 
    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',
        )
 
    ld.add_action(robot_state_publisher_node)
    ld.add_action(joint_state_publisher_node)
    ld.add_action(rviz2_node)
 
    return ld
  1. 修改 setup.py 配置,编译测试
from setuptools import setup
from glob import glob
import os
 
package_name = 'fishbot_description'
 
setup(
    name=package_name,
    version='0.0.0',
    packages=[package_name],
    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/**')),
    ],
    install_requires=['setuptools'],
    zip_safe=True,
    maintainer='root',
    maintainer_email='root@todo.todo',
    description='TODO: Package description',
    license='TODO: License declaration',
    tests_require=['pytest'],
    entry_points={
        'console_scripts': [
        ],
    },
)
colcon build
source install/setup.bash 
ros2 launch fishbot_description display_rviz2.launch.py