赞
踩
本系列教程作者:小鱼
公众号:鱼香ROS
QQ交流群:139707339
教学视频地址:小鱼的B站
完整文档地址:鱼香ROS官网
版权声明:如非允许禁止转载与商业用途。
大家好,我是小鱼,上一节讲完joint和link,我们来把我们上面定义的简单的URDF(包含身体和雷达)用RVIZ2显示出来,直观的感受下,我们的机器人模型。
URDF可视化的步骤如下:
建立机器人描述功能包
建立urdf
文件夹编写urdf文件
建立launch
文件夹,编写launch文件
修改setup.py
配置,编译测试
轻车熟路,先创建一个fishbot_ws
工作空间,然后建立功能包,包的类型选ament_python
ros2 pkg create fishbot_description --build-type ament_python
建立文件夹,创建urdf文件
cd fishbot_description && mkdir urdf
touch fishbot_base.urdf
编辑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.8" /> </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>
mkdir launch
touch display_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 = '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
想要可视化模型需要三个节点参与
joint_state_publisher_gui
负责发布机器人关节数据信息,通过joint_states
话题发布robot_state_publisher_node
负责发布机器人模型信息robot_description
,并将joint_states
数据转换tf信息发布rviz2_node
负责显示机器人的信息graph
A[joint_state_publisher]--joint_states-->B
B[robot_state_publisher]--robot_de-->C
C[rviz2]
这里我们用到了joint_state_publisher_gui
和robot_state_publisher
两个包,如果你的系统没有安装这两个包,可以手动安装:
sudo apt install ros-$ROS_DISTRO-joint-state-publisher-gui ros-$ROS_DISTRO-robot-state-publisher
joint_state_publisher_gui
,还有一个兄弟叫做joint_state_publisher
两者区别在与joint_state_publisher_gui
运行起来会跳出一个界面,通过界面可以操作URDF中能动的关节
导入头
from glob import glob
import os
加入目录安装
('share/ament_index/resource_index/packages',
['resource/' + package_name]),
('share/' + package_name, ['package.xml']),
完整
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
添加robotmodel模块,分别选择link名称如下,即可看到机器人的模型显示
此时看看节点关系图
这里大家可以参考图理一理launch文件中启动的三个节点的关系。
然后打开TF模块,看一下机器人的坐标系关系
练习1:尝试将修改机器人身体颜色为蓝色,透明度为50%(0.1 0.1 1.0 0.5)
练习2:尝试在URDF中添加imu_link并使用imu_joint将其固定在车体的中心上方2cm,imu采用的几何形状为box。长宽高各是2cm
结果展示:
技术交流&&问题求助:
微信公众号及交流群:鱼香ROS
小鱼微信:AiIotRobot
QQ交流群:139707339
版权保护:已加入“维权骑士”(rightknights.com)的版权保护计划
我是小鱼,机器人领域资深玩家,现深圳某独脚兽机器人算法工程师一枚
初中学习编程,高中开始接触机器人,大学期间打机器人相关比赛实现月入2W+(比赛奖金)
目前在输出机器人学习指南、论文注解、工作经验,欢迎大家关注小鱼,一起交流技术,学习机器人
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。