ROS8

在机器人操作系统的学习、开发和测试中,存在着购买机器人的成本过高、测试时直接将未经验证的程序部署到实体机器人运行,容易造成硬件损坏等诸多问题。ROS中的仿真就显得尤为重要了。

简介

在ROS中,主要有一下几款组件进行机器人仿真。

URDF

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

Rviz

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

以“ros- [ROS_DISTRO] -desktop-full”命令安装ROS时,Rviz会默认被安装。

运行使用命令rvizrosrun rviz rviz

如果Rviz没有安装,可调用如下命令进行安装:

1
>sudo apt install ros-[ROS_DISTRO]-rviz

Gazebo

Gazebo是一款3D动态模拟器,用于显示机器人模型并创建仿真环境,能够在复杂的室内和室外环境中准确有效地模拟机器人。与游戏引擎提供高保真度的视觉模拟类似,Gazebo提供高保真度的物理模拟,其提供一整套传感器模型,以及对用户和程序非常友好的交互方式。

以“ros- [ROS_DISTRO] -desktop-full”命令安装ROS时,gzebo会默认被安装。

运行使用命令gazeborosrun gazebo_ros gazebo

如果 gazebo没有安装,可按如下方式进行安装:

1.添加源:

1
2
3
4
5
6
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" 
>
/etc/apt/sources.list.d/gazebo-stable.list'
Copy
wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
Copy

2.安装:

1
2
3
4
sudo apt update
Copy
sudo apt install gazebo11
sudo apt install libgazebo11-dev

URDF集成Rviz

URDF不能单独使用,因为它只是一种文件,需要在Rviz或者Gazebo中渲染成图形化的机器人模型。

由于URDF与Rviz的集成相较于URDF与Gazebo的集成简单,所以首先先了解基于Rviz的集成实现。

任务:在 Rviz 中显示一个盒状机器人

实现

Rviz的集成流程主要有以下几点:

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

准备阶段

1、在工作空间下新建功能包并导入相关依赖

1
2
cd src
catkin_create_pkg 包名 urdf xacro

3、新建目录

  • urdf: 存储 urdf 文件的目录

  • meshes:机器人模型渲染文件(暂不使用)

  • config: 配置文件

  • launch: 存储 launch 启动文件

建立目录的目的是为了让项目文件结构清晰合理,不是ROS的强制规范。

编写 URDF 文件

urdf目录下新建xxx.urdf文件,添加如下内容

1
2
3
4
5
6
7
8
9
<robot name="mycar">
<link name="base_link">
<visual>
<geometry>
<box size="0.5 0.2 0.1" />
</geometry>
</visual>
</link>
</robot>

配置launch文件

launch目录下新建launch文件用于启动Rviz并使其自动导入urdf文件。

通过将urdf文件路径设置到参数服务器上,参数名称为robot_description

1
2
3
4
5
6
7
8
9
<launch>

<!-- 设置参数 -->
<param name="robot_description" textfile="$(find 包名)/urdf/xxx.urdf" />

<!-- 启动 rviz -->
<node pkg="rviz" type="rviz" name="rviz" />

</launch>

启动Rviz并调用机器人模型

执行source ./devel/setup.bash后,使用roslaunch 包名 xxx.launch调用launch文件启动Rviz。启动后rviz并未加载模型,是由于默认情况下没有添加机器人显示组件,需要手动添加。

image-20220729174706135 image-20220729175338357

设置完成后,会显示出红色盒状模型。

Rviz启动优化

重复启动launch文件时,Rviz 之前的组件配置信息不会自动保存,需要重复上述配置过程,为了方便使用,可以使用如下方式优化:

  • 将当前配置保存进config目录。
image-20220729175739020
  • 然后,launch文件中 Rviz 的启动配置添加参数:args,值设置为-d 配置文件路径

    1
    2
    3
    4
    5
    <launch>
    <param name="robot_description" textfile="$(find 包名)/urdf/xxx.urdf" />
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find 包名)/config/rviz/配置文件名.rviz" />
    </launch>
    Copy

    再启动时,就可以包含之前的组件配置了。