ROS2入门21讲__第19讲__Rviz:三维可视化显示平台

news2024/9/22 23:29:12

目录

前言

Rviz三维可视化平台

Rviz介绍

运行方法

彩色相机仿真与可视化

仿真插件配置

运行仿真环境

图像数据可视化

三维相机仿真与可视化

仿真插件配置

运行仿真环境

点云数据可视化

激光雷达仿真与可视化

仿真插件配置

运行仿真环境

点云数据可视化

Rviz vs Gazebo


前言

大家有没有畅想过一个问题,机器人眼中的世界是什么样的呢?如何能够看到机器人摄像头拍摄到的图像?

这就涉及到可视化显示的范畴了,本讲我们介绍一位ROS中的重量级嘉宾——Rviz,一款三维可视化显示的神器。

Rviz三维可视化平台

机器人开发过程中,各种各样的功能,如果我们只是从数据层面去做分析,很难快速理解数据的效果,比如给你一堆0到255的数字,问这幅图像描述的内容是什么?你肯定一脸懵。但如果我们把这些数字通过颜色渲染出来,岂不就一目了然么?

类似的场景还有很多,比如机器人模型,我们需要知道自己设计的模型长啥样,还有模型内部众多坐标系在运动过程中都在哪些位置。

再比如机械臂运动规划和移动机器人自主导航,我们希望可以看到机器人周边的环境、规划的路径,当然还有传感器的信息,摄像头、三维相机、激光雷达等等,数据是用来做计算的,可视化的效果才是给人看的。

所以,数据可视化可以大大提高开发效率,Rviz就是这样一款机器人开发过程中的数据可视化软件,机器人模型、传感器信息、环境信息等等,全都可以在这里搞定。

Rviz介绍

一句话说明Rviz的功能,只要有数据,它就可以可视化,只有我们想不到的,没有Rviz做不到的。

Rviz的核心框架是基于Qt可视化工具打造的一个开放式平台,官方出厂就自带了很多机器人常用的可视化显示插件,只要我们按照ROS中的消息发布对应的话题,就可以看到图形化的效果了。如果我们对显示的效果不满意,或者想添加某些新的显示项,也可以在Rviz这个平台中,开发更多可视化效果,方便打造我们自己的上位机。

运行方法

启动一个终端,使用如下命令即可启动:

$ ros2 run rviz2 rviz2

彩色相机仿真与可视化

摄像头肯定是最为常用的一种传感器了,我们先来给机器人装上摄像头。

仿真插件配置

关于传感器的仿真,都需要使用Gazebo提供的插件,摄像头对应的插件叫做libgazebo_ros_camera.so,我们对照模型的代码给大家介绍这个插件的使用方法。

learning_gazebo/urdf/sensers/camera_gazebo.xacro

<gazebo reference="${prefix}_link">
    <sensor type="camera" name="camera_node">
        <update_rate>30.0</update_rate>
        <camera name="head">
            <horizontal_fov>1.3962634</horizontal_fov>
            <image>
                <width>1280</width>
                <height>720</height>
                <format>R8G8B8</format>
            </image>
            <clip>
                <near>0.02</near>
                <far>300</far>
            </clip>
            <noise>
                <type>gaussian</type>
                <mean>0.0</mean>
                <stddev>0.007</stddev>
            </noise>
        </camera>
        <plugin name="gazebo_camera" filename="libgazebo_ros_camera.so">
            <ros>
                <!-- <namespace>stereo</namespace> -->
                <remapping>~/image_raw:=image_raw</remapping>
                <remapping>~/camera_info:=camera_info</remapping>
            </ros>
            <camera_name>${prefix}</camera_name>
            <frame_name>${prefix}_link</frame_name>
            <hack_baseline>0.2</hack_baseline>
        </plugin>
    </sensor>
</gazebo>

主要配置项如下:

  • <sensor>标签:描述传感器

type:传感器类型,camera

name:摄像头命名,自由设置

  • <camera>标签:描述摄像头参数

分辨率,编码格式,图像范围,噪音参数等

  • <plugin>标签:加载摄像头仿真插件

运行仿真环境

模型已经配置好啦,能不能把摄像头成功仿真出来,并且在Rviz中看到图像信息,我们拭目以待。

$ ros2 launch learning_gazebo load_mbot_camera_into_gazebo.launch.py

