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 的地图和控制台窗口无法弹出,解决办法就是在电脑上安装以下工具:


VcXsrv工具



具体安装步骤:

步骤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











相关文档