ROS和Gazebo进行机器人仿真(一)

Gazebo是一种多机器人仿真器,可用于室内外机器人仿真。Gazebo在ROS中有良好的接口,包含ROS和Gazebo的所有控制。

若要实现ROS到Gazebo的通信,我们必须安装ROS-Gazebo接口。

应该安装以下软件包:

$ sudo apt 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-plugins : 它包含用于传感器、执行结构的Gazebo插件。

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

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

$ roscore & rosrun gazebo_ros gazebo

 

一.为Gazebo创建机械臂仿真模型

我们可以通过添加仿真参数来更新现有的机器人描述,从而创建一个机械臂仿真模型。

我们需要去创建一个软件包:

$ catkin_create_pkg seven_dof_arm_gazebo gazebo_msgs gazebo_plugins gazebo_ros gazebo_ros_control mastering_ros_robot_description_pkg

也可以在相应的Git库中获得完整的软件包。如下:

$ git clone https://github.com/jocacace/seven_dof_arm_gazebo.git

可以在seven_dof_arm.xacro文件中看到机器人的完整仿真模型,上一章讲过。

该文件包含了URDF标签,这对于仿真是必要的,我们将定义碰撞、惯性、传动、关节、连杆、以及Gazebo。

我们可以使用seven_dof_arm_gazebo软件包来启动现有的仿真模型,启动文件为:seven_dof_arm_world.launch的启动文件。

代码如下:

 1                                                                            
 2 
 3   
 4   
 5   
 6   
 7   
 8   
 9 
10   
11   
12     
13     
14     
15     
16     
17   
18 
19   
20    
21 
22 
23   
24    
26 
27 
28  

 启动以下命令来显示仿真机械臂

$ roslaunch seven_dof_arm_gazebo seven_dof_arm_world.launch

模型如下:

ROS和Gazebo进行机器人仿真(一)_第1张图片

 

 

 

接下来我们来详细的讨论一下机器人的仿真模型文件

 

1.为Gazebo机器人模型添加颜色和纹理

在机器人仿真中我们可以看到每个连杆都有不同的颜色和纹理。在xacro文件中,下面的标签可以为机器人的连杆提供纹理和颜色:

140   
141     Gazebo/White
142   

172   
173     Gazebo/White
174   

210   
211     Gazebo/Red
212   

 

2.添加transmission标签来启动模型

为了使用ROS控制器来启动机器人,我们需要定义(传动)标签来连接执行机构和关节,以下是为传动的宏:

 92    
 93       
 94         transmission_interface/SimpleTransmission
 95         
 96           hardware_interface/PositionJointInterface
 97         
 98         
 99           hardware_interface/PositionJointInterface
100           1
101         
102       
103    

 在这里是连接启动器的关节。标签是传动类型。目前,仅支持简单的传动transmission_interface/SimpleTransmission.

标签是要加载的硬件接口类型(位置、速度或力度),在该示例中,使用了位置控制硬件接口。这个硬件接口由gazebo_ros_control插件加载,下一节将看到。

 

3.添加gazebo_ros_control插件

在添加传动标签后,我们应该在仿真模型中添加gazebo_ros_control插件来解析传动标签并分配适当的硬件接口和控制管理器。代码如下:

563   
564     
565       /seven_dof_arm
566     
567   
568 

标签指定了要加载的插件名是libgazebo_ros_control.so。可以将标签作为机器人的名称,

如果我们没有指定名称,它将从URDF 自动加载机器人的名称。我们还可以在参数服务器()上指定控制器刷新速率(),robot_description(URDF)

的位置以及机器人硬件接口的类型().默认的硬件接口可以是:JointStateInerface、EffortJointInterface或VelocityJointInterface.

 

4.在Gazebo中添加3D视觉传感器

 在Gazebo中,我们可以仿真机器人的运动和物理特征,也可以对传感器进行仿真。

要在Gazebo中创建一个传感器,我们就必须对Gazebo中传感器的行为进行建模。

Gazebo中有一些预先创建的传感器模型,可以直接在代码中使用而无需编写新模型。

这里,我们在Gazebo中添加了一个名为Asus Xtion Pro模型的3D视觉传感器(通常称为RGB-D传感器)。传感器已经在gazebo_ros_pkgs/gazebo_plugins的ROS软件包中实现。

Gazebo中的每个模型都可以作为Gazebo_ROS插件实现,可以将其插入URDF文件来加载。

以下是我们如何在seven_dof_arm_with_rgbd.xacro机器人的xacro文件中把Gazebo定义和Xtion Pro的物理机器人模型包含进来的:

<xacro:include filename="$(find mastering_ros_robot_description_pkg)/urdf/sensor s/xtion_pro_live.urdf.xacro"/>

在xtion_pro_live.urdf.xacro文件内部,我们可以看到以下代码:

 1                                                               
 2 
 3 
 4   
 5 
 6   
 7     
 8       
 9       