可以使用命令行看下仿真出来的图像话题:

图像数据可视化

我们使用Rviz可视化显示图像信息,先来启动Rviz:

$ ros2 run rviz2 rviz2

启动成功后,在左侧Displays窗口中点击“Add”,找到Image显示项,OK确认后就可以加入显示列表啦,然后配置好该显示项订阅的图像话题,就可以顺利看到机器人的摄像头图像啦。

三维相机仿真与可视化

二维摄像头不过瘾,想不想试试三维相机,比如我们常用的Kinect体感传感器,或者Intel的Realsense,可以获取外部环境的点云数据。这种相机的价格比usb摄像头可贵不少,不过我们也可以通过仿真,一分钱不用,就可以玩起来。

仿真插件配置

三维相机使用的Gazebo插件也是libgazebo_ros_camera.so,配置方法如下:

learning_gazebo/urdf/sensers/kinect_gazebo.xacro

<gazebo reference="${prefix}_link">
    <sensor type="depth" name="${prefix}">
        <always_on>true</always_on>
        <update_rate>15.0</update_rate>
        <pose>0 0 0 0 0 0</pose>
        <camera name="kinect">
            <horizontal_fov>${60.0*M_PI/180.0}</horizontal_fov>
            <image>
                <format>R8G8B8</format>
                <width>640</width>
                <height>480</height>
            </image>
            <clip>
                <near>0.05</near>
                <far>8.0</far>
            </clip>
        </camera>
        <plugin name="${prefix}_controller" filename="libgazebo_ros_camera.so">
            <ros>
                <!-- <namespace>${prefix}</namespace> -->
                <remapping>${prefix}/image_raw:=rgb/image_raw</remapping>
                <remapping>${prefix}/image_depth:=depth/image_raw</remapping>
                <remapping>${prefix}/camera_info:=rgb/camera_info</remapping>
                <remapping>${prefix}/camera_info_depth:=depth/camera_info</remapping>
                <remapping>${prefix}/points:=depth/points</remapping>
            </ros>
            <camera_name>${prefix}</camera_name>
            <frame_name>${prefix}_frame_optical</frame_name>
            <hack_baseline>0.07</hack_baseline>
            <min_depth>0.001</min_depth>
            <max_depth>300.0</max_depth>
        </plugin>
    </sensor>
</gazebo>

运行仿真环境

使用如下命令启动仿真环境:

$ ros2 launch learning_gazebo load_mbot_rgbd_into_gazebo.launch.py

启动成功后,可以看下当前的话题列表,已经产生了三维相机的相关话题。

点云数据可视化

运行Rviz:

$ ros2 run rviz2 rviz2

同样的流程,点击Add,添加PointCloud2,设置订阅的点云话题,还要配置Rviz的参考系是odom,就可以看到点云数据啦,每一个点都是由xyz位置和rgb颜色组成。

激光雷达仿真与可视化

除了摄像头和三维相机,激光雷达也是很多移动机器人常备的传感器,包括自动驾驶汽车,我们也来试一试。

仿真插件配置

雷达使用的Gazebo插件是libgazebo_ros_ray_sensor.so,配置方法如下:

learning_gazebo/urdf/sensers/lidar_gazebo.xacro

<gazebo reference="${prefix}_link">
    <sensor type="ray" name="rplidar">
        <update_rate>20</update_rate>
        <ray>
            <scan>
              <horizontal>
                <samples>360</samples>
                <resolution>1</resolution>
                <min_angle>-3</min_angle>
                <max_angle>3</max_angle>
              </horizontal>
            </scan>
            <range>
              <min>0.10</min>
              <max>30.0</max>
              <resolution>0.01</resolution>
            </range>
            <noise>
              <type>gaussian</type>
              <mean>0.0</mean>
              <stddev>0.01</stddev>
            </noise>
        </ray>
        <plugin name="gazebo_rplidar" filename="libgazebo_ros_ray_sensor.so">
      <ros>
    <namespace>/</namespace>
    <remapping>~/out:=scan</remapping>
      </ros>
      <output_type>sensor_msgs/LaserScan</output_type>
        </plugin>
    </sensor>
</gazebo>

运行仿真环境

使用如下命令启动仿真环境:

$ ros2 launch learning_gazebo load_mbot_laser_into_gazebo.launch.py

