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

一 .在Gazebo中仿真差速轮式机器人

在本节,我们会对前面设计的差速轮式机器人进行仿真。

你可以在mastering_ros_robot_description_pkg/urdf文件中获取diff_wheeled_robot.xacro移动机器人的描述文件。

我们创建一个启动文件,在Gazebo中生成仿真模型。就像我们对机械臂所做的那样,我们可以创建一个ROS软件包,用

seven_dof_arm_gazebo软件包的相同依赖项启动Gazebo仿真,我是从对应的git库中下载的完整软件包。

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

进入diff_wheeled_robot_gazebo/launch文件夹,并提取diff_wheeled_gazebo.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 
25   
26   
28 
29  

 使用以下命令来启动此文件:

$ roslaunch diff_wheeled_robot_gazebo diff_wheeled_gazebo.launch

仿真模型如下:

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

 

 仿真成功后,接下来我们将激光雷达添加到机器人中。

 

1.将激光雷达添加到机器人中

我们在机器人顶部添加了激光雷达来执行高级操作,比如用该机器人进行自主导航或地图构建。

为了将激光雷达添加到机器人中,我们应该将以下代码添加到diff_wheeled_robot.xacro文件中:

248   
249     
250       
251       
252         
253       
254       
255     
256   
257   
258     
259     
260     
261   
262   
263     Gazebo/Blue
264     false
265     
266       ${hokuyo_size/2} 0 0 0 0 0
267       false
268       40
269       
270         
271           
272             720
273             1
274             -1.570796                                      
275             1.570796
276           
277         
278         
279           0.10
280           10.0
281           0.001
282         
283       
284       
285         /scan
286         hokuyo_link
287       
288     
289   

 本节中,我们使用名称为libgazebo_ros_laser.so的GazeboROS插件来仿真激光雷达。

完整的代码可以在diff_wheeled_robot_with_laser.xacro描述文件中找到,该文件位于

mastering_ros_robot_description_pkg/urdf/文件夹中。

在仿真环境中添加一些物体,这样我们就可以查看激光雷达,在这里,我们在机器人周围添加

一些圆柱体,可以看到相应的激光视图。

 

2.在Gazebo中控制机器人的移动

我们正在使用的是一个差速机器人,配有2个轮子和2个脚轮。该机器人的完整特性应该作为Gazebo-ROS插件来仿真。

基本的差速驱动插件已经实现。

要在Gazebo中控制机器人移动,我们需要添加一个名为libgazebo_ros_diff_drive.so的Gazebo-ROS插件,从而可以生成该机器人的差速驱动动作。

以下是该插件的定义及其参数的完整代码片段:

292                                            
293   
294     
295       true
296       Debug
297       false
298       /
299       1
300       false
301       true
302       100.0
303       front_left_wheel_joint
304       front_right_wheel_joint
305       ${2*base_radius}
306       ${2*wheel_radius}
307       1
308       30
309       1.8
310       cmd_vel
311       odom 
312       odom 
313       base_footprint
314 
315 
316     
317    

 在该插件中,我们可以提供一些参数,如机器人的车轮关节(关节应该是连续转动型的)、车轮间距、车轮直径、里程计话题等。

控制机器人移动的一个重要参数是:

cmd_vel

该参数是插件的速度指令话题,是ROS中一个Twist类型的消息(sensor_msgs/Twist)。我们可以将Twist消息发布到/cmd_vel话题中,我们就可以看到机器人开始从它的位置移动。

 

3.在启动文件中添加关节状态发布者

添加差速驱动插件之后,我们需要将关节状态发布者加入到现有的启动文件中,或者我们也可以创建一个新的启动文件。

你可以在diff_wheeled_robot_gazebo/launch下看到更新后的最终启动文件diff_wheeled_gazebo_full.launch。

启动文件包含关节状态发布者,这有助于在RViz中可视化显示。以下是在此启动文件中为关节状态发布者添加的额外代码:

24    
25   
26   
27     
28   

 

4.添加ROS遥控节点

ROS遥控(teleop)节点通过接收键盘的输入来发布ROSTwist命令。在该节点中,我们可以生成线速度和角速度,而且已经有了一个标准的遥控节点实现,我们可以重用该节点。

遥控节点是在diff_wheeled_robot_control软件包中实现的,脚本文件夹包含diff_wheeled_robot_key节点,它就是遥控节点。

我在相应的git库中下载了该软件包:

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

要想成功编译和使用该软件包,你需要安装joy_node软件包:

$sudo apt install ros-melodic-joy

下面是名为keyboard_teleop的启动文件,用来启动遥控节点:

 1                                                                            
 2   
 3   
 4 
 5     
 6     
 7     
 8 
 9   
10 

 让我们开始控制机器人运动。

使用以下命令启动具有完整仿真设置的Gazebo:

$ roslaunch diff_wheeled_robot_gazebo diff_wheeled_gazebo_full.launch

启动遥控节点

$ roslaunch diff_wheeled_robot_control keyboard_teleop.launch

启动RViz可视化机器人状态和激光数据:

$ rosrun rviz rviz

在RViz中添加Fixed Frame:/odom,添加Laser Scan,话题设置为/scan以查看激光扫描数据,添加Robot model来查看机器人模型。

在遥控终端中,我们可以使用一些按键(U、I、O、J、K、L、M、“,”、“.”)进行方向调整,其他键(q、z、w、x、e、c、K、空格键)进行速度调整。

如图显示机器人使用机器人使用遥控在Gazebo中移动及其在RViz中的可视化。

我们可以从Gazebo工具栏上选择基本物体,并添加到机器人环境中,也可以在左边的面板上添加在线库的物体:

 

只有当我们按下遥控节点终端内相应的按键时,机器人才会移动,如果该终端处于不活动状态,按下按键机器人不会移动。

如果一切正常,我们可以使用机器人来探索该区域并在RViz中可视化激光数据。

 

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