软件介绍

在板载计算机上面存在两套ROS包,一个是Prometheus功能包,另一个是实机启动p600_experiment功能包。

Prometheus软件框架及基本含义

Prometheus的软件框架如下图所示,

None

基本上分为以下几个模块:

控制模块(Prometheus/Modules/control)

None

控制模块主要与MAVROS进行信息交互,分为两个部分,一部分是输入,一部分是输出.

  • px4_pos_estimator.cpp :主要将板载计算机处理之后的位置数据传给飞控,读取飞控当前的状态信息

  • px4_sender.cpp :主要将控制指令接口通过px4_sender发送给mavros,从而控制飞机进行相应的动作指令

支持的为板载计算机提供位置的数据来源有:动捕系统mocap,英特尔T265双目相机,激光雷达定位建图,仿真器gazebo提供模型位置数据,以及SLAM提供位置数据

提供的控制飞机的接口API包括:

None
  • Idle:怠速;意思就是飞机会进入offboard模式,但是在该模式下,没有对飞机进行任何指令的发送。飞机也不会有任何动作。这个指令一般也可以不用。

  • Takeoff:起飞;起飞点为当前点,起飞高度通过 yaml参数设置,单位是米,默认起飞高度是0.5m

  • Hold:悬停;飞机正在飞行过程中如果接受到 2 指令,会在当前时刻进入悬停状态。

  • Land:降落;降落速度通过 yaml参数设置,单位是m/s ,默认降落速度为0.2m/s 。还有一个 上锁高度 到达上锁高度之后飞机会进入飞控的本身降落模式进而缓缓着地,上锁高度通过 yaml 参数进行设置,单位是米,默认是 0.18m,即认为离地不到20cm的时候进入降落飞行模式。

  • Move模式;该模式就包含我们所称的指点飞行功能,在此模式下,又有5种子模式,

    • XYZ_POS,空间位置控制

    • XY_POS_Z_VEL,水平面位置控制高度速度控制

    • XY_VEL_Z_POS,水平面速度控制高度定高控制

    • XYZ_VEL,空间速度控制

    • TRAJECTORY,轨迹跟踪控制

规划模块(Prometheus/Modules/planning)

None

目前实际使用的规划模块是全局规划模块,使用的是A星算法。

绿色框选部分为Astar全局规划的代码,

  • A_star.cpp :为A星算法的实现

  • global_planner.cpp :为全局规划策略主节点

  • occupy_map.cpp:栅格地图处理,根据膨胀系数,生成安全距离

SLAM模块(Prometheus/Modules/slam)

None

SLAM模块一块为建图模块,另一块为定位模块。

绿色框选部分为建图模块

  • pointcloud_to_octomap_node.cpp:订阅点云数据,发布八叉树栅格地图

  • elas_stereo_node.cpp:调用双目匹配算法,计算出稠密视差图,生成深度图,发布全局点云

目前板载计算机所搭载的相机包括有D435i和T265,可以利用realsense-ros官方提供的功能包实现RTAB-Map建图

另外一部分为定位模块

  • 定位模块目前是使用的是T265本身输出的slam结果,具体调用可查看控制模块中的px4_pos_estimator.cpp细节处理。

目标检测模块(Prometheus/Modules/object_detection)

None

目标检测模块比较多,如图中绿色框选所示

  • web_cam.cpp:USB相机发布ROS话题

  • ellipse_det:椭圆检测处理节点

  • kcf_tracker.cpp:框选跟踪节点

  • landpad_det.cpp:降落板检测

  • color_det:颜色识别节点

  • digitnum_det:手写数字识别节点

目前常用就这些,还有很多其他的识别节点,更多请详细Prometheus开源项目仔细查看。

任务模块(Prometheus/Modules/mission)

None

该模块属于上层应用模块,具体实现哪一种功能。

  • autonomous_landing:自主降落程序

  • circle_crossing:圆形穿框(在真实飞机中简单修改策略,实现圆形跟踪)

  • color_line_following:颜色巡线

  • number_detection:数字识别无人机跟踪

  • object_detection:无人机目标框选KCF跟踪

  • planning_mission:路径规划的航点处理(多航点,单航点,多机航点,qgc航点读取)

  • waypoint_tracking:航点跟踪节点(类似与走一个四边形,走其他航线图形)

还有很多具体的应用型节点,这些节点都是对control,object_detection,planning等等各个模块的结合使用,如果想学习如何调用API接口,可以参考其中的代码实现。

公用模块(Prometheus/Modules/common)

None

公用模块中比较核心的就是自定义的msg消息,定义的msg如上图绿色框选所示

  • ControlCommand.msg:控制无人机指令的msg格式,掌握API首先掌握msg定义

  • DetectionInfo.msg:目标检测模块的输出结果

  • DroneState.msg:无人机当下各个状态信息(与板载计算机是否通信连接,解锁或者上锁,当前飞行模式,当前的状态量位置速度加速度及姿态)

  • LogMessageControl.msg:控制端的日志打印信息记录

等等还有很多的自定义msg,规划模块,多机模块的,更多细节可以在板载计算机中查看Prometheus代码或者在Prometheus开源Github上查看。

×下面附上在板载计算机中Prometheus的代码目录框架×

None

p600_experiment功能包使用及含义

p600_experiment功能包是适配prometheus开源代码的实机闭源功能包。

该文件位置:amovlab_ws/src/p600_experiment

None

此功能包主要包含

  • 参数配置文件config

  • 基本的launch文件launch_basic

  • 控制相关的launch文件launch_control

  • 目标检测相关的launch文件launch_detection

  • 路径规划相关的launch文件launch_planning

  • 飞控的固件和参数文件px4_firmware

接下来分别从上面各个文件阐述文件里面的内容

config

None
  • mavros_config:对mavros相关参数的配置(分为室内一组,室外一组)

  • 室内
    • px4_config.yaml

    • px4_pluginlists.yaml

  • 室外
    • px4_config_gps.yaml

    • px4_pluginlists_gps.yaml

launch_basic

None

p600_circle_det.launch: 圆框检测launch文件

p600_gps_onboard.launch: 室外GPS定点launch文件

p600_landpad_det.launch: 二维码检测launch文件

p600_vio_onboard.launch: 室内T265定点launch文件

rs_t265.launch: T265启动launch文件

launch_control

None

p600_gps_control.launch: 室外GPS指点launch文件

p600_vio_control.launch: 室内T265指点launch文件

launch_detection

None

p600_indoor_circle_tracking.launch: 室内圆框跟踪launch文件

p600_indoor_landing_static_target.launch: 室内二维码降落launch文件

p600_outdoor_circle_tracking.launch: 室外圆框跟踪launch文件

p600_outdoor_landing_static_target.launch: 室外二维码降落launch文件

launch_planning

None

室内避障launch文件:

astar_onboard.launch

astar_ground.launch

tf_transform.launch

室外避障launch文件:

astar_onboard_gps.launch

astar_ground_gps.launch

tf_transform_gps.launch