SIGMAfree软件作为一款目标导向的仿真软件,我们设计了充足的数据接口来支持各类算法的开发工作,可以提供飞行器各类状态数据、障碍物摆放数据、地面车辆位姿数据、飞行器第一视角图像数据等。为方便调试程序,SIGMAfree支持外部程序与飞控程序通过网络进行数据交互,同时具备的硬件在环仿真功能也可以实现飞控硬件接入。
本篇我们将介绍无人机仿真系统SIGMA free的数据接口及我们配套的SDK,让大家能更好地利用此软件进行算法开发,并对数据接口可能提供的算法仿真进行展望。
本文所有SDK及示例代码都在gitee开源仓库上,请自行克隆至WSL子系统中使用:
https://e.gitee.com/beijing-daxiang-airlines/repos/beijing-daxiang-airlines/sigma-sdk
详细的视频教程已经同步更新到我们的b站主页(见文章末尾),如果想详细了解可以进入我们的b站视频进行学习!
01
结构关系及数据流图
SIGMA free仿真系统为外部程序提供了多种接口,用于订阅飞行器、车辆、障碍物或图传信息以及收发飞行控制消息。软件的框架图可以参考SIGMA free基础使用教程(一)—设置菜单说明中的说明。而仿真系统中重要模块的结构关系图如下图所示,所涉及的数据流图也一并进行展示。

其中,UE4(渲染引擎)的绝大部分数据,如飞行器数据、地面车辆数据、障碍物数据基于ZeroMQ接口编写的,可以直接使用SIGMAfree提供的SDK进行读取。而第一视角图像数据采用了Gstreamer的传输策略,可以支持多种编码格式的图传。
此外,PX4(飞行控制)本身可以直接通过mavlink或者ros/ros2等成熟协议进行直接交互,从而实现对飞控代码执行的外部控制,从而实现改变控制模式、调整控制参数、修改控制策略等等功能。
这些数据接口功能如下:
飞行器数据:实时请求飞行器位姿和舵量及油门数据,较为简洁直观。
车辆数据:可以获取地面车辆信息并且可以通过传递航点方法直接控制车辆移动。
障碍物数据:可以得到摆放障碍物位置和体积,方便建图。
第一视角图像数据:可以低延迟(20ms-100ms)得到渲染第一视角图像数据,从而支持深度学习、SLAM、Nerf、导航及定位等智能算法开发。
直接交互数据:可以全面获取飞行器参数及各项传感器数据,与PX4官网用法一致,支持Mavlink、MAVRos、RTPS等多种协议,使用较为复杂。并且可以将控制量传递给飞控,可基于offboard模式完成深层开发。
利用上述SIGMAfree提供的数据接口,我们就可以按照自己面临的科研目标设计并逐步实现完整的代码。例如,我的目标是实现基于已知地图进行路径规划避开障碍物,那么我需要利用SIGMAfree提供的SDK实现障碍物数据读取,然后根据自己设计的路径规划算法计算飞行器需要到达的航点,再通过mavlink协议将计算的航点发送给飞控,实现完整的过程。
显然,SIGMAfree可支持的算法开发有:静态障碍物路规;强化学习避障;地面动静目标制导;地面车辆跟随;图像数据自动标注;各类深度学习算法开发等。
我们后续会陆续更新图文和视频来带领大家逐步实现我们能想到的各类算法,希望大家先关注再转发,然后静静等待~关注b站主页,看视频教程也是事半功倍~
02
飞行器、车辆和障碍物数据读取
SIGMAfree为了方便大家的学习,将常用基于ZeroMQ读取数据的代码变为SDK上传到了gitee仓库,大家可以自行下载使用~
该SDK使用ZeroMQ(ZMQ)协议向UE4请求我们所需要的数据,包括飞行器、车辆以及障碍物的信息。ZMQ是一种基于消息队列的多线程网络库,是在对传统的标准socket接口扩展的基础上形成的特色消息通信中间件。它提供了高效的异步消息传递机制,以实现可靠、快速的数据交换。
打开SIGMAfree提供的SDK能够看到,在ZMQ客户端的构造函数中绑定了UE4的IP、端口号和ZMQ请求周期。并且定义了以下函数。
| 函数 | 描述 |
|---|---|
|
|
|
int request_num(std::string); |
通过传参来获取飞行器、车辆或障碍物的数量。例如request_num(tar)会返回车辆数量。 |
void request_msg(std::string request_str, bool req_once); |
|
|
|
|


SIGMAfree配套的SDK是开源的,拿到代码的读者可以根据自己的理解进行任意的改造,从而实现更加复杂、有效的功能,也欢迎大家关注公众号和我们交流使用心得~
03
车辆控制接口
使用SIGMAfree提供的SDK接口,我们同样可以自己编写外部程序,通过ZMQ协议控制仿真系统中提供的车辆。
XMLBuilder xmlBuilder("root");xmlBuilder.addWaypoint("325634880", "1167258752", "0", "1");xmlBuilder.addWaypoint("325630528", "1167261568", "0", "1");xmlBuilder.addWaypoint("325624576", "1167248256", "0", "1");//发送控车指令xmlBuilder.send_ctr_msg();
例如上述代码,我们通过addWaypoint函数向UE4传输期望的纬度、经度、高度和车辆编号,以此来实现对车的控制。该部分控制代码例程也在上述gitee仓库中,请读者自行获取。下面的动图是使用该功能完成的小旋翼跟踪大坦克的效果演示。
*请注意:MBT90为静态车辆,无法移动,其他车辆类型可以控制。

04
获取飞控的数据
MAVLink是一种非常轻量级的消息传递协议,已被广泛应用于无人机系统。在我们的通信过程中,不论是外部程序获取飞控的数据,还是向飞控发送消息,都是通过MAVLink协议传输的。
SIGMAfree中保留了飞控数据外部读取功能。使用UDP协议向飞控(PX4)的IP和端口号请求飞行器数据,并将收到的MavLink消息进行解码,以此获取到飞行器的位置、姿态、速度等信息。
我们在开源的SDK仓库中也提供了示例代码,同时,大家也可以在PX4官网教程中自行学习!
PX4官网教程
https://docs.px4.io/main/zh/robotics/
05
Offboard模式下控制飞行器

利用SDK还可以实现PX4各种飞行模式的仿真,这里仅仅是做一个简单的介绍,更多的功能使用和教学我们会在公众号和b站逐步更新,欢迎大家关注~
06
扫取二维码观看
视频教程
我们在b站等你
如果文字版不清楚,可以关注公众号、B站主页,获取SIGMA free基本功能教学视频,还有更多的SIGMA free的精彩使用视频给您带来科研灵感!!!
相关软件及文档链接
SIGMA free永久免费下载链接:
http://download.dxuas.com.cn/SigmaFree/SigmaFree.zip
QGroundControl下载链接:
http://download.dxuas.com.cn/Software/QGroundControl-installer.exe
VsCode下载链接:
http://download.dxuas.com.cn/Software/VSCodeUserSetup-x64-1.80.1.exe
PX4官方文档:
https://docs.px4.io/main/en/
地面站官方文档:
http://qgroundcontrol.com/