在话题列表中也可以看到激光雷达啦。

点云数据可视化

启动Rviz:

$ ros2 run rviz2 rviz2

点击Add,选择Laserscan,然后配置订阅的话题名,rviz的固定坐标系依然是odom,此时就可以看到激光点啦。

Rviz vs Gazebo

好啦,通过这几个案例,相信大家对Rviz可视化平台的使用流程已经非常熟悉了,也了解了常用传感器的仿真方法。

讲到这里,Gazebo和Rviz这两个软件的具体功能,大家是不是会有一些混淆。

我们再来强调下:

  • Gazebo是仿真平台,核心功能是创造数据,我们没有机器人或者传感器,它可以帮我们做一个虚拟的;
  • Rviz是可视化平台,核心功能是显示数据,如果没有数据,它也巧妇难为无米之炊。

所以在很多时候,我们使用Gazebo做机器人仿真的时候,也会启动Rviz来显示仿真环境的信息,如果自己手上有真实机器人的话,Gazebo就用不到了,不过还是会用Rviz显示真实机器人传感器的信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1696260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

光伏无人机巡检的工作原理是什么?

随着科技的飞速发展&#xff0c;无人机技术已经深入到众多领域&#xff0c;其中光伏电站的巡检工作便是其应用的一个重要方向。光伏无人机巡检&#xff0c;通过搭载各种先进的传感器和设备&#xff0c;对光伏电站进行全面的、高效的、安全的检测&#xff0c;为电站的运维管理提…

win10安装rabbitmq

安装 第一步&#xff1a;下载并安装erlang RabbitMQ服务端代码是使用并发式语言Erlang编写&#xff0c;因此首先需要安装Erlang下载地址&#xff1a;http://www.erlang.org/downloads采用默认安装即可&#xff0c;选择适合的安装路径 添加环境变量 第二步&#xff1a;下载并…

力扣刷题---2206. 将数组划分成相等数对【简单】

题目描述&#x1f357; 给你一个整数数组 nums &#xff0c;它包含 2 * n 个整数。 你需要将 nums 划分成 n 个数对&#xff0c;满足&#xff1a; 每个元素 只属于一个 数对。 同一数对中的元素 相等 。 如果可以将 nums 划分成 n 个数对&#xff0c;请你返回 true &#xf…

PgSQL内核机制 - 算子执行统计元组个数

PgSQL内核机制 - 算子执行统计元组个数 我们在执行explain analyze观察执行计划执行情况时&#xff0c;时常通过每个算子实际执行结果来分析SQL的执行&#xff0c;其中有一项“rows XXX”表示执行的行数&#xff08;这里姑且先认为是执行的真实行数&#xff09;。但有些场景下…

java8新特性——函数式编程详解

目录 一 概述1.1 背景1.2 函数式编程的意义1.3 函数式编程的发展 Lambda表达式1.1 介绍1.2 使用Lambda的好处1.3 Lambda方法1.3.1 Lambda表达式结构1.3.2 Lambda表达式的特征 1.4 Lambda的使用1.4.1 定义函数式接口1.4.2 Lambda表达式实现函数式接口1.4.3 简化Lambda表达式1.4.…

计算机底层技术在AI时代的重要性

AI基础实施 为了迎接AI时代的全面到来&#xff0c;并满足极客星球同学们的学习需求&#xff0c;我们将组织一场AI技术全景入门分享, 会尽我所能&#xff0c;让大家能够全面了解AI技术&#xff0c;从AI大局观到核心技术&#xff0c;希望大家开阔一下AI的视野&#xff0c;本周第…

VMware虚拟机中ubuntu使用记录(10)—— 如何在Ubuntu18.04中使用自己的单目摄像头运行ORB_SLAM3(亲测有效,踩坑记录)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、ORB_SLAM3源码编译二、ORB_SLAM3实时单目相机测试1. 查看摄像头的话题2. 运行测试 三. 运行测试可能的报错1. 报错一(1) 问题描述(2) 原因分析(3) 解决 2. …

python机器学习及深度学习在空间模拟与时间预测

原文链接https://mp.weixin.qq.com/s?__bizMzUyNzczMTI4Mg&mid2247628504&idx2&sn6fe3aeb9f63203cfe941a6bb63b49b85&chksmfa77a9e5cd0020f3aa4f01887e75b15096a182c2b5b42c1044787aa285c650f1469a0ef28aec&token2124656491&langzh_CN&scene21#we…

