# 4.建图前准备3-准备URDF 关于URDF在第八章我们已经介绍了,接下来我们直接使用它来编写URDF。 ## 一、新建功能包 在 `fishbot/src` 目录下创建一个新的功能包,命名为 `fishbot_description`: ``` cd ~/fishbot_ws/src ros2 pkg create --build-type ament_python fishbot_description ``` ## 二、编写URDF 在 src/fishbot_description/ 目录下新建 urdf 文件夹,然后新建 fishbot_v1.0.0.urdf 文件 ,编写如下内容: ``` ``` 接着修改:src/fishbot_description/setup.py 文件 ,拷贝所有 URDF 到 Install 目录。 ``` 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': [ "rotate_wheel= fishbot_description.rotate_wheel:main" ], }, ) ``` ## 三、编写Launch文件 在 fishbot_bringup 下新建 launch 文件夹,然后新建 fishbot_bringup.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 = 'fishbot_description' urdf_name = "fishbot_v1.0.0.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', executable='joint_state_publisher', name='joint_state_publisher', arguments=[urdf_model_path], output='screen', ) fishbot_bringup_node = Node( package='fishbot_bringup', executable='fishbot_bringup', name='fishbot_bringup', output='screen', ) ld.add_action(joint_state_publisher_node) ld.add_action(robot_state_publisher_node) ld.add_action(fishbot_bringup_node) return ld ``` 接着修改:src/fishbot_bringup/CMakeLists.txt 添加拷贝 launch 指令 ``` install( DIRECTORY launch DESTINATION share/${PROJECT_NAME} ) ``` ## 四 、编译运行测试 ``` colcon build source install/setup.bash ros2 launch fishbot_bringup fishbot_bringup.launch.py ``` 接着测试查看 TF ``` ros2 run rqt_tf_tree rqt_tf_tree ``` 最终得到下图 ![image-20230818150005938](4.%E5%BB%BA%E5%9B%BE%E5%89%8D%E5%87%86%E5%A4%873-%E5%87%86%E5%A4%87URDF/imgs/image-20230818150005938.png) ## 五、总结 有了这样一个TF结构,我们的建图前的准备工作就差不多了。