1、仿真环境1:SITL仿真 + MAVProxy + MP地面站/QGC地面站
一、前言 当我们将Ardupilot的源码编译完成后,源码里面也自带了一个SITL的简易仿真工具。 通过这个仿真工具,我们可以在没有飞控板的情况下做一些飞控功能逻辑的验证。 (如果还未下载且编译过Ardupilot源码,可以参阅 此文 ) ...
一、前言
当我们将Ardupilot的源码编译完成后,源码里面也自带了一个SITL的简易仿真工具。
通过这个仿真工具,我们可以在没有飞控板的情况下做一些飞控功能逻辑的验证。
(如果还未下载且编译过Ardupilot源码,可以参阅此文)
执行以下命令:
cd ~
cd ardupilot/ArduCopter/注:
如果要开启固定翼的仿真,则先进入/ardupilot/ArduPlane文件夹下,
如果要开启无人车船的仿真,则先进入/ardupilot/Rover文件夹下
本章节以演示Copter(多旋翼)的仿真为例:
在/ardupilot/ArduCopter目录下,执行:
../Tools/autotest/sim_vehicle.py --map --console等待编译进度条走完,可能会提示如下报错,系统找不到mavproxy.py。

在 WSL 终端中执行以下命令,检查是否已安装 MavProxy 工具:
mavproxy.py --version
如上图所示,如果提示命令找不到,则执行以下命令,安装MavProxy 工具
sudo apt update
sudo apt install -y python3 python3-pip python3-dev libxml2-dev libxslt1-dev zlib1g-dev
sudo pip3 install mavproxy执行上述指令后,会提示一个警告,不用理会。

此时再次执行打开多轴仿真命令,就会正常打开,3个图形化界面。
../Tools/autotest/sim_vehicle.py --map --console二、SILT仿真开启成功的页面
执行指令后../Tools/autotest/sim_vehicle.py --map --console
就会弹出以下3个窗口界面。

注:SILT仿真无法打开,无法打开图形化界面
有朋友执行指令:
可以正常编译,但是无法打开图形化界面,提示以下报错:
Unable to access the X Display, is $DISPLAY set properly? ERROR in command ['load', 'map']: map not ready
这个是WSL 无法访问图形界面(X Display),导致 MavProxy 的地图和控制台窗口无法弹出,解决办法就是在电脑上安装以下工具:

具体安装步骤:
步骤1:安装VcXsrv软件
打开exe安装包,安装

安装后,打开这个软件

启动 VcXsrv,选择 “Multiple windows” 或 “One large window”,
其他保持默认,点击 “Next” 直至启动(任务栏会出现一个 X 图标,表示 X Server 正在运行)


安装时按默认选项即可,注意勾选 “Disable access control”(否则 WSL 可能无权连接)。

步骤2:获取 Windows 的 IP 地址
配置 WSL 的$DISPLAY环境变量,获取 Windows 的 IP 地址,首先子系统的终端输入命令:
cat /etc/resolv.conf | grep nameserver | awk '{print $2}'上述命令输入后,终端输出的 IP(如172.27.144.1)就是 Windows 主机在 WSL 中的虚拟 IP。
步骤3:设置$DISPLAY变量
在 WSL 终端中执行(将 IP 替换为上一步获取的地址)
export DISPLAY=172.27.144.1:0.0(0.0是显示器编号,通常保持默认即可)
步骤4:设置永久生效
为了避免每次启动 WSL 都重新设置,将上述命令添加到.bashrc中:
echo 'export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '\''{print $2}'\''):0.0' >> ~/.bashrc
source ~/.bashrc # 立即生效此时,再打开一下VcXsrv软件,确保勾选“Multiple windows”、 “Disable access control”。


然后再打开unbutn终端输入以下命令,此时便可以正常打开,仿真界面,看到3个弹窗窗口。
../Tools/autotest/sim_vehicle.py --map --console
四、打开地面站软件,查看联动效果。
MP地面站 (或QGC地面站),它们内部都已经做好了与仿真联动的程序与接口。
因此在我们在先开打SITL仿真软件的时,再打开MP地面站 (或QGC地面站),它们便会自动以UDP的方式进行连接。
1)MP地面站 与 SITL仿真的联动界面
2)QGC地面站与 SITL仿真的联动界面

五、使用基础指令,测试仿真效果
此时,我们的飞控固件是运行起来了,但是没有接遥控器应该如何控制无人机解锁,以及打杆起飞呢?
SITL的仿真环境的命令台中,集成一系列指令,可以通过在MAVProxy工具来作为数据收发。
下面简单演示一下最基础的起飞、遥控器通道输入控制
1)在这个命令提示框下输入相关指令:

2)无人机必须要以引导模式下才能起飞,执行以下命令。
mode guided #切换模式到guided
arm throttle #解锁油门,15s无动作,仿真环境里面的无人机会自动上锁
takeoff 40 #起飞到40m其他常用指令:
- 给无人机解锁:arm throttle
- 给无人机强制解锁:arm throttle force
- 给无人机上锁:disarm
- 给无人机强制上锁:disarm force
- 切换到返航模式:mode rtl
- 切换到悬停模式: mode loiter
- 切换到降落模式: mode land
- 控制油门通道上升: rc 3 1800
- 控制油门通道下降: rc 3 1300
- 控制俯仰往右飞:rc 2 1200
- 控制俯仰往前飞:rc 1 1700
视频演示如下:
但是实际上通过指令去控制无人机的打杆飞行其实非常的麻烦,MP地面站支持接入遥控器。
从而可以实现遥控器去控制地面站中仿真无人机,具体设置方法可以参考文档《EdgeTX遥控器接入MP地面站实现模拟功能》!
3)更多旋翼的 指令可以参考:copter-sitl-mavproxy-tutorial.html
六、更多功能
关于MAVProxy工具的更多用法可以参考APM的官方wiki:
1)基础的指令:index.html
2)命令速查表:cheatsheet.html
3)详细目录页:index.html#home
4)高级测试:using-sitl-for-ardupilot-testing.html#using-sitl-for-ardupilot-testing
5)接入虚拟遥杆:common-joystick.html#common-joystick
