ego-planner开源代码之advanced_param.xml介绍&分析
1. 源由
ego-planner开源代码之数据流分析工作的延续。
- 对于算法逻辑的数据流,在前面已经初步做了整理,部分主要模块已经有比较清晰的认识。
- 从数据流的角度,理解模块的工作逻辑,还是非常直观、简洁的。
如何从系统的角度,思考问题,尤其是一个系统由众多模块组成的复杂体系,要能够整体的理解,反而并不能一下子上手。
反之,若能够将整个系统作为一个模块
来理解,入参和出参分别如何对应和理解呢?
section 1 配置入参
<arg name="map_size_x_"/>
<arg name="map_size_y_"/>
<arg name="map_size_z_"/>
<arg name="odometry_topic"/>
<arg name="camera_pose_topic"/>
<arg name="depth_topic"/>
<arg name="cloud_topic"/>
<arg name="cx"/>
<arg name="cy"/>
<arg name="fx"/>
<arg name="fy"/>
<arg name="max_vel"/>
<arg name="max_acc"/>
<arg name="planning_horizon"/>
<arg name="point_num"/>
<arg name="point0_x"/>
<arg name="point0_y"/>
<arg name="point0_z"/>
<arg name="point1_x"/>
<arg name="point1_y"/>
<arg name="point1_z"/>
<arg name="point2_x"/>
<arg name="point2_y"/>
<arg name="point2_z"/>
<arg name="point3_x"/>
<arg name="point3_y"/>
<arg name="point3_z"/>
<arg name="point4_x"/>
<arg name="point4_y"/>
<arg name="point4_z"/>
<arg name="flight_type"/>
定义了用于 ego-planner 的配置入参,控制了地图大小、传感器输入、规划的物理参数以及航点和飞行模式等。
-
地图相关参数
<arg name="map_size_x_"/>
<arg name="map_size_y_"/>
<arg name="map_size_z_"/>
这些参数定义了用于规划的三维地图的大小,分别对应于地图的 x、y、z 轴的范围,单位通常是 米。例如,
map_size_x_
定义了地图在 x 轴方向的长度。 -
传感器输入参数
<arg name="odometry_topic"/>
:定义了用于获取无人机位姿的 里程计话题,例如从惯性测量单元(IMU)或视觉里程计(VINS)的输出。<arg name="camera_pose_topic"/>
:定义了 相机位姿的话题,用于获取相机的姿态信息。<arg name="depth_topic"/>
:定义了深度传感器(如深度相机)的 深度图话题,用于感知障碍物。<arg name="cloud_topic"/>
:定义了 点云话题,如从激光雷达或RGB-D相机获取的点云信息,用于构建周围环境的三维表示。
-
相机内参
<arg name="cx"/>
<arg name="cy"/>
<arg name="fx"/>
<arg name="fy"/>
这些参数定义了相机的内参(内在参数),主要用于图像中的像素坐标与实际三维世界坐标之间的转换:
cx
和cy
是相机的 主点坐标(光轴与图像平面的交点)。fx
和fy
是相机在 x 方向和 y 方向的 焦距。
-
物理运动参数
<arg name="max_vel"/>
:定义了无人机的 最大速度,单位通常是米/秒 (m/s)。<arg name="max_acc"/>
:定义了无人机的 最大加速度,单位通常是米/秒² (m/s²)。<arg name="planning_horizon"/>
:定义了规划的时间 范围,即无人机在未来一段时间内要进行路径规划的时间段。
-
航点参数
<arg name="point_num"/>
:定义了规划路径中要使用的 航点数量。<arg name="point0_x"/>
,<arg name="point0_y"/>
,<arg name="point0_z"/>
, 等:定义了各个航点的 x、y、z 坐标,分别代表第 0、1、2、3、4 个航点在三维空间中的位置。这些航点用于路径规划中的预定义位置。
-
飞行模式
<arg name="flight_type"/>
:定义了无人机的 飞行模式。这个参数可能用来控制无人机的飞行行为,比如预定路径飞行、手动控制等模式。
section 2 节点配置
<node pkg="ego_planner" name="ego_planner_node" type="ego_planner_node" output="screen">
-
pkg="ego_planner"
- 这个属性定义了该节点属于的 ROS 包,在这里是
ego_planner
。ROS 会从ego_planner
包中查找相关的节点文件和依赖。
- 这个属性定义了该节点属于的 ROS 包,在这里是
-
name="ego_planner_node"
- 这是节点在 ROS 网络中的 名称,即启动该节点时,它将注册为
ego_planner_node
。这个名称必须是唯一的,确保 ROS 网络中不会有重复的节点名称。
- 这是节点在 ROS 网络中的 名称,即启动该节点时,它将注册为
-
type="ego_planner_node"
- 这个属性定义了要执行的节点的 可执行文件 名称。在
ego_planner
包中,它是一个名为ego_planner_node
的可执行文件。ROS 会根据这个名称来找到并启动对应的可执行文件。
- 这个属性定义了要执行的节点的 可执行文件 名称。在
-
output="screen"
- 该属性定义了节点的 输出位置,在这里指定为
screen
,表示节点的日志和输出信息将直接显示在控制台(终端)屏幕上。这样可以实时查看节点的运行状态、调试信息或错误消息。
- 该属性定义了节点的 输出位置,在这里指定为
section 2.1 话题映射
表示将某个话题的名称重定向为另一个话题名称。集成不同传感器、里程计等输入时非常有用。这使得节点可以适应不同的传感器输入,而无需修改节点内部代码,只需通过参数配置调整话题名称。
<remap from="/odom_world" to="$(arg odometry_topic)"/>
<remap from="/grid_map/odom" to="$(arg odometry_topic)"/>
<remap from="/grid_map/cloud" to="$(arg cloud_topic)"/>
<remap from="/grid_map/pose" to="$(arg camera_pose_topic)"/>
<remap from="/grid_map/depth" to="$(arg depth_topic)"/>
-
<remap from="/odom_world" to="$(arg odometry_topic)"/>
- 这行表示将原始话题
/odom_world
重定向为参数odometry_topic
的值。 - 也就是说,节点内部期望从
/odom_world
订阅或发布数据,但通过重映射,实际上会使用你在advanced_param.xml
中设置的odometry_topic
话题。这可能是从惯性测量单元(IMU)或者视觉里程计(VINS)系统中发布的位置信息。
- 这行表示将原始话题
-
<remap from="/grid_map/odom" to="$(arg odometry_topic)"/>
- 类似地,将
/grid_map/odom
这个话题也重定向为odometry_topic
的值。 - 意味着节点中的
/grid_map/odom
会和/odom_world
一样,使用相同的odometry_topic
进行数据的订阅或发布。
- 类似地,将
-
<remap from="/grid_map/cloud" to="$(arg cloud_topic)"/>
- 将话题
/grid_map/cloud
重定向为参数cloud_topic
的值。 - 这个重定向通常用于 点云数据 的话题,比如来自激光雷达或RGB-D摄像头的三维点云数据。这样,原来使用
/grid_map/cloud
话题的地方将改用用户指定的cloud_topic
。
- 将话题
-
<remap from="/grid_map/pose" to="$(arg camera_pose_topic)"/>
- 将话题
/grid_map/pose
重定向为camera_pose_topic
的值。 - 这通常与 相机的位姿 有关,比如在使用RGB-D相机或其他传感器时,提供相机的姿态(位置和方向)。
- 将话题
-
<remap from="/grid_map/depth" to="$(arg depth_topic)"/>
- 将
/grid_map/depth
话题重定向为depth_topic
的值。 - 这通常用于深度数据的传递,比如来自深度摄像头的 深度图像,在路径规划中用来感知周围环境的障碍物。
- 将
section 2.2 有限状态机配置
<!-- planning fsm -->
<param name="fsm/flight_type" value="$(arg flight_type)" type="int"/>
<param name="fsm/thresh_replan" value="1.5" type="double"/>
<para