本篇内容:如何运行ego-planner以及控制无人机进行规划避障
注意:本篇需要拥有外部定位支持,以下基于FastLio2定位实现(https://wiki.yundrone.cn/docs/CklZxSfn)
本篇内容属于高级飞行,具有一定的危险和炸机风险,请注意做好保护措施,未了解过的用户可以先观看从0制作自主空中机器人 | 开源 | 浙江大学Fast-Lab课程
Ego-Planner 是一种用于机器人导航和路径规划的算法,它基于局部规划的概念,旨在为机器人提供实时、高效和可靠的路径规划。Ego-Planner 的出现为机器人导航和路径规划领域提供了一种高效、实时的解决方案,对于提高机器人的自主性和实用性具有重要意义。
# 打开终端 启动ros
cd ~/Sunray
roscore
# 启动mavros连接无人机
roslaunch sunray_uav_control sunray_mavros_exp.launch
# 启动MID360
roslaunch sunray_planner_util msg_mid360.launch
# 启动FastLio2算法 输出的里程计话题为 /Odometry
roslaunch sunray_planner_utils mapping_mid360.launch
# 运行外部定位模块 定位源话题为/Odometry
roslaunch sunray_uav_control external_fusion.launch external_source:=0 position_topic:=/Odometry
# 启动节点
roslaunch sunray_uav_control sunray_control_node.launch
## 启动节点
## 此节点为mid360激光雷达版启动节点 基于深度图或其他雷达需要自行修改相应配置
roslaunch sunray_planner_utils sunray_ego_single_mid360.launch
## 如果 rviz没有启动可以手动启动 与sunray_ego_single_mid360.launch 中的参数有关
roslaunch sunray_planner_utils rviz_sunray.launch
正确运行时会在rviz中显示出膨胀的点云数据,使用2DNavGoal工具在rviz中点击发布目标点即可开始规划与移动
sunray_ego_single_mid360.launch
ego-planner相关参数
- map_size_*:地图大小
- run_in_single.launch
- odom_topic:全局坐标系下的里程计话题
- cloudpoint2_topic:全局坐标系下的点云话题
- max_vel:最大规划速度(建议由小到大尝试 不要超过2m/s)
- max_acc:最大规划加速度
- planning_horizon:规划的时间范围,通常建议将 规划范围 设置为 传感器感知范围的1.5倍
- flight_type:1: use 2D Nav Goal to select goal 2: use global waypoints below 4:订阅自定义的话题
- goal_name:目标点自定义话题名,flight_type=4 时需要
- advanced_param_exp.xml
- resolution:定义了栅格地图的 分辨率
- obstacles_inflation:表示障碍物膨胀半径
- ground_height:地面高度
- virtual_ceil_height:表示 虚拟天花板高度
- visualization_truncate_height:表示可视化膨胀地图截断高度
相关节点与参数说明
- positionCmd2sunray:ego-planner的规划结果以一个自定义的话题输出,需要转换为sunray控制节点中的对应的消息
- cmd_sub_topic:需要订阅的positionCmd话题
- control_pub_topic:转换结果发布的话题
- control_type:控制类型 0:XyzPosYaw 1:XyzVelYaw 2:XyzPosVelYaw
- enable_yaw:是否控制偏航角,true:无人机偏航角会进行转动 false:无人机偏航角固定不动
- point_cloud_transform:ego-planner中接受的点云帧需是一个全局坐标系下的点云数据,因此需要将点云做坐标转换
- input_point_topic:局部坐标系下的点云话题
- output_point_topic:转为全局坐标系下的点云后需要发布到的话题
- odom_topic:需要转换到的全局坐标系里程计话题
- frame_id:全局坐标系下的点云数据中填充的 frame_id
- child_frame_id:全局坐标系下的点云数据中填充的 child_frame_id
- goal2swarm:该节点的作用是接收rviz中的2DNav指点信息并重新赋值Z的高度,以新话题发布
- uav_num:无人机数量,单机转态下写1即可
- goal_type:默认选择1 订阅move_base_simple/goal话题
- use_hight:是否自定高度,true:z=z_hight
- z_hight:自定义目标点高度
- livox2point.launch:mid360驱动发布点云数据消息类型不是pointcloud2,因此需要做转换
- pointcloud_topic:转换为pointcloud2格式后发布的话题
- livox_topic:mid360原始消息话题
- filter_distance:过滤半径