本篇内容:如何运行ego-planner以及控制无人机进行规划避障
本篇内容属于高级飞行,真机运行时具有一定的危险和炸机风险,请注意做好保护措施,未了解过的用户可以先观看从0制作自主空中机器人 | 开源 | 浙江大学Fast-Lab课程
Ego-Planner 是一种用于机器人导航和路径规划的算法,它基于局部规划的概念,旨在为机器人提供实时、高效和可靠的路径规划。Ego-Planner 的出现为机器人导航和路径规划领域提供了一种高效、实时的解决方案,对于提高机器人的自主性和实用性具有重要意义。
ego-planner:主节点
- fsm*: 规划器状态机参数
- flight_type:控制飞行模式,不同数值对应不同的目标点设置方式
- thresh_replan_time:重规划的时间间隔,数值越小规划频率越高
- thresh_no_replan_meter: 距离终点小于此阈值时停止规划
- planning_horizon:规划的时间范围,通常建议将 规划范围 设置为 传感器感知范围的1.5倍
- realworld_experiment: 区分仿真和实际环境的标志位
- grip_map:网格地图参数
- resolution:定义了栅格地图的 分辨率
- obstacles_inflation:表示障碍物膨胀半径
- ground_height:地面高度
- virtual_ceil_height:表示 虚拟天花板高度
- map_size_*: 地图大小
- manager:规划管理器参数
- drone_id: 无人机 ID,用于多机协同
- max_vel::最大飞行速度限制
- max_acc: 最大加速度限制
- max_jerk: 最大加加速度限制
- control_points_distance: 控制点间距,影响轨迹平滑度
- optimization:B 样条优化参数
- lambda_smooth: 平滑系数:较高的lambda_smooth值会使轨迹更加平滑,减少急剧的转向和加速,从而提高行驶的稳定性和舒适性
- lambda_collision:避障系数:较低的lambda_smooth值可能会使轨迹更接近障碍物,但有助于更好地避开障碍物,尤其是在复杂环境中
- lambda_feasibility: 可行性权重,确保轨迹可执行
- point_cloud_transform:ego-planner的规划结果以一个自定义的话题输出,需要转换为sunray控制节点中的对应的消息
- input_point_topic:输入的局部点云话题
- output_point_topic:输出的全局点云话题
- odom_topic:用于坐标转换的里程计话题
- frame_id:全局坐标系下的点云数据中填充的 frame_id
- child_frame_id:全局坐标系下的点云数据中填充的 child_frame_id
- positionCmd2sunray:ego-planner的规划结果以一个自定义的话题输出,需要转换为sunray控制节点中的对应的消息
- cmd_sub_topic:需要订阅的positionCmd话题
- control_pub_topic:转换结果发布的话题
- control_type:控制类型 0:XyzPosYaw 1:XyzVelYaw 2:XyzPosVelYaw
- enable_yaw:是否控制偏航角,true:无人机偏航角会进行转动 false:无人机偏航角固定不动
- goal2swarm:该节点的作用是接收rviz中的2DNav指点信息并重新赋值Z的高度,以新话题发布
- uav_num:无人机数量,单机转态下写1即可
- goal_type:默认选择1 订阅move_base_simple/goal话题
- use_hight:是否自定高度,true:z=z_hight
- z_hight:自定义目标点高度
- traj_server:将 ego_planner 输出的 B 样条轨迹转换为位置指令(position_cmd),供无人机控制器使用
- time_forward:轨迹前瞻时间(秒),决定提前多久计算未来位置指令,影响轨迹跟踪的平滑性
在Sunray的控制模块中通过订阅两个话题实现对无人机状态和任务的控制
- sunray/setup
消息定义:Sunray/General_Module/sunray_common/sunray_msgs/msg/UAVSetup.msg
消息说明:该消息用于对控制模块中的模式设置、解锁、上锁、停桨等操作,详细功能请阅读消息定义
- 例:执行解锁
复制代码rostopic pub /uav1/sunray/setup sunray_msgs/UAVSetup "header: seq: 0 stamp: secs: 0 nsecs: 0 frame_id: '' cmd: 1 px4_mode: '' control_state: ''" -1
- 例:切换至CMD_CONTROL
复制代码rostopic pub /uav1/sunray/setup sunray_msgs/UAVSetup "header: seq: 0 stamp: secs: 0 nsecs: 0 frame_id: '' cmd: 4 px4_mode: '' control_state: 'CMD_CONTROL'" -1
- sunray/uav_control_cmd
消息定义:Sunray/General_Module/sunray_common/sunray_msgs/msg/UAVControlCMD.msg
消息说明:该消息用于对无人机发布控制方式与对应控制项的值,详细功能请阅读消息定义
- 例:发布位置控制
复制代码rostopic pub /uav1/sunray/uav_control_cmd sunray_msgs/UAVControlCMD "header: seq: 0 stamp: {secs: 0, nsecs: 0} frame_id: '' cmd: 1 desired_pos: [1.0, 1.0, 1.0] desired_vel: [0.0, 0.0, 0.0] desired_acc: [0.0, 0.0, 0.0] desired_att: [0.0, 0.0, 0.0] desired_thrust: 0.0 desired_yaw: 0.0 desired_yaw_rate: 0.0 latitude: 0.0 longitude: 0.0 altitude: 0.0" -1
以下基于仿真演示
在仿真场景中,可脱离 QGC 实现控制: 当use_rc_control参数设为false时,需通过键盘控制输入 102 先切换至 Offboard 模式,再输入 101 执行解锁操作
脚本启动前提:切换到脚本所在的根目录~/Sunray/scripts_sim下进行操作!
以下操作基于无人机已经起飞!!!
## 脚本启动
./sunray_uav_ego_sim.sh
## 脚本启动
./sunray_uav_ego_global_map_sim.sh