第 6 章 机器人仿真系统 1 —— 概述 + URDF 集成 Rviz 基本流程 urdf01_rviz

0 学习目标

对于ROS新手而言,可能会有疑问:学习机器人操作系统,实体机器人是必须的吗?答案是否定的,机器人一般价格不菲,为了降低机器人学习、调试成本,在ROS中提供了系统的机器人仿真实现,通过仿真,可以实现大部分需求,本章主要就是围绕“仿真”展开的,比如,本章会介绍:

  • 如何创建并显示机器人模型 —— URDF 创建模型
  • 如何搭建仿真环境 —— Gzebo 仿真环境
  • 如何实现机器人模型与仿真环境的交互 —— Rviz

本章预期的学习目标如下:

  • 能够独立使用URDF创建机器人模型,并在Rviz和Gazebo中分别显示
  • 能够使用Gazebo搭建仿真环境
  • 能够使用机器人模型中的传感器(雷达、摄像头、编码器…)获取仿真环境数据

下载素材:主目录下的 sim_demo

  • git clone https://github.com/zx595306686/sim_demo.git

1 相关组件

概念

  • 机器人系统仿真:是通过计算机对实体机器人系统进行模拟的技术,在 ROS中,仿真实现涉及的内容主要有三:对机器人建模(URDF)、创建仿真环境,比如障碍物信息(Gazebo)以及感知环境,以机器人的视角观察世界(Rviz)等系统性实现。

1.1 URDF —— 机器人建模

  • URDF是 Unified Robot Description Format 的首字母缩写,直译为统一(标准化)机器人描述格式,可以以一种XML 的方式描述机器人的部分结构,比如底盘、摄像头、激光雷达、机械臂以及不同关节的自由度…,该文件可以被 C++
    内置的解释器转换成可视化的机器人模型,是 ROS 中实现机器人仿真的重要组件。

1.2 Rviz —— 感知环境

  • RViz 是 ROS Visualization Tool 的首字母缩写,直译为ROS的三维可视化工具。它的主要目的是以三维方式显示ROS消息,可以将数据进行可视化表达。例如:可以显示机器人模型,可以无需编程就能表达激光测距仪(LRF)传感器中的传感器到障碍物的距离,RealSense、Kinect或Xtion等三维距离传感器的点云数据(PCD, Point Cloud Data),从相机获取的图像值等。
  • 以“ros- [ROS_DISTRO] -desktop-full”命令安装ROS时,RViz会默认被安装

1.3 Gazebo —— 创建仿真环境

  • Gazebo是一款3D动态模拟器,用于显示机器人模型并创建仿真环境,能够在复杂的室内和室外环境中准确有效地模拟机器人。与游戏引擎提供高保真度的视觉模拟类似,Gazebo提供高保真度的物理模拟,其提供一整套传感器模型,以及对用户和程序非常友好的交互方式。
  • 以“ros- [ROS_DISTRO] -desktop-full”命令安装ROS时,gzebo会默认被安装

2 课程说明

机器人的系统仿真是一种集成实现,主要包含三部分:

  • URDF 用于创建机器人模型
  • Gzebo 用于搭建仿真环境
  • Rviz 图形化的显示机器人各种传感器感知到的环境信息

三者应用中,只是创建 URDF 意义不大,一般需要结合 Gazebo 或 Rviz 使用,在 Gazebo 或 Rviz 中可以将 URDF 文件解析为图形化的机器人模型,一般的使用组合为:

  • 如果非仿真环境,那么使用 URDF 结合 Rviz 直接显示感知的真实环境信息
  • 如果是仿真环境,那么需要使用 URDF 结合 Gazebo 搭建仿真环境,并结合 Rviz 显示感知的虚拟环境信息

3 URDF 集成 Rviz 基本流程

URDF 不能单独使用,需要结合 Rviz 或 Gazebo,URDF 只是一个文件,需要在 Rviz 或 Gazebo 中渲染成图形化的机器人模型,当前,首先演示URDF与Rviz的集成使用,因为URDF与Rviz的集成较之于URDF与Gazebo的集成更为简单,后期,基于Rviz的集成实现,我们再进一步介绍URDF语法。

  • 需求描述:在 Rviz 中显示一个盒状机器人

