(二)使用ROS和Gazebo进行机器人仿真


Gazebo也在其模型仓库中提供了各种流行机器人、传感器和各种3D物体的仿真模型。我们也可以直接使用。也可以自己设计机器人模型进行仿真。

上一节设计了机器人的3D模型之后,将使用Gazebo仿真器进行仿真。

4.1、使用Gazebo和ROS仿真机械臂

在开始使用之前,应安装以下软件包:

sudo apt-get install ros-melodic-gazebo-ros-pkgs ros-melodic-gazebo-msgs ros-melodic-gazebo-plugins ros-melodic-gazebo-ros-control

其中:

gazebo-ros-pkgs:包含用于将ROS与Gazebo连接的封装和工具

gazebo-msgs:包含ROS与Gazebo交互的消息和服务的数据结构

gazebo-plugin:包含用于传感器、执行结构的Gazebo插件

gazebo-ros-control:包含用于在ROS和Gazebo之间通信的标准控制器。

安装完成后,使用以下命令检查是否安装正确:

roscore & rosrun gazebo_ros gazebo

4.2、为Gazebo创建机械臂仿真环境

1、创建仿真机械臂的软件包

catkin_create_pkg seven_dof_arm_gazebo gazebo_msgs gazebo_plugins gazebo_ros gazebo_ros_control mastering_ros_robot_description_pkg

新建launch文件夹,创建seven_dof_arm_world.launch的启动文件,内容如下:

当机器人上装有传感器时,可以检查由传感器插件生成的话题,

rostopic list

使用image_view的工具查看3D视觉传感器的图像数据:

查看RGB原始图像:

rosrun image_view image_view image:=/rgbd_camera/rgb/image_raw

查看IR原始图像:

rosrun image_view image_view image:=/rgbd_camera/ir/image_raw

查看深度图像:

rosrun image_view image_view image:=/rgbd_camera/depth/image_raw

还可以在RVIZ中查看传感器的点云数据:

rosrun rviz rviz -f /rgbd_camera_optical_frame

4.3、在Gazebo中使用ROS控制器

为了让关节动起来,需要分配一个ROS控制器。需要为每个关节连接上与transmission标签内指定的硬件接口兼容的控制器。

ROS控制器使用硬件接口与硬件交互。硬件接口的主要功能:充当ROS控制器与真实或仿真硬件之间的媒介。

ros_control软件包:

control_toolbox:包含了通用模块

4.3.1、ROS控制器如何与Gazebo交互

左边是ROS控制器,中间是机器人硬件接口,右边是仿真器/真实硬件。

navigation、MoveIt!软件包为移动机器人控制器或机械臂控制器提供目标位置。控制器将位置、速度或驱动力发送到机器人的硬件接口上。

硬件接口与实际硬件和仿真分离。来自硬件接口的值可以馈送到Gazebo进行仿真或馈送到实际硬件本身。

4.3.2、将关节状态控制器和关节位置控制器连接到手臂

关节状态控制器发布手臂的关节状态;关节位置控制器可以接受每个关节的目标位置并让每个关节运动。在seven-dof_arm_gazebo/config文件夹下创建文件seven_dof_arm_gazebo_control.yaml。内容如下:

可见,所有的控制器都位于命名空间seven_dof_arm中,第一个是关节状态控制器,其余是关节位置控制器。

4.3.3、在Gazebo中启动ROS控制器

上面准备好配置文件,就可以在seven_dof_arm_gazebo/launch/launch文件中创建一个启动文件seven_dof_arm_gazebo_control.launch,该文件将启动所有的控制器并进行Gazebo仿真。