2024年春招高薪职业报告:大模型算法研究员领跑

近日&#xff0c;脉脉高聘发布的研究报告《2024春招高薪职业和人才洞察》&#xff08;以下简称《洞察》&#xff09;显示&#xff0c;2024年一季度&#xff0c;大模型算法研究员新发岗位以平均月薪6.4万元领跑高薪岗位榜。受人才培养周期和技术门槛影响&#xff0c;人工智能行业…

Django Web:搭建Websocket服务器(入门篇)

Django Web架构 搭建Websocket服务器&#xff08;1&#xff09; - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:htt…

SwiftUI中List的样式及使用详解(添加、移动、删除、自定义滑动)

SwiftUI中的List可是个好东西&#xff0c;它用于显示可滚动列表的视图容器&#xff0c;类似于UITableView。在List中可以显示静态或动态的数据&#xff0c;并支持垂直滚动。List是一个数据驱动的视图&#xff0c;当数据发生变化时&#xff0c;列表会自动更新。 针对List&#x…

SW 弯曲找方向

当旋转弯曲轴的时候,半径和角度 越和理论的接近,越接近(只要输入角度,然后旋转弯曲轴,看半径跟随的变化值)

(优作)风力摆控制系统

本系统由瑞萨 100LGA 单片机控制模块&#xff0c; 6050 三轴陀螺仪加速度模块&#xff0c;直流风机及其驱 动模块&#xff0c;显示模块&#xff0c;键盘模块&#xff0c;蜂鸣器模块以及风力摆机械结构组成&#xff0c; MPU6050 采集风摆姿 态&#xff0c;单片机处理姿态数…

技术速递|无障碍应用程序之旅:键盘可访问性和 .NET MAUI

作者&#xff1a;Rachel Kang 排版&#xff1a;Alan Wang 首先让我们一起来看看您的应用程序是否支持键盘访问&#xff1a; 启动您的其中一个应用。如果您的设备尚未连接物理键盘&#xff0c;请连接物理键盘。像平常一样导航您的应用程序&#xff0c;并且仅使用键盘来执行此操…

Docker提示某网络不存在如何解决,添加完网络之后如何删除?

Docker提示某网络不存在如何解决&#xff1f; 创建 Docker 网络 假设现在需要创建一个名为my-mysql-network的网络 docker network create my-mysql-network运行容器 创建网络之后&#xff0c;再运行 mysqld_exporter 容器。完整命令如下&#xff1a; docker run -d -p 9104…

类和对象【六】友元和内部类

文章目录 友元友元的作用友元的缺点友元函数语法&#xff1a;特点&#xff1a; 友元类语法&#xff1a;特点&#xff1a; 内部类概念特点 友元 友元的作用 友元提供了一种打破封装的方式&#xff0c;有时提供了便利。 友元的主要作用就是打破封装 即可以让一个类的友元函数…

Redis第18讲——Redis和Redission实现延迟消息

即使不是做电商业务的同学&#xff0c;也一定知道订单超时关闭这种业务场景&#xff0c;这个场景大致就是用户下单后&#xff0c;如果在一定时间内未支付&#xff08;比如15分钟、半小时&#xff09;&#xff0c;那么系统就会把这笔订单给关闭掉。这个功能实现的方式有很多种&a…

【限免】短时傅里叶变换时频分析【附MATLAB代码】

来源&#xff1a;微信公众号&#xff1a;EW Frontier 简介 一种能够同时对信号时域和频域分析的方法——短时傅里叶变换&#xff08;STFT&#xff09;&#xff0c;可以在时频二维角度准确地描述信号 的时间、频域的局部特性&#xff0c;与其他算法不同&#xff0c;通过该算法可…

打造游戏APP:面向对象编程的实战演练

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、项目背景与架构概览 二、类的设计与实现 三、面向对象编程的实践 四、游戏循环与事件…

搜索自动补全-elasticsearch实现

1. elasticsearch准备 1.1 拼音分词器 github地址&#xff1a;https://github.com/infinilabs/analysis-pinyin/releases?page6 必须与elasticsearch的版本相同 第四步&#xff0c;重启es docker restart es1.2 定义索引库 PUT /app_info_article {"settings": …