机器人系统仿真**:**是通过计算机对实体机器人系统进行模拟的技术,在 ROS 中,仿真实现涉及的内容主要有三:对机器人建模(URDF)、创建仿真环境(Gazebo)以及感知环境(Rviz)等系统性实现。
1.URDF
URDF可以以一种 XML 的方式描述机器人的部分结构,比如底盘、摄像头、激光雷达、机械臂以及不同关节的自由度.....,该文件可以被 C++ 内置的解释器转换成可视化的机器人模型,是 ROS 中实现机器人仿真的重要组件。
2.Gazebo
Gazebo是一款3D动态模拟器,用于显示机器人模型并创建仿真环境,能够在复杂的室内和室外环境中准确有效地模拟机器人。与游戏引擎提供高保真度的视觉模拟类似,Gazebo提供高保真度的物理模拟,其提供一整套传感器模型,以及对用户和程序非常友好的交互方式。
运行命令 $gazebo
问题1:[Err] [REST.cc:205] Error in REST request
解决:$sudo gedit ~/.ignition/fuel/config.yaml
然后将url : https://api.ignitionfuel.org注释,添加url: https://api.ignitionrobotics.org
3.rviz
rviz以三维方式显示ROS消息,可以将 数据进行可视化表达。例如:可以显示机器人模型,可以无需编程就能表达激光测距仪(LRF)传感器中的传感 器到障碍物的距离,RealSense、Kinect或Xtion等三维距离传感器的点云数据(PCD, Point Cloud Data),从相机获取的图像值等。
运行命令 $rviz
下载素材
cpp
$ git clone https://github.com/zx595306686/sim_demo.git
URDF集成Rviz基本流程
URDF 不能单独使用,需要结合 Rviz 或 Gazebo,URDF 只是一个文件,需要在 Rviz 或 Gazebo 中渲染成图形化的机器人模型。
需求描述:在Rviz中显示一个盒装机器人
实现流程:
1.准备:新建功能包,导入依赖
2.核心:编写 urdf 文件
3.核心:在 launch 文件集成 URDF 与 Rviz
4.在 Rviz 中显示机器人模型
1.创建功能包,导入依赖
创建一个新的功能包,名称自定义,导入依赖包:urdf、xacro
在当前功能包下,新建几个目录:
urdf:存储 urdf 文件的目录
meshes:机器人模型渲染文件(暂不使用)
config:配置文件
launch:存储 launch 启动文件
2.编写URDF文件
在urdf目录中新建一个urdf文件夹,文件夹中添加一个.urdf文件
cpp
<robot name="mycar">
<link name="base_link">
<visual>
<geometry>
<box size="0.5 0.2 0.1" />
</geometry>
</visual>
</link>
</robot>
3.在launch文件中集成URDF与Rviz
在launch目录下,新建一个 launch 文件,该 launch 文件需要启动 Rviz,并导入 urdf 文件,Rviz 启动后可以自动载入解析urdf文件,并显示机器人模型,核心问题:如何导入 urdf 文件? 在 ROS 中,可以将 urdf 文件的路径设置到参数服务器,使用的参数名是robot_description,示例代码如下
cpp
<launch>
<!--1.在参数服务器载入urdf文件-->
<param name="robot_description" textfile="$(find 功能包名)/urdf/urdf/demo01_helloworld.urdf" />
<!--2.启动rviz-->
<node pkg="rviz" type="rviz" name="rviz" />
</launch>
运行launch文件 $roslaunch 功能包名 launch文件名
4.在Rviz中显示机器人模型
rviz 启动后,会发现并没有盒装的机器人模型,这是因为默认情况下没有添加机器人显示组件,需要手动添加,添加方式如下:
方框4:默认是map,将此处修改为urdf文件中机器人地盘名称即可正常显示。
5.优化rviz启动
重复启动launch文件时,Rviz 之前的组件配置信息不会自动保存,需要重复执行步骤4的操作,为了方便使用,可以使用如下方式优化:
将当前配置保存进config目录
方框3:保存在当前工作空间下的(步骤1新建的config文件夹)。
修改launch文件中rviz的配置
cpp
<launch>
<!--1.在参数服务器载入urdf文件-->
<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>