实现流程:

  • 准备:新建功能包,导入依赖
  • 核心:编写 urdf 文件
  • 核心:在 launch 文件集成 URDF 与 Rviz
  • 在 Rviz 中显示机器人模型

3.1 创建功能包,导入依赖 —— 功能包 urdf01_rviz

  • 功能包 urdf01_rviz
  • 导入依赖 urdf xacro
  • 创建 4 个 文件夹:launch、urdf、meshes(放皮肤)、config(存储配置文件)

创建一个新的功能包,名称自定义,导入依赖包:urdf与xacro
在当前功能包下,再新建几个目录:

  • urdf:存储 urdf 文件的目录
  • meshes:机器人模型渲染文件(暂不使用)
  • config:配置文件
  • launch:存储 launch 启动文件

3.2 编写 URDF 文件 —— demo01_helloworld.urdf

首先在 URDF 文件下 新建两个文件夹:urdf + xacro
在这里插入图片描述

  • 新建一个子级文件夹:urdf(可选),文件夹中添加一个.urdf文件,复制如下内容
<robot name="mycar">
    <link name="base_link"> 连杆
        <visual> 可视化
            <geometry> 几何模型
                <box size="0.5 0.2 0.1" /> box是盒子
            </geometry>
        </visual>
    </link>
</robot>

3.3 launch 文件集成 URDF 与 Rviz —— demo01_helloworld.launch

在launch目录下,新建一个 launch 文件,该 launch 文件需要启动 Rviz,并导入 urdf 文件,Rviz 启动后可以自动载入解析urdf文件,并显示机器人模型。
核心问题:如何导入 urdf 文件? 在 ROS 中,可以将 urdf 文件的路径设置到参数服务器,使用的参数名是:robot_description。

<launch>
    <!-- 1. 在参数服务器载入 urdf 文件 robot_description是固定-->
    <param name="robot_description" textfile="$(find urdf01_rviz)/urdf/urdf/demo01_helloworld.urdf" />
    <!-- 2. 启动 rviz -->
    <node pkg="rviz" type="rviz" name="rviz" />
</launch>

3.3.1 编译执行

  • 启动窗口1
cd demo03_ws/
source ./devel/setup.bash
roslaunch urdf01_rviz demo01_helloworld.launch

3.3.2 Rviz 设置参数

  1. 点击 Add,在里面添加 RobotModel
  2. 会出现报错
  3. 然后将 Fixed Frame 里面的 map 修改为 base_link(urdf 里面 link name=“base_link”)
  4. Add 里面加坐标系 Axes

3.4 Rviz 中显示机器人模型(重要)

rviz 启动后,会发现并没有盒装的机器人模型,这是因为默认情况下没有添加机器人显示组件,需要手动添加,添加方式如下:
在这里插入图片描述

  • 红色 x 轴 长度
  • 绿色 y 轴 宽度
  • 蓝色 z 轴 高度
    在这里插入图片描述

3.5 优化 rviz 启动 (保存 重要)

重复启动launch文件时,Rviz 之前的组件配置信息不会自动保存,需要重复执行步骤4的操作,为了方便使用,可以使用如下方式优化:

  • 首先,将当前配置 urdf01_rviz 保存进 config 目录,设置文件名 show_mycar
    在这里插入图片描述
  • 然后,launch文件中 Rviz 的启动配置添加参数:args,值设置为 -d 配置文件路径
<launch>
    <param name="robot_description" textfile="$(find 包名)/urdf/urdf/urdf01_HelloWorld.urdf" />
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find 报名)/config/rviz/show_mycar.rviz" />
</launch>
  • 就是将 rviz 读进来
<launch>
    <!-- 1. 在参数服务器载入 urdf 文件 robot_description是固定-->
    <param name="robot_description" textfile="$(find urdf01_rviz)/urdf/urdf/demo01_helloworld.urdf" />
    <!-- 2. 启动 rviz -->
    <node pkg="rviz" type ="rviz" name="rviz" args ="-d $(find urdf01_rviz)/config/show_mycar.rviz"/>
</launch>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2021 Nqq

你的鼓励是我学习的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值