0、何为仿真
1、为何仿真
- 低成本: 机器人实体一般价格昂贵,为降低机器人学习、调试的成本;
- 高效: 搭建的环境更为多样且灵活,可以提高测试效率以及测试覆盖率;
- 高安全性: 仿真环境下,无需要考虑耗损问题。
2、仿真技术的内容与要求
-
1、【建模】学习如何创建 并 显示机器人模型
- 能够独立使用urdf创建机器人模型,并在Rviz与Gazebo中分别显示;
-
2、【搭建环境】学习如何搭建仿真环境
- 能够使用Gazebo搭建仿真环境;
-
3、【感知环境】学习如何实现机器人模型与仿真环境的交互
- 能够使用机器人模型中的传感器【相机、雷达…】获取仿真环境数据Rviz。
2.0、介绍创建ros包的流程。
2.0.1 创建工作空间【并初始化】
mkdir -p catkin_ws/src // 若创建嵌套文件夹,必须使用 -p,创建单个文件夹则不用
cd catkin_ws // 进入该工作空间
catkin_make // 初始化工作空间
2.0.2 创建Ros包【使用依赖】
cd src // 进入工作空间的src内
catkin_create_pkg ros_test roscpp rospy std_msgs
2.0.3 编写源码
cd catkin_ws/src/ros_test/src
编写 src 内的源码文件 ***.cpp
cd catkin_ws/src/ros_test
改写 ros_test 内的 CMakeLists.txt 文件
2.0.4 编译Ros包
cd catkin_ws
catkin_make
2.0.5 运行Ros包
// 新开终端,执行
roscore
//另一终端执行
ca catkin_ws
source devel/setup.bash
rosrun ros_test ros_test_node // rusrun 包名 节点名
2.1 URDF
URDF是 Unified Robot Description Format 的首字母缩写,直译为 统一(标准化)机器人描述格式 ,可以以一种 XML 的方式描述机器人的部分结构,比如底盘、摄像头、激光雷达、机械臂以及不同关节的自由度…,该文件可以被 C++ 内置的解释器转换成可视化的机器人模型,是 ROS 中实现机器人仿真的重要组件。
URDF 不能单独使用,需要结合 Rviz 或 Gazebo,URDF 只是一个文件,需要在 Rviz 或 Gazebo 中渲染成图形化的机器人模型。
2.1.1 URDF 集成 Rviz 流程
- 准备: 新建功能包,导入依赖;
- 创建一个新的功能包,导入依赖 urdf xacro
mkdir -p catkin_ws/src
cd catkin_ws
catkin_make
cd catkin_ws/src/
catkin_create_pkg ros_test urdf xacro
- 在当前功能包下,再新建几个目录:
-
- urdf:存储urdf文件的目录
-
- meshes:存储机器人模型渲染文件
-
- config:存储配置文件,比如 **.rviz 文件
-
- launch:存储launch启动文件
cd catkin_ws/src/ros_test
mkdir -p urdf/urdf // 此为创建均为urdf的两层目录,也可以只创建一层urdf目录
mkdir meshes
mkdir config
mkdir launch
- 核心: 编写urdf;
cd catkin_ws/src/ros_test/urdf/urdf
gedit urdf01_HelloWorld.urdf
// 填入如下内容
<robot name="mycar">
<link name="base_link">
<visual>
<geometry>
<box size="0.5 0.2 0.1" />
</geometry>
</visual>
</link>
</robot>
- 核心: 在launch文件集成URDF与Rviz;
- 在 launch 目录下,新建一个launch文件,该 launch 文件需要启动 Rviz,并导入 urdf 文件【此处的包名应为 ros_test】,Rviz 启动后可以自动载入解析urdf文件,并显示机器人模型,核心问题:如何导入 urdf 文件? 在 ROS 中,可以将 urdf 文件的路径设置到参数服务器,使用的参数名是:robot_description,示例代码如下:
cd catkin_ws/src/ros_test/launch
gedit urdf01_HelloWorld.launch
// 填入如下内容
<launch>
<!-- 设置参数 -->
<param name="robot_description" textfile="$(find 包名)/urdf/urdf/urdf01_HelloWorld.urdf" />
<!-- 启动 rviz -->
<node pkg="rviz" type="rviz" name="rviz" />
</launch>
- 1 显示: 在Rviz中显示机器人模型。
roslaunch ros_test urdf01_HelloWorld.launch
- rviz 启动后,会发现并没有盒装的机器人模型,这是因为默认情况下没有添加机器人显示组件,需要手动添加,添加方式如下:
设置完毕后,可以正常显示了
- 2.优化 rviz 启动
-
重复启动launch文件时,Rviz 之前的组件配置信息不会自动保存,需要重复执行步骤4的操作,为了方便使用,可以使用如下方式优化:
-
首先,将当前配置保存进config目录
// 在当前路径下:
catkin_ws/src/ros_test/config/
// 保存rivz配置文件
show_mycar.rviz
- 然后,urdf01_HelloWorld.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>
- 最后再启动时,就可以包含之前的组件配置了,使用更方便快捷。