ROS2从入门到精通2-2:详解机器人3D可视化工具Rviz2与案例分析
目录
- 0 专栏介绍
- 1 什么是Rviz2?
- 2 Rviz2基本界面
- 3 Rviz2基本数据类型
- 4 数据可视化案例
- 4.1 实例1:显示USB摄像头数据
- 4.2 实例2:显示球体
0 专栏介绍
本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。
🚀详情:《ROS2从入门到精通》
1 什么是Rviz2?
机器人是复杂的机电系统,其运行过程中自身或与环境交互将产生大量数据,这些数据通常以复杂的数据结构保存在内存或磁盘中,例如栅格地图数据
# This represents a 2-D grid map, in which each cell represents the probability of
# occupancy.Header header #MetaData for the map
MapMetaData info# The map data, in row-major order, starting with (0,0). Occupancy
# probabilities are in the range [0,100]. Unknown is -1.
int8[] data
这种抽象的数据结构不利于开发者直观第感受数据所描述的内容,因此ROS提供了一个三维可视化工具,用于可视化传感器的数据和状态信息——Rviz2
Rviz很好地兼容了各种基于ROS软件框架的机器人平台。在Rviz2中,可以使用XML对机器人、周围物体等任何实物进行
- 尺寸
- 质量
- 位置
- 材质
- 关节
等属性的描述,并且在界面中呈现出来。同时,Rviz2还可以通过图形化的方式,实时显示机器人传感器的信息、机器人的运动状态、周围环境的变化等。

2 Rviz2基本界面
Rviz2已经集成在桌面完整版的ROS2系统当中,可以通过命令行启动
ros2 run rviz2 rviz2
启动成功的Rviz2主界面如下

分为几个区域:
- 3D视图区:用于可视化显示数据,目前没有任何数据,所以显示黑色
- 工具栏:提供视角控制、目标设置、发布地点等工具
- 显示列表:左侧的显示列表是从各种话题当中选择用户所需的数据的视图的区域。单击左下方的
Add可以添加显示插件,具体的插件参见第3节- 视图设置:右侧的视图设置可以选择多种观测视角
- Orbit:以指定的视点(在这里称为Focus)为中心旋转。这是默认情况下最常用的基本视图。
- FPS(第一人称):显示第一人称视点所看到的画面。
- ThirdPersonFollower:显示以第三人称的视点尾追特定目标的视图
- TopDownOrtho:这是Z轴的视图,与其他视图不同,以直射视图显示,而非透视法。
- XYOrbit:类似于Orbit的默认值,但焦点固定在Z轴值为0的XY平面上。
- 时间:显示当前的系统时间和ROS时间
3 Rviz2基本数据类型
| 类型 | 描述 | 消息类型 |
|---|---|---|
| Axes | 显示坐标系 | – |
| Camera | 打开一个新窗口显示机器人摄像头图像 | sensor_msgs/msg/Image
|
| Grid | 显示2D或3D网格 | – |
| Grid Cells | 绘制网格的每个单元格,主要用于显示导航的costmap中的障碍 | nav_msgs/msg/GridCells |
| Image | 打开一个新窗口显示图像信息 | sensor_msgs/msg/Image |
| LaserScan | 显示激光扫描值,将传感器信息中的数据显示为世界上的点 | sensor_msgs/msg/LaserScan |
| Map | 显示导航中使用的栅格地图 | nav_msgs/msg/OccupancyGrid |
| Markers | 绘制各种基本形状(箭头、立方体、球体、圆柱体、点、文本等) | visualization_msgs/msg/Marker
|
| Path | 显示导航中使用的机器人路径 | nav_msgs/msg/Path |
| PointCloud PointCloud2 | 显示点云数据,一般用于深度相机 | sensor_msgs/msg/PointCloud
|
| Polygon | 绘制一个多边形轮廓 | geometry_msgs/msg/Polygon |
| Odomerty | 显示里程计数据,例如,将随着机器人运动产生的连续路径(位置与方向)沿着时间间隔以箭头形式呈现 | nav_msgs/msg/Odometry |
| RobotModel | 显示机器人模型 | – |
| TF | 显示TF树 | – |
4 数据可视化案例
进行数据可视化的数据以对应的消息类型发布,在Rviz2中使用相应的显示插件订阅该消息即可实现可视化。

