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 的配置入参,控制了地图大小、传感器输入、规划的物理参数以及航点和飞行模式等。

  1. 地图相关参数

    • <arg name="map_size_x_"/>
    • <arg name="map_size_y_"/>
    • <arg name="map_size_z_"/>

    这些参数定义了用于规划的三维地图的大小,分别对应于地图的 x、y、z 轴的范围,单位通常是 。例如,map_size_x_ 定义了地图在 x 轴方向的长度。

  2. 传感器输入参数

    • <arg name="odometry_topic"/>:定义了用于获取无人机位姿的 里程计话题,例如从惯性测量单元(IMU)或视觉里程计(VINS)的输出。
    • <arg name="camera_pose_topic"/>:定义了 相机位姿的话题,用于获取相机的姿态信息。
    • <arg name="depth_topic"/>:定义了深度传感器(如深度相机)的 深度图话题,用于感知障碍物。
    • <arg name="cloud_topic"/>:定义了 点云话题,如从激光雷达或RGB-D相机获取的点云信息,用于构建周围环境的三维表示。
  3. 相机内参

    • <arg name="cx"/>
    • <arg name="cy"/>
    • <arg name="fx"/>
    • <arg name="fy"/>

    这些参数定义了相机的内参(内在参数),主要用于图像中的像素坐标与实际三维世界坐标之间的转换:

    • cxcy 是相机的 主点坐标(光轴与图像平面的交点)。
    • fxfy 是相机在 x 方向y 方向焦距
  4. 物理运动参数

    • <arg name="max_vel"/>:定义了无人机的 最大速度,单位通常是米/秒 (m/s)。
    • <arg name="max_acc"/>:定义了无人机的 最大加速度,单位通常是米/秒² (m/s²)。
    • <arg name="planning_horizon"/>:定义了规划的时间 范围,即无人机在未来一段时间内要进行路径规划的时间段。
  5. 航点参数

    • <arg name="point_num"/>:定义了规划路径中要使用的 航点数量
    • <arg name="point0_x"/>, <arg name="point0_y"/>, <arg name="point0_z"/>, 等:定义了各个航点的 x、y、z 坐标,分别代表第 0、1、2、3、4 个航点在三维空间中的位置。这些航点用于路径规划中的预定义位置。
  6. 飞行模式

    • <arg name="flight_type"/>:定义了无人机的 飞行模式。这个参数可能用来控制无人机的飞行行为,比如预定路径飞行、手动控制等模式。

section 2 节点配置

  <node pkg="ego_planner" name="ego_planner_node" type="ego_planner_node" output="screen">
  1. pkg="ego_planner"

    • 这个属性定义了该节点属于的 ROS 包,在这里是 ego_planner。ROS 会从 ego_planner 包中查找相关的节点文件和依赖。
  2. name="ego_planner_node"

    • 这是节点在 ROS 网络中的 名称,即启动该节点时,它将注册为 ego_planner_node。这个名称必须是唯一的,确保 ROS 网络中不会有重复的节点名称。
  3. type="ego_planner_node"

    • 这个属性定义了要执行的节点的 可执行文件 名称。在 ego_planner 包中,它是一个名为 ego_planner_node 的可执行文件。ROS 会根据这个名称来找到并启动对应的可执行文件。
  4. 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)"/>
  1. <remap from="/odom_world" to="$(arg odometry_topic)"/>

    • 这行表示将原始话题 /odom_world 重定向为参数 odometry_topic 的值。
    • 也就是说,节点内部期望从 /odom_world 订阅或发布数据,但通过重映射,实际上会使用你在 advanced_param.xml 中设置的 odometry_topic 话题。这可能是从惯性测量单元(IMU)或者视觉里程计(VINS)系统中发布的位置信息。
  2. <remap from="/grid_map/odom" to="$(arg odometry_topic)"/>

    • 类似地,将 /grid_map/odom 这个话题也重定向为 odometry_topic 的值。
    • 意味着节点中的 /grid_map/odom 会和 /odom_world 一样,使用相同的 odometry_topic 进行数据的订阅或发布。
  3. <remap from="/grid_map/cloud" to="$(arg cloud_topic)"/>

    • 将话题 /grid_map/cloud 重定向为参数 cloud_topic 的值。
    • 这个重定向通常用于 点云数据 的话题,比如来自激光雷达或RGB-D摄像头的三维点云数据。这样,原来使用 /grid_map/cloud 话题的地方将改用用户指定的 cloud_topic
  4. <remap from="/grid_map/pose" to="$(arg camera_pose_topic)"/>

    • 将话题 /grid_map/pose 重定向为 camera_pose_topic 的值。
    • 这通常与 相机的位姿 有关,比如在使用RGB-D相机或其他传感器时,提供相机的姿态(位置和方向)。
  5. <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
### EGO Planner 在无人车中的应用与实现 EGO Planner 是一种高效的路径规划算法,尤其适合于需要高精度避障和动态适应性的场景,如无人机、无人驾驶车辆等[^1]。以下是关于如何在自动驾驶领域中利用 EGO Planner 进行路径规划的具体分析。 #### 核心原理 EGO Planner 的核心优势在于能够在复杂环境中快速生成最优路径并实现实时调整。该算法通常结合局部感知数据(例如激光雷达或摄像头获取的信息),并通过优化目标函数来计算最佳轨迹。这种特性使其非常适合用于无人车的动态环境导航需求。 #### 规划流程概述 在一个典型的 ROS 平台下,EGO Planner 可以按照如下方式集成到无人车系统中: 1. **传感器数据融合** 使用 LiDAR 或其他传感器采集周围环境的数据,并将其转换为占用栅格地图或其他形式的地图表示。这些地图可以作为输入传递给 EGO Planner 以便进行路径决策。 2. **全局路径规划** 利用 A* 或 Dijkstra 等传统图搜索算法预先定义一条粗略的全局路径。这条路径会指导后续更精细的局部路径规划过程。 3. **局部路径优化** 基于当前状态信息(位置、速度、加速度等)以及最新的传感数据,调用 EGO Planner 来重新评估最近区域内的可行性和安全性。此阶段涉及复杂的数学建模和技术细节处理,比如碰撞检测、曲率约束满足等问题。 4. **控制命令发布** 将最终得到的最佳轨迹转化为具体的转向角、油门开度等物理量指令发送至执行机构完成动作输出。 #### 技术对比:FAST-Planner vs. EGO-Planner 值得注意的是,虽然两者都属于现代先进路径规划工具集成员之一,但它们之间存在显著差异。相比于 FAST-Planner 更注重效率方面表现&mdash;&mdash;能在极短时间内完成高质量路径设计任务;而 EGO Planner 则倾向于综合考量多种因素达到平衡效果,在某些特定条件下可能展现出更好的灵活性和鲁棒性特点[^3]。 下面给出一段简单的 Python 示例代码片段演示如何初始化一个基本版本的 EGO Planner 对象: ```python from ego_planner import EgoPlanner def initialize_ego_planner(): planner = EgoPlanner() planner.set_map_parameters(width=10, height=10, resolution=0.1) start_pose = (0, 0, 0) # 起始姿态(x,y,theta) goal_pose = (9, 9, 0) # 终点姿态(x,y,theta) path = planner.plan(start_pose=start_pose, goal_pose=goal_pose) return path ``` 上述代码仅作为一个简化版示意图供参考学习之用,请根据实际情况调整参数配置等内容后再应用于真实项目开发当中去。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值