10       
13     
14   
15 
16   
17 
18     
19     
20       
21       
22       
23     
24 
25     
26       
27         
28         
29         
32       
33       
34         
35         
36           
37         
38         
39       
40     
41 
42     
43       
44       
45       
46     
47 
48     
49       
50     
51 
52                                                        
53     
54       
55       
56       
57     
58 
59     
60       
61     
62 
63     
64       
65       
66       
67     
68 
69     
70       
71     
72 
73     
74     
75       
76       
77       
78     
79                                                                                    
80     
81       
82     
83 
84     
85       
86       
87       
88     
89 
90     
91       
92     
93 
94     
95   
96 
97              

 在这里,我们可以看到它包含另一个名为xtion_pro_live.gazebo.xacro的文件,该文件包含Xtion Pro在Gazebo中的完整定义。

我们还可以看到一个名为xtion_pro_live的宏定义,其中包含Xtion Pro的完整模型定义,包括连杆和关节:

  

 在宏定义中,我们将导入一个Asus Xtion Pro的网格文件该文件将在Gazebo中显示为相机连杆。

在mastering_ros_robot_description_pkg/urdf/sensors/xtion_pro_live.gazebo.xacro文件中,

我们可以设置Xtion Pro的Gazebo-ROS插件,我们将插件定义为宏,并支持RGB和深度相机,插件的定义如下:

67         
68           true
69           6.0
70           ${name}
71 
72           rgb/image_raw
73           rgb/camera_info
74           rgb/points
75 
76           depth/image_raw
77           depth/camera_info 
78 
79           ${name}_optical_frame
80           0.05
81           5
82           1.5
83 
84            

 Xtion Pro的插件文件名是libgazebo_ros_openni_kinect.so,我们可以定义插件参数,例如相机名称,图像话题等。

 

二.仿真装有Xtion Pro的机械臂

现在已经了解了Gazebo中相机插件的定义,我们可以使用以下命令启动完整的仿真:

$ roslaunch seven_dof_arm_gazebo seven_dof_arm_with_rgbd_world.launch

我们就可以看到一个机器人模型,在机械臂顶部装有一个传感器,如图所示:

ROS和Gazebo进行机器人仿真(一)_第2张图片

 

 

可视化三维传感器数据

使用上述命令启动仿真后,我们可以检查由传感器插件生成的话题,如图所示:

 命令:qqtsj  ~  catkin_ws  :rostopic list
/clock
/gazebo/link_states
/gazebo/model_states
/gazebo/parameter_descriptions
/gazebo/parameter_updates
/gazebo/set_link_state
/gazebo/set_model_state
/image_view_1581403067208774218/output
/image_view_1581403067208774218/parameter_descriptions
/image_view_1581403067208774218/parameter_updates
/rgbd_camera/depth/camera_info
/rgbd_camera/depth/image_raw
/rgbd_camera/depth/points
/rgbd_camera/ir/camera_info
/rgbd_camera/ir/image_raw
/rgbd_camera/ir/image_raw/compressed
/rgbd_camera/ir/image_raw/compressed/parameter_descriptions
/rgbd_camera/ir/image_raw/compressed/parameter_updates
/rgbd_camera/ir/image_raw/compressedDepth
/rgbd_camera/ir/image_raw/compressedDepth/parameter_descriptions
/rgbd_camera/ir/image_raw/compressedDepth/parameter_updates
/rgbd_camera/ir/image_raw/theora
/rgbd_camera/ir/image_raw/theora/parameter_descriptions
/rgbd_camera/ir/image_raw/theora/parameter_updates
/rgbd_camera/parameter_descriptions
/rgbd_camera/parameter_updates
/rgbd_camera/rgb/camera_info
/rgbd_camera/rgb/image_raw
/rgbd_camera/rgb/image_raw/compressed
/rgbd_camera/rgb/image_raw/compressed/parameter_descriptions
/rgbd_camera/rgb/image_raw/compressed/parameter_updates
/rgbd_camera/rgb/image_raw/compressedDepth
/rgbd_camera/rgb/image_raw/compressedDepth/parameter_descriptions
/rgbd_camera/rgb/image_raw/compressedDepth/parameter_updates
/rgbd_camera/rgb/image_raw/theora
/rgbd_camera/rgb/image_raw/theora/parameter_descriptions
/rgbd_camera/rgb/image_raw/theora/parameter_updates
/rgbd_camera/rgb/points
/rosout
/rosout_agg

 我们使用名为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

如下为以上的截图:

 ROS和Gazebo进行机器人仿真(一)_第3张图片

 

 

ROS和Gazebo进行机器人仿真(一)_第4张图片

 

 

ROS和Gazebo进行机器人仿真(一)_第5张图片

 

你可能感兴趣的:(ROS和Gazebo进行机器人仿真(一))