ROS编写参数配置文件示例程序

描述

ROS Motion Planning运动规划库采用了非常灵活和简易的方式来按照我们的需求去进行配置和使用,在我们对一些必要参数进行设定后,可使用库中的main_generate.py文件自动生成我们设定的参数对应的执行文件main.launch。

这些需要设定的参数,存放在user_config.yaml、pedestrians_config.yaml、obstacles _config.yaml这三个文件中,这三个文件均位于下图所示的目录下,下面依次进行详细的介绍

插件

1、编写user_config.yaml参数配置文件

首先,我们来看作者提供的示例程序,如下所示:

map: "warehouse"
world: "warehouse"
rviz_file: "sim_env.rviz"


robots_config:
  - robot1_type: "turtlebot3_waffle"
    robot1_global_planner: "theta_star"
    robot1_local_planner: "apf"
    robot1_x_pos: "0.0"
    robot1_y_pos: "0.0"
    robot1_z_pos: "0.0"
    robot1_yaw: "0.0"


# plugins:
  # pedestrians: "pedestrian_config.yaml"
  # obstacles: "obstacles_config.yaml"

接下来,我们对每个参数的作用以及可选的选项有那些进行逐个介绍

(1)、map

map参数用于设定运动规划所使用的静态地图的名字,也就是rviz界面看到的静态全局地图,这些可用的静态地图文件存放在该运动规划库的src/sim_env/map/文件夹下,目前该运动规划库中仅提供了名为warehouse的静态地图文件

如下图所示,当然,我们可以利用SLAM建图算法自行生成其他的静态地图文件,然后同样存放在src/sim_env/map/文件夹下,并将参数map设定为该静态地图的名字,即可进行调用。

注:该参数设为“ ”,则表示不使用静态地图

插件

(2)world

world参数用于设定要调用的Gazebo仿真环境的文件名,该文件存放在该运动规划库的src/sim_env/worlds/文件夹下,示例中调用的是warehouse.world。

当然,我们也可以在Gazebo中搭建自己的仿真环境,并导出对应的world文件,然后存放到该目录下,通过修改参数world来进行调用

注:需要注意的是参数map与world要对应起来,这里的对应是指环境内容的对应,一般是先在Gazebo中搭建仿真环境,保存为xxx.world文件,然后使用SLAM建图算法,比如最常用的gampping,对该仿真环境进行建图,将建好的图作为静态地图保存,然后使用。

插件

(3)rviz_file

rviz_file参数用于设定打开rviz时的配置文件,这些配置文件存放在src/sim_env/rviz/目录下,目前库中提供了cache.rviz、sim_env.rviz、view_multi.rviz这三个可选内容,同样我们可以在rviz中自行调整,并导出对应.rviz文件,存储在该目录下,然后通过对rviz_file参数进行修改来调用

插件

比如,我修改了全局路径的话题及线型等,可以直接save config覆盖原有设置,也可以导出新的.rviz配置文件,从而保留原有设置,如下图所示:

插件

(4)robot1_type

robot1_type用于设定编号为robot1的机器人所使用的机器人的模型,模型文件在库的src/sim_env/urdf/目录下库中提供了nanocar、turtlebot3_burger、turtlebot3_waffle 、turtlebot3_waffle_pi四种可选的机器人模型

当然,我们也可以自行创建或者从网上找其他的机器人模型的urdf或xacro文件,放到该目录下,通过修改参数robot1_type的值来进行调用。

插件

库中提供的这四种机器人模型如下图所示:

插件

(5)robot1_global_planner

robot1_global_planner用于设定编号为robot1的机器人所使用的全局路径算法,全局路径算法的实现文件在库的src/planner/global_planner/目录下,库中提供了三大类共同16个全局路径规划算法,对应三个全局路径规划器插件,详细如下:

① 基于图搜索的全局路径规划器插件graph_planner/GraphPlanner包含的算法有:

a_star、jps、gbfs、dijkstra、d_star、lpa_star、voronoi、d_star_lite、theta_star、lazy_theta_star

② 基于采样的全局路径规划器插件sample_planner/SamplePlanner包含的算法有:

rrt、rrt_star、informed_rrt、rrt_connect

③、基于智能的路径规划器插件evolutionary_planner/EvolutionaryPlanner包含的算法有:

aco、ga

三大类共16种全局路径规划算法可供我们选择,上面的示例文件中使用的是theta_star算法,我们可以尝试修改为以上其他16种算法中的任意一个来测试其效果

当然,我们也可以编写自己的全局路径规划器算法,较容易的方式,是直接在以上16种算法中最接近的1种的源文件上进行修改,若创建自己的算法名和源文件,则还需要修改库的src/sim env/ launch /include /navigation/目录下的move base.launch.xml等文件

(6)robot1_local_planner

robot1_local_planner用于设定编号为robot1的机器人所使用的局部路径算法,局部路径算法的实现文件在库的src/planner/local_planner/目录下,库中提供了四个局部路径规划算法,对应四个局部路径规划器插件,详细如下:

①、插件dwa_planner/DWAPlanner对应的算法是:dwa

②、插件pid_planner/PIDPlanner对应的算法是:pid

③、插件apf_planner/APFPlanner对应的算法是:apf

④、插件static_planner/StaticPlanner对应的算法是:static

四个局部路径规划器插件对应4种局部路径规划算法可供我们选择,上面的示例文件中使用的是apf算法,我们可以尝试修改为以上其他4种算法中的任意一个来测试其效果

当然,我们也可以编写自己的全局路径规划器算法,较容易的方式,是直接在以上4种算法中最接近的1种的源文件上进行修改,若创建自己的算法名和源文件,则还需要修改库的src/sim env/ launch /include /navigation/目录下的move base.launch.xml等文件

(7)robot1_x_pos、robot1_y_pos、robot1_z_pos、robot1_yaw

robot1_x_pos、robot1_y_pos、robot1_z_pos、robot1_yaw分别用于设定编号为robot1的机器人的初始位置和姿态角,对于位置设定为地图中任意一个非障碍物点都行

经过我的测试,目前不支持任意修改初始姿态角robot1_yaw,其值保持为0即可,若修改为其他值rviz中显示的雷达坐标系将出现问题。

(8)行人插件 pedestrians

除了上述必备的配置参数外,库中还提供了行人插件pedestrians,若想启用该功能,则需要取消对该插件的注释

如下所示,该插件可以在仿真环境中添加动态的行人来充当动态障碍物,对规划算法的性能进行测试,使用该插件同样需要提供一个名为pedestrian_config.yaml参数配置文件,将在本文第三部分的第2小节,也就是下一小节中对该参数配置文件进行详细的介绍。

plugins:
  pedestrians: "pedestrian_config.yaml"

(9)新增障碍物插件 obstacles_config

除了行人插件,库中还提供了新增障碍物插件 obstacles_config,若想启用该功能,则需要取消对该插件的注释

如下所示,该插件可以在仿真环境中添加新的静态障碍物,新增的障碍物在SLAM建图产生的静态地图map中并不存在

因此,可以用来测试规划算法对新感知到的障碍物的避障能力,使用该插件同样需要提供一个名为obstacles_config.yaml参数配置文件,将在本文第三部分的第3小节中对该参数配置文件进行详细的介绍。

plugins:
  obstacles: "obstacles_config.yaml"
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分