系统概述 #
硬件平台描述 #
OWL智能无人机平台系统基于OWL猫头鹰无人机硬件上运行,考虑到调试方便,软件框架及其中部分软件模块也可以在VISIM仿真平台上调试运行。无人机硬件结构如下图所示:

- 飞控模块运行开源的PX4开源固件;
- 机载电脑上运行了 Ubuntu20.04操作系统,和ROS1框架下的无人机算法和应用;
- 通过wifi链接的客户端APP可以访问无人机应用的数据和对无人机的控制。
OWL软件框架系统 #
OWL智能无人机软件是一整套系统框架,基于该可扩展的框架,可以实现一系列用户业务领域相关的功能。框架结构如下图所示:

– 系统层:
– 硬件平台:支持OWL无人机平台和VISIM仿真平台
– 采用Ubuntu 20.04操作系统
– 针对传感器,硬件加速模块等基于linux的驱动
– 中间件层:
– ROS:使用ROS1的中间件软件框架
– PX4:飞控模块,支持独立硬件和SITL仿真
– MAVROS服务:与PX4交互的服务节点
– Stereo服务:双目视觉采集及深度图生成的服务节点
– VIO 服务:基于双目视觉实现定位的服务节点
– Planner服务:实现路径规划及避障功能的服务节点
– Media服务:采集视频的编解码及网络传输功能的服务节点
– Tracker服务:实现目标识别及跟踪功能的服务节点
– Gimbal服务:实现云台角度控制功能的服务节点(目前支持单轴)
– Monitor服务:对于远程控制器及系统状态检测的服务节点
– 控制层:
– captain服务:实现无人机业务逻辑的服务节点
– Mission Plugin:由用户自行开发的mission接口插件,由一系列内建或自开发的Task组成,用于控制无人机实现整个业务逻辑
– Task Plugin:由用户自行开发的task接口插件,用于控制无人机完成单独的工作任务
– Trajectory Plugin:由用户自行开发的trajectory插件,为某一类任务生成飞行轨迹的功能
– Geometric Controller:用于向飞控发控制命令的独立服务节点
– 地面端
– QGC:通用地面端,可管理飞控,并可以实时显示云台拍摄的视频信号
– Rviz Tools:基于Rviz实现的界面控制端,可监看地图及飞行轨迹,并向无人机发出控制命令
– RC:无线远程控制器
可扩展性 #
基于OWL智能无人机系统框架,可以比较方便的扩展,便于实现客户需要的业务逻辑
– 基于Linux操作系统及标准内核版本,方便增加对新加入传感器设备的驱动支持
– 中间件层基于ROS框架,新增算法和服务以ROS节点加入系统中比较便捷
– captain管理服务将业务逻辑结构化为Mission,Task,Trajectory对象概念,并且这些对象以动态库方式替换和扩展,便于规划客户自有业务逻辑。
– 地面端采用开源的QGC软件,用户也可以基于QT开发用户操作界面,且实现跨平台操作
控制流图 #

