本系列教程作者:小鱼
公众号:鱼香ROS
QQ交流群:139707339
教学视频地址:小鱼的B站
完整文档地址:鱼香ROS官网
版权声明:如非允许禁止转载与商业用途。

8.2 RVIZ2可视化移动机器人模型

大家好,我是小鱼,上一节讲完joint和link,我们来把我们上面定义的简单的URDF(包含身体和雷达)用RVIZ2显示出来,直观的感受下,我们的机器人模型。

URDF可视化的步骤如下:

  1. 建立机器人描述功能包
  2. 建立urdf文件夹编写urdf文件
  3. 建立launch文件夹,编写launch文件
  4. 修改setup.py配置,编译测试

1.建立功能包

轻车熟路,先创建一个fishbot_ws工作空间,然后建立功能包,包的类型选ament_python

ros2 pkg create fishbot_description --build-type ament_python

2.建立URDF文件

建立URDF文件夹,创建urdf文件

cd fishbot_description && mkdir urdf
touch fishbot_base.urdf

完成后的目录结构:

├── fishbot_description
│   ├── __init__.py
├── package.xml
├── setup.cfg
├── setup.py
└── urdf└── 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>

3.建立launch文件

在目录src/fishbot_description下创建launch文件夹下并新建display_rviz2.launch.py文件。

mkdir launch
touch display_rviz2.launch.py

完成后的目录结构:

├── fishbot_description
│   ├── __init__.py
├── launch
│   └── display_rviz2.launch.py
├── package.xml
├── setup.cfg
├── setup.py
└── urdf└── fishbot_base.urdf
import os
from launch import LaunchDescription
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageSharedef 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负责显示机器人的信息
#mermaid-svg-2Fm5TpHQNfLRlZT3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .error-icon{fill:#552222;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .marker.cross{stroke:#333333;}#mermaid-svg-2Fm5TpHQNfLRlZT3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .cluster-label text{fill:#333;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .cluster-label span{color:#333;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .label text,#mermaid-svg-2Fm5TpHQNfLRlZT3 span{fill:#333;color:#333;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .node rect,#mermaid-svg-2Fm5TpHQNfLRlZT3 .node circle,#mermaid-svg-2Fm5TpHQNfLRlZT3 .node ellipse,#mermaid-svg-2Fm5TpHQNfLRlZT3 .node polygon,#mermaid-svg-2Fm5TpHQNfLRlZT3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .node .label{text-align:center;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .node.clickable{cursor:pointer;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .arrowheadPath{fill:#333333;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .cluster text{fill:#333;}#mermaid-svg-2Fm5TpHQNfLRlZT3 .cluster span{color:#333;}#mermaid-svg-2Fm5TpHQNfLRlZT3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-2Fm5TpHQNfLRlZT3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

joint_states
robot_description
joint_state_publisher
robot_state_publisher
rviz2

这里我们用到了joint_state_publisher_guirobot_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中能动的关节

4.修改setup.py

导入头

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 ospackage_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': [],},
)

5.编译测试

编译

colcon build

运行测试

source install/setup.bash
ros2 launch fishbot_description display_rviz2.launch.py

添加robotmodel模块,分别选择link名称如下,即可看到机器人的模型显示

此时看看节点关系图

这里大家可以参考图理一理launch文件中启动的三个节点的关系。

然后打开TF模块,看一下机器人的坐标系关系

6.本节练习

练习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+(比赛奖金)
目前在输出机器人学习指南、论文注解、工作经验,欢迎大家关注小鱼,一起交流技术,学习机器人

《ROS2机器人建模URDF》8.2RVIZ2可视化移动机器人模型相关推荐

  1. 《动手学ROS2》9.5为FishBot添加添加激光雷达传感器

    <动手学ROS2>9.5为FishBot添加添加激光雷达传感器 本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS ...

  2. 《动手学ROS2》第十章章节介绍 机器人导航NAV2

    本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途. 第十章 机器人导航NAV2 千 ...

  3. 《动手学ROS2》10.4 Cartographer介绍与安装

    <动手学ROS2>10.4 Cartographer介绍与安装 本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS ...

  4. 《动手学ROS2》10.6导航地图概述

    <动手学ROS2>10.6导航地图概述 本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许 ...

  5. 《动手学ROS2》10.7 Nav2导航框架介绍与安装

    <动手学ROS2>10.7 Nav2导航框架介绍与安装 本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版 ...

  6. 动手学数据分析(4)数据可视化

    什么是数据可视化? 数据可视化其实是将抽象概念进行形象性表达,将抽象语言进行具象图形可视的过程.数据可视化,不仅仅是统计图表.本质上,任何能够借助于图形的方式展示事物原理.规律.逻辑的方法都叫数据可视 ...

  7. 《动手学ROS2》4.7ROS2服务介绍

    本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途. 4.4 ROS2服务介绍 大家 ...

  8. 《动手学ROS2》4.6ROS2自定义话题接口

    本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途. 4.3.2 自定义话题接口 本 ...

  9. 《动手学ROS2》4.3ROS2话题通信(C++)

    本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途. 4.2.2 ROS2话题通信( ...

  10. 伍六七带你学算法 进阶篇-生命游戏

    有趣的算法题–生命游戏 难度-中等 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 想要体验生命游戏的小伙伴可以到这里-->生命游戏 进入 ...

最新文章

  1. CUDA中grid、block、thread、warp与SM、SP的关系
  2. jQuery 样式操作||操作 css 方法/设置类样式方法
  3. Floyd算法 笔记 C/C++
  4. 将Infinispan版本映射为最低Java版本
  5. 【转】前端开发值得一看的文章
  6. python3 提取url中域名部分_python 从网址(url)中提取域名和path
  7. 090518-C++primer 4th学习笔记:1.3节
  8. Atitit 人工智能 统计学 机器学习的相似性 一些文摘收集 没有人工智能这门功课,人工智能的本质是统计学和数学,就是通过机器对数据的识别、计算、归纳和学习,然后做出下一步判断和决策的科学
  9. 用canvas画时钟
  10. Tensorflow中PRelu实现细节
  11. 阿里云ESS弹性伸缩服务新功能来袭,更全面、更自动化的使用体验
  12. 【BX学习之软件著作权】 软件著作权的申请
  13. 图扑软件数字孪生汽车生产线,赋能智慧工厂科学运维
  14. 蓝牙BLE---DA14585修改常用的广播信息
  15. 小米路由器显示网络未连接到服务器,小米路由器4不能上网了如何解决?小米路由器4无法上网的解决方法汇总介绍...
  16. 2022.7.26刷题合集
  17. 管家婆服务器端口修改,更改sql数据库端口
  18. Android 实现答题器功能(通过手势实现翻页效果)
  19. Java进阶(五十五)-Java Lambda表达式入门
  20. android 录屏自动运行,Android实现录屏直播+远程控制(二)

热门文章

  1. matlab 交互界面设计
  2. PPT学习整理(八)PPT图片技巧
  3. matlab中ones函数的使用方法详细介绍(附matlab代码)
  4. 125K非接触IC卡读卡头
  5. 【软考软件评测师】2016年下案例分析历年真题
  6. 阿里云虚拟主机内存占用大问题解决
  7. Aimo:盘姬工具箱CruiserEXP forWin.
  8. 解密拼多多800元裂变营销新方法
  9. 泛型与STL Note
  10. mac电脑查看CPU温度