在本系列文章中,我旨在介绍存储库的 python 代码部分,解释代码,并提供一些见解,以便其他人更容易使用、更改、重构、重新利用或忽略它。主要是,我想回顾一下 TD3 神经网络的代码实现以及它如何连接到 Gazebo 模拟器。我觉得前面的4个部分应该足够了。但是,还有一些其他额外的信息,可能有助于更好地使用存储库。
提高仿真速度
神经网络训练的执行方式遵循以下步骤:
Collect motion samples -> Train policy on samples -> Update Policy
训练和更新速度将取决于硬件的功能,但一般来说,它不应该超过一秒钟。但是在模拟中收集样本呢?每个步骤都以 0.1 秒的速率传播,在我们的实现中最多可以有 500 个步骤(使用默认参数)。这意味着一集可以播放超过 50 秒。很明显,为了加快整个训练过程,加快这部分会带来最大的好处。Gazebo 模拟器天生不支持比实时更快地运行模拟,但有一种方法可以“超频”它。
可以通过更改坐标动画文件中的<real_time_update_rate>值来加快模拟速度。在我们的存储库中,您将在以下目录中找到 world 文件:
DRL-robot-navigation/catkin_ws/src/multi_robot_scenario/launch
(默认)坐标文件为:
TD3.world
在这里,您可以在文件的 physics部分找到<real_time_update_rate>:
<physics name='default_physics' default='0' type='ode'>
<max_step_size>0.001</max_step_size>
<real_time_factor>1</real_time_factor>
<real_time_update_rate>1000</real_time_update_rate>
</physics>
更新速率以毫秒为单位,默认情况下,在模拟中实时执行 1 秒为 1000 毫秒。我们可以增加这个数字以更快地执行模拟。例如,(通过将其更改为 2000)在模拟中,实时 1 秒将执行为 2000 毫秒。
注意:使用此方法可自行决定。使用过高的频率通常会导致仿真出现问题,因为传感器和其他插件无法跟上它。因此,请尝试一下,看看哪些频率不会在您的实现中导致问题。
启动 Gazebo 模拟器可视化
如果安装成功,您应该能够启动训练并看到 Rviz 窗口自动弹出。但是,您会注意到 Gazebo 模拟器无法打开。Gazebo 模拟器会消耗大量 GPU 资源,并且(取决于您的机器有多强大)甚至可能使模拟崩溃。因此,默认情况下,模拟器 GUI 不会启动。Rviz 通常足以评估训练进度,但如果您想启动 Gazebo 模拟器 GUI,有 2 种方法可以做到这一点。
1 在运行时运行:
像往常一样启动训练。如前所述,这只会启动 Rviz。然后打开一个新终端,并执行以下命令:
gzclient
这将打开当前正在运行的 Gazebo 模拟的 GUI
2 开始训练时启动 GUI
您可以在启动训练时通过更改默认行为自动启动 Gazebo GUI。打开目录中的文件 empty_world.launch:
DRL-robot-navigation/catkin_ws/src/multi_robot_scenario/launch
并更改行:
<arg name="gui" default="false"/>
变成:
<arg name="gui" default="true"/>
更改Velodyne传感器设置
正如您现在已经注意到的,我们使用模拟的Velodyne Puck 16通道LiDAR来记录机器人周围的环境。我们的基本实现假设激光传感器在机器人前面只有一个 180 度的 FOV。这意味着机器人只能向前移动,因为它看不到自己身后的任何东西。如果需要机器人后面的视图,则应更改默认的Velodyne传感器设置。Velodyne Puck的配置文件,您可以在这里找到:
DRL-robot-navigation/catkin_ws/src/velodyne_simulator/velodyne_description/urdf
可更改的参数可以在 VLP-16.urdf.xacro 文件的顶部找到:
<xacro:macro name="VLP-16" params="*origin
parent:=base_link
name:=velodyne
topic:=/velodyne_points
hz:=10
lasers:=16
samples:=1875
collision_range:=0.3
min_range:=0.9
max_range:=130.0
noise:=0.008
min_angle:=-${M_PI}
max_angle:=${M_PI}
gpu:=false">
当我们在机器人设置中调用插件时,我们会设置这些参数。机器人插件设置可用于:
DRL-robot-navigation/catkin_ws/src/multi_robot_scenario/xacro/p3dx
在文件中:
pioneer3dx.xacro
参数在Velodyne部分设置:
<!-- Velodyne -->
<xacro:include filename="$(find velodyne_description)/urdf/VLP-16.urdf.xacro"/>
<xacro:VLP-16 parent="base_link"
name="velodyne"
topic="/velodyne_points"
hz="10"
samples="360"
gpu="false"
min_angle="-1.57"
max_angle="1.57"
min_range="0.1">
<origin xyz="0.125 0 0.25" rpy="0 0 0" />
</xacro:VLP-16>
在这里,我们可以设置要接收的样本数量、观察频率以及 FOV(除其他外)。FOV设置在从最小值到最大值的范围内,相对于机器人的航向从左到右(如果不更改原点中的“rpy”值)。这些值以弧度为单位设置。
另一件需要注意的事情是我们可以设置原点。这将指定传感器在机器人上的位置,并相对于机器人的原点以米为单位进行描述。