stereo_cam模块 #
stereo_cam模块控制USB3.0连接的双目硬件,同时接收双目的硬时钟同步信号。Stereo_cam会根据配置生成双目图像、视差图、深度图和点云图。ROS的启动文件在launch/stereo_cam.launch,双目的内外参在config/stereo_param.yaml。
模块输出的主要ROS topic:
– /stereo_cam/left/image_raw
– /stereo_cam/right/image_raw
– /stereo_cam/depth
– /stereo_cam/cloud_point
mavros模块 #
mavros是基于1.5.0版本(https://github.com/mavlink/mavros.git)
我们做了如下修改:
– 坐标系的修改和静态TF的发布
– 修改了/mavros/local_position/odom的坐标系为“world”
模块输出的主要ROS topic:
– /mavros/imu/data_raw
– /mavros/local_position/odom: 飞控融合后无人机位置
– /mavros/state :PX4状态
模块主要的输入ROS topic:
– /mavros/vision_pose/pose : VIO定位信息
– /mavros/setpoint_raw/local :目标点
– /mavros/setpoint_position/local :目标点
– /mavros/set_mode : PX4状态控制
vision_fusion模块 #
我们使用VINS_Fusion(https://github.com/HKUST-Aerial-Robotics/VINS-Fusion)作为双目定位模块。
主要修改如下:
– 接收stereo_cam模块发出的双目图像和mavros发出imu消息。
– 消息定义可以在config/stereo中的yaml文件里修改。双目的内参,双目相机和IMU之间的外参也在这里修改。
– 具体参数的标定方法可以参见kalibr工具说明和网上教程。
– 发布world坐标系下的/mavros/vision_pose/pose,和Transform。Mavros会转换到map坐标系,进而发送给飞控。
– VINS_Fusion的工作原理,可以参见其官方网站。
模块主要的输入ROS topic:
– /stereo_cam/left/image_raw 和 /stereo_cam/right/image_raw
– /mavros/imu/data_raw
模块主要的输出ROS topic:
– /mavros/vision_pose/pose: VIO的定位信息,以20hz提供给飞控
ego_planner/ego_planner_swarm模块 #
我们适配了ego-planner项目来作为避障导航模块,详情可以参见(https://github.com/ZJU-FAST-Lab/ego-planner)。
并做了如下修改:
– 去除了模拟器,取而代之的是mavros_controller,来控制PX4。
– 删除了src/uav_simulator/Utils/rviz_plugins;
– 增加了/reference/flatsetpoint消息,这个消息传递规划好的路径给captain,后者在发送setpoint_local给飞控。
– 采用深度图,飞控的位姿(/mavros/local_position/odom)作为ego-planner的输入。
模块主要的输入ROS topic:
– /mavros/local_position/odom: :无人机的当前位置
– /stereo_cam/depth:双目的深度图
– /vins_estimator/camera_pose:深度图对应相机的位置
– /trajectory_publisher/goal: 触发planner的目标
– /trajectory_publisher/cmd: mavros_controller发出来的开始和结束等命令
模块主要的输出ROS topic:
– /reference/flatsetpoint:接到目标后,planner会实时避障计算路径,并发出下一时刻的setpoint
captain/plugins模块 #
为了控制无人机的任务完成,需要管理和链接上面各个无人机算法模块,我们使用captain模块完成这些控制。
同时该模块采用可扩展结构设计,使得用户可以基于现有平台进行二次开发,将自有的控制流程和算法可以无缝的嵌入到整个系统流程之中。
– captain启动时读取配置文件,得到mission名称及参数,转入对应的Task任务和对应的Trajectory对象,并开始执行
– captain在接收/control 消息,随时响应外部命令。包括起飞,降落,开始demo,结束demo,解锁,上锁,切换定位模式,切换避障模式等。
– captain在接收远程遥控器命令,随时响应外部命令。包括模式切换,开始demo,结束demo等。
– captain可以通过修改配置文件,装入定制的各类plugin并执行。
模块主要的输入ROS topic:
– /control : 响应外界的各种命令
– /mavros/rc/in :遥控器的通道
– /mavros/local_position/pose: 飞控融合后无人机位置
– /mavros/local_position/velocity_local: 飞控融合后无人速度
– /mavros/state :PX4状态
模块主要的输出ROS topic:
– /reference/flatsetpoint: trajectory计算后给出的飞行轨迹点
– /planning/cmd:planner开始、结束等命令
– /planning/goal: ego-planner 的目标
– /captain/delta_pitch:云台控制角度
geometric controller模块 #
为了提高系统稳定性,将给飞控发控制命令的相关功能单独从Captain中剥离出来整合为独立进程Geometric controller模块。在其他软件出现意外错误时,无人机飞行控制能够继续正常工作,以减少炸机概率。该模块是基于mavros_controller(https://github.com/Jaeyoung-Lim/mavros_controllers)
主要工作:监听/reference/flatsetpoint消息,转换成setpoint_local消息发送给mavros,最终控制PX4。
模块主要的输入ROS topic:
– /reference/flatsetpoint: ego_planner/trajectory计算后给出的飞行轨迹点
– /mavros/local_position/odom: 飞控融合后无人机位置
– /mavros/local_position/velocity_local: 飞控融合后无人速度
– /mavros/state :PX4状态
模块主要的输出ROS topic:
– /mavros/setpoint_raw/local: 送给飞控的飞行位置信息
– /mavros/cmd/arming: 控制飞控桨叶加解锁
– /mavros/set_mode: 设置飞控模式
无人机客户端 #
用户可以配置Ubuntu系统和ROS1的客户端,通过以下配置可以和无人机建立远程ROS连接。进而通过RVIZ远程监控无人机状态,或者通过发布/control消息等方式来控制无人机任务。
-ROS远程连接
机载电脑上的软件已经配置成ROS MASTER。客户端可以通过如下命令设置本地ROS环境:
export ROS_IP=192.168.2.本机IP
export ROS_MASTER_URI=http://192.168.2.20:11311
然后运行“rosnode list”查看ROS节点,来检测连接是否正常。
rosnode list
– RVIZ中常用的监看及控制
上述ROS连接成功后,可以运行rviz图形界面显示ROS消息结果,在界面上端点击按键可控制无人机操作。
cd src/swarm_rviz/config
#不同版本选择不同的shell脚本
./single_rviz.sh