添加完成后,Rviz2左侧的显示列表中会列出已经添加的插件,根据每个插件属性列表的需求设置即可。其中Topic属性用来声明该显示插件所订阅的数据来源,如果订阅成功,在中间的显示区应该会出现可视化后的数据。如果显示有问题,请检查属性区域的Status状态。Status有四种状态:OK、Warning、Error和Disabled,如果显示的状态不是OK,那么请查看错误信息,并详细检查数据发布是否正常。
下面介绍两个使用Rviz2的实例。
4.1 实例1:显示USB摄像头数据
USB摄像头的基本配置可以参考文章从零开始Ubuntu16.04+ORBSLAM2+ROS实验实录(二):相机测试与标定
编写启动文件配置Rviz2以及usb_cam节点
def generate_launch_description():# Get the launch directorysimulation_dir = os.path.abspath(os.path.join(__file__, "../../"))# Create the launch configuration variablesrviz_config_file = LaunchConfiguration('rviz_config')declare_rviz_config_file_cmd = DeclareLaunchArgument('rviz_config',default_value=os.path.join(simulation_dir, 'rviz', 'simulation.rviz'),description='Full path to the RVIZ config file to use')# Launch rvizstart_rviz_cmd = Node(package='rviz2',executable='rviz2',arguments=['-d', rviz_config_file],output='screen')exit_event_handler = RegisterEventHandler(event_handler=OnProcessExit(target_action=start_rviz_cmd,on_exit=EmitEvent(event=Shutdown(reason='rviz exited'))))camera_handler = Node(package='usb_cam', executable='usb_cam_node_exe', output='screen',name="camera1",parameters=[os.path.join(simulation_dir, 'config', 'params.yaml')],)# Create the launch description and populateld = LaunchDescription()# Declare the launch optionsld.add_action(declare_rviz_config_file_cmd)# Add any conditioned actionsld.add_action(start_rviz_cmd)# Add other nodes and processes we needld.add_action(exit_event_handler)ld.add_action(camera_handler)return ld
其中相机参数文件params.yaml如下所示,可以根据自己的相机情况配置
/**:ros__parameters:video_device: "/dev/video0"framerate: 30.0io_method: "mmap"frame_id: "camera"pixel_format: "mjpeg2rgb" # see usb_cam/supported_formats for list of supported formatsav_device_format: "YUV422P"image_width: 640image_height: 480camera_name: "test_camera"camera_info_url: "package://simulation/config/camera_info.yaml"brightness: -1contrast: -1saturation: -1sharpness: -1gain: -1auto_white_balance: truewhite_balance: 4000autoexposure: trueexposure: 100autofocus: falsefocus: -1
USB相机的图像话题是/image_raw,那么在Rviz2中订阅该话题即可,如下图所示。

4.2 实例2:显示球体
第三节提到过Rviz2中Marker的消息类型是visualization_msgs::msg::Marker,因此我们向话题visualization_marker发布定义的球体数据,包括大小、颜色、位置等,接着在Rviz2中订阅即可。
int main(int argc, char *argv[])
{rclcpp::init(argc, argv);auto node = std::make_shared<PublisherNode>();rclcpp::Rate loop_rate(10);while (rclcpp::ok()){auto sphere = visualization_msgs::msg::Marker();sphere.header.frame_id = "map";sphere.header.stamp = node->get_clock()->now();sphere.ns = "rviz_lab";sphere.id = 0;// 声明为球体sphere.type = visualization_msgs::msg::Marker::SPHERE;sphere.action = visualization_msgs::msg::Marker::ADD;// 位姿sphere.pose.position.x = 0;sphere.pose.position.y = 0;sphere.pose.position.z = 0;sphere.pose.orientation.x = 0.0;sphere.pose.orientation.y = 0.0;sphere.pose.orientation.z = 0.0;sphere.pose.orientation.w = 1.0;// 大小sphere.scale.x = 1.0;sphere.scale.y = 1.0;sphere.scale.z = 1.0;// 颜色sphere.color.r = 0.0f;sphere.color.g = 1.0f;sphere.color.b = 0.0f;sphere.color.a = 1.0;node->publish(sphere);RCLCPP_INFO(node->get_logger(), "Publishing SPHERE in Rviz2");loop_rate.sleep();}rclcpp::shutdown();return 0;
}

完整代码通过下方博主名片联系获取
🔥 更多精彩专栏:
- 《ROS从入门到精通》
- 《Pytorch深度学习实战》
- 《机器学习强基计划》
- 《运动规划实战精讲》
- …
相关文章:
ROS2从入门到精通2-2:详解机器人3D可视化工具Rviz2与案例分析
目录 0 专栏介绍1 什么是Rviz2?2 Rviz2基本界面3 Rviz2基本数据类型4 数据可视化案例4.1 实例1:显示USB摄像头数据4.2 实例2:显示球体 0 专栏介绍 本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有…...
国企:2024年6月中国铁路相关招聘信息,6.27截止
中国铁路济南局集团有限公司2024年度 招聘普通高校本科及以上学历毕业生公告(三) 中国铁路济南局集团有限公司根据企业发展需要,拟招聘普通高等院校本科及以上学历毕业生,现将有关事项公告如下: 一、招聘计划 本次招聘岗位均为生产一线操作技能岗位,具体岗位、专业要求…...
React+TS前台项目实战(十九)-- 全局常用组件封装:带加载状态和清除等功能的Input组件实现
文章目录 前言Input组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天我们来封装一个input输入框组件,并提供一些常用的功能,你可以选择不同的 尺寸、添加前缀、显示加载状态、触发回调函数、自定义样式 等等。这些功能在这个项目中…...
php composer 报错
引用文章: Composer设置国内镜像_composer 国内源-CSDN博客 php composer.phar require --prefer-dist yiidoc/yii2-redactor "*" A connection timeout was encountered. If you intend to run Composer without connecting to the internet, run the …...
数据安全如何防护?迅软加密软件保护企业数据资产
前言:加密软件是一种重要的工具,可以帮助企业保护其数据资产的安全。通过使用加密算法,加密软件可以将敏感数据转化为无法理解的密文,只有授权的用户才能解密并访问这些数据。 一、迅软加密软件保护企业数据资产的关键方面 1、数…...
Android 11 ,默认授予预置应用/APK 需要的权限,解决permission denied for window type 2003 问题。
写这篇文章的原因是解决了一个APP闪退的问题,闪退的原因是插拔U盘时,注册的广播接收者接收到广播需要弹出一个Dialog询问是否需要打开U盘,这个Dialog设置的是系统级别悬浮窗,没有这个权限,报错导致闪退,下面…...
RabbitMQ(消息队列)
RabbitMQ 它是消息中间件,是在消息的传输过程中保存消息的容器,实现应用程序和应用程序之间通信的中间产品。目前主流消息队列通讯协议是AMQP(二进制传输,支持多种语言)、JMS(HTTP传输,只支持J…...
LeetCode-数组/回溯-No40组合总和II
题目: 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次 。 注意:解集不能包含重复的组合。 示例 1: 输入: ca…...
直接调用 Java 线程的 run() 方法会发生什么?
文章目录 前言回顾run() 方法 vs start() 方法run()方法start()方法 直接调用 run() 方法的影响直接调用 run() 方法调用 start() 方法 示例解析结论个人简介 前言 在Java中,多线程编程是一个重要的概念,尤其是在处理并发任务时。线程是Java中实现多线程…...
计算机毕业设计Thinkphp/Laravel学生考勤管理系统zyoqy
管理员登录学生考勤管理系统后,可以对首页、个人中心、公告信息管理、年级管理、专业管理、班级管理、学生管理、教师管理、课程信息管理、学生选课管理、课程签到管理、请假申请管理、销假申请管理等功能进行相应操作,如图5-2所示。学生登录进入学生考勤…...
3浏览器安全
上一篇👉: 浏览器渲染原理 浏览器安全涉及多方面的威胁与防护,其中XSS(跨站脚本攻击)与CSRF(跨站请求伪造)是最常见的两类安全问题,而中间人攻击与网络劫持也是不容忽视的安全隐患。下面是对这…...
昇思25天学习打卡Day01
实验结果 心得体会 趁着假期,跟谁官方实战营开始系统学习MindSpore深度学习框架。昇思MindSpore是一个全场景深度学习框架,旨在实现易开发、高效执行、全场景统一部署三大目标。其中易开发表现为API友好,调试难度低;高效执行包括…...
Python-爬虫 下载天涯论坛帖子
为了爬取的高效性,实现的过程中我利用了python的threading模块,下面是threads.py模块,定义了下载解析页面的线程,下载图片的线程以及线程池 import threading import urllib2 import Queue import re thread_lock threading.RL…...
创建github个人博客
文章目录 安装Hexo安装git安装Node.js安装 Hexo git配置SSH key配置ssh 搭建个人博客新建博客生成静态网页 本文主要参考 【保姆级】利用Github搭建自己的个人博客,看完就会 安装Hexo 参考官方文档:https://hexo.io/zh-cn/docs/ Hexo 是一个快速、简洁且…...
【五子棋game】
编写一个五子棋游戏程序可以分为几个步骤:设计棋盘、定义规则、实现人机交互、判断胜负。下面是一个简化的五子棋游戏程序示例,使用Python语言编写。 首先,我们需要一个棋盘。可以使用一个二维数组来表示棋盘,其中0表示空位&#…...
从入门到精通:使用Python的Watchdog库监控文件系统的全面指南
从入门到精通:使用Python的Watchdog库监控文件系统的全面指南 引言Watchdog库概述核心组件工作原理 快速开始:设置Watchdog安装Watchdog创建一个简单的监控脚本设置和启动Observer 事件处理:如何响应文件系统的变化基本事件处理处理复杂的场景…...
Linux 进程管理指令
Linux 进程管理是系统管理的重要部分,通过各种工具和命令,你可以查看、控制、调试和管理进程。以下是一些常用的 Linux 进程管理命令和工具。 查看进程 1. ps ps 命令用于列出当前系统的进程。 查看当前用户的所有进程: ps -u $USER查看…...
Java OA系统通知公告模块
### 使用Spring Boot实现OA通知公告模块 使用Spring Boot框架实现一个支持多种形式公告发布、设置发布时间和有效期,以及公告发布后推送通知的模块。 #### 项目结构 结构组织项目: OA_Notification_Module/ ├── src/ │ ├── main/ │ │ …...
简约的服务器监控工具Ward
什么是 Ward ? Ward 是一个简单简约的服务器监控工具。 Ward 支持自适应设计系统。此外,它还支持深色主题。它仅显示主要信息,如果您想查看漂亮的仪表板而不是查看一堆数字和图表,则可以使用它。 Ward 在所有流行的操作系统上都能…...
新能源发电乙级资质所需办理标准
企业资历与信誉: 必须具有独立企业法人资格。社会信誉良好,注册资本不少于100万元人民币。 技术条件: 专业技术人员配置齐全、合理,数量需满足资质标准要求。主要技术负责人或总工程师应具有大学本科以上学历、10年以上设计经历&a…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
