使用 SITL

本文介绍了如何 SITL 可用于改变环境、模拟故障模式,以及为载具配置可选组件。

SITL 可在 Linux 下运行,使用名为 sim_vehicle.py 从 Linux 或 WSL2 命令行,或通过 Mission Planner地面站的模拟功能.它还可以与图形可视化和/或物理建模程序(如 实时飞行.

除了运行模拟,还需要同时运行地面控制站程序,以便控制模拟。在 sim_vehicle.py, MAVProxy 会自动启动。使用Mission Planner地面站的模拟功能时,将使用该功能。您也可以连接一个以上的 GCS,请参阅 连接不同的全球监控系统.

备注

如果您想模拟自己的代码,本页面假定您已经克隆了版本库并设置了构建环境,请参阅 编写代码如果使用 Mission Planner地面站的模拟功能 因为它可以轻松地在当前开发代码或稳定代码版本上运行模拟。

提示

如果您刚开始使用 MAVProxy 和 SITL,您可以先阅读 旋翼飞行器 SITL/MAVProxy 教程 (或其他载具的同等教程)。

备注

这些说明一般使用 MAVProxy 因为它提供了一个简单、一致的命令行界面(无需描述 GCS 专用的用户界面布局),所以可以用它来描述操作(如设置参数)。其中许多操作也可以在 Mission Planner地面站 通过 完整参数列表)或任何其他全球控制系统。

使用 sim_vehicle.py

启动脚本 `sim_vehicle.py 可自动为当前代码分支构建 SITL 固件版本、加载仿真模型、启动仿真器、设置环境和飞行器参数并启动 MAVProxy GCS。可以指定许多脚本启动参数,请键入此参数查看完整列表:

模拟载具.py --帮助

选择载具/车架类型

模拟器将默认使用启动时所在目录中的载具类型。如果从任何目录启动,可以通过调用以下命令启动模拟器来选择载具类型 sim_vehicle.py-v 参数。

模拟载具.py -v ArduPlane --游戏机 --地图

还可以使用 -f 参数。

模拟载具.py -v ArduPlane -f 垂直起降 --游戏机 --地图

框架类型:

下面列出了部分框架类型。如需最新列表,只需键入

模拟载具.py --帮助

载具

框架类型

固定翼飞行器

平面(未使用 -f 时的默认值)

quadplane firefly plane-dspoilers plane-elevon plane-jet plane-tailsitter plane- vtail quadplane-cl84 quadplane-tilthvec quadplane-tilttri quadplane-tilttrivec quadplane-tri plane-3d

旋翼飞行器

四边形(未使用 -f 时的默认值)

coaxcopter dodeca-hexa heli heli-compound heli-dual hexa hexa-cwx hexa-dji octa octa-cwx octa-dji octa-quad octaquad-cwx tri cwx singlecopter y6 djix

无人车UGV

rover(未使用 -f 时的默认值)

平衡杆漫游滑板帆船帆船-马达

备注

选择正确的框架类型非常重要。这不仅能加载正确的参数集,还能选择正确的物理模型。例如,在现实生活中,您可以为任何 QuadPlane 配置和设置 ArduPlane 固件,但在 SITL 中,如果没有为模拟选择准确的 QuadPlane 框架类型,就无法获得正确的物理模型。如果未选择框架类型,则将加载载具类型的默认设置,如上所述。

设置载具启动位置

您可以通过调用 sim_vehicle.py-L 参数和 ardupilot/Tools/autotest/locations.txt 定义

例如,要在 巴拉瑞特 (在 地点.txt) 调用:

CD ArduCopter
模拟载具.py -L 巴拉瑞特 --游戏机 --地图

备注

您可以在文件中添加自己的位置。顺序为 Lat、Lng、Alt、Heading,其中 Alt 为 MSL,单位为米,Heading 为度。如果飞行位置使用率很高,可以考虑通过拉取请求将其添加到项目中。

备注

您可以在本地 locations.txt 文件中添加自己的私人位置,格式与主文件相同。在 Linux 下,该文件位于 $HOME/.config/ardupilot/locations.txt - 您需要使用自己喜欢的文本编辑器创建该文件。

加载不同的默认参数集

框架类型会自动选择一组默认参数。不过,您可以使用 --add-param-file= 选项,而不是在模拟启动后通过 GCS 手动加载:

模拟载具.py -v ArduPlane --游戏机 --地图 --增加-停止-文件=<;  文件>;

默认工作目录将是启动 sim_vehicle.py 的目录。

备注

默认 "参数集模拟固件中的参数默认值。参数启动时将使用这些默认值,除非用户之前更改了某个参数的默认值,在这种情况下将使用更改后的值。在 SITL 中,这些更改存储在仿真启动目录下的一个文件中,文件名为 eeprom.bin.如果您希望仅使用默认值启动,可以删除该文件,或者使用 -w 选项。

模拟载具.py -v ArduPlane --游戏机 --地图 --增加-停止-文件=<;  文件>; -w

在模拟中添加模拟外设

参见 为 sim_vehicle 添加模拟外设

使用真实的串行设备

有时,在 SITL 中使用真正的串行设备非常有用。这样就可以将 SITL 连接到真正的 GPS,用于 GPS 设备驱动程序的开发,或连接到真正的 OSD 设备,用于测试 OSD。

要使用真正的串行设备,可以使用类似这样的命令:

模拟载具.py -A "--serial2=uart:/dev/ttyUSB0"; --游戏机 --地图

这样做的目的是将 -serial2 参数传递给 ardupilot 代码,告诉它使用 /dev/ttyUSB0 而不是正常的内部模拟 GPS。您可以找到 SITL 串行端口映射 这里

8 个 UART 中的任何一个都可以使用串行 0 至串行 7 以这种方式进行配置。

通常情况下,串行设备可以通过 FTDI 适配器连接到计算机的 USB 端口,但需要注意的是,这些适配器通常不支持半双工。要以这种方式与设备通信,应确保用户在 linux 系统上有适当的拨出组权限。在 WSL 上,通常还需要在连接设备后设置端口,然后再尝试通过 SITL 与之交互。例如 COM22:

ty -F /设计/ttyS22 未经加工的 115200

您可以在连接字符串中为 uart 设置附加参数,例如,要使用 SERIAL1 上的设备,波特率仅为 115k,请指定

模拟载具.py -v ArduCopter -A "--serial1=uart:/dev/ttyUSB0:115200"; --游戏机 --地图

与此类似,如果您通过 Microsoft Windows 上的 Cygwin 在 SITL 中运行载具,并希望通过 COM16 上连接的无线电将 MAVLink 输出发送到 AntennaTracker,您可以使用如下命令--注意在 Cygwin 下通信端口为 ttyS,从 0 开始,因此 15 相当于 COM16:

模拟载具.py -A "--serial1=uart:/dev/ttyS15"; --游戏机 --地图

与海丰国际一起蜂拥而至

SITL 支持通过一条命令发射多个飞行器。使用这种方法,SITL 只能发射同一类型的飞行器。

发射多辆载具时,每辆载具都需要一个唯一的 SysId 参数: SYSID_THISMAV.避免 SysId 冲突的最简单方法是使用 --auto-sysid 选择。

载具数量用 --计数 选择。

在此之前,所有载具都会在相同的默认位置生成并相交。

为了避免这种情况,必须在独特的位置生成它们。主要有两种方法,一种是使用蜂群偏移线,另一种是使用蜂群配置文件。这两种方法都需要用 --地点.

使用蜂群偏移行时,选项 --自动偏移线 90,10 这些载具将以 90 度的方向排成一线。载具之间的间距为 10 米。因此,它们将呈东西向分布。

在 CMAC 的自动偏移线上,将五辆 Copter 载具组装在一起:

模拟载具.py -v 旋翼飞行器 --地图 --游戏机 --计数 5 --载具-系统码 --地点 CMAC --载具-胶印-线条 90,10

生成载具的另一种方法是使用蜂群配置文件。配置示例见 Tools/autotest/swarminit.txt文件格式。这样就可以配置 ENU 偏移以及每辆车的初始绝对航向。

模拟载具.py -v 旋翼飞行器 --地图 --游戏机 --计数 5 --载具-系统码 --地点 CMAC --飞来飞去 工具/自动测试/群集.文本

MavProxy 的多车型指南 包含控制蜂群的信息。

从 Saleae Logic 数据捕获中重放串行数据

Saleae Logic 常用于首次解码和调试协议。异步串行 "分析仪可以将数据导出为 CSV,然后通过 ArduPilot 的模拟 UARTDriver 重放这些数据,以测试对这些数据的解析。

串行数据会以获取轨迹时在线路上出现的相同速率重放到仿真中,从而保留帧间隙等信息。

在对串行数据流进行逻辑解码后,使用此接口元素导出数据:

./_images/saleae-async-save.png

这些数据应该是这种格式:

时间 [s],价值,奇偶校验 错误,框架 错误
109.557104960000004,0x9B,,
109.590780800000005,0x00,,
109.609869119999999,0x00,,
109.610386399999996,0x00,,
109.613748799999996,0x00,,
109.614266079999993,0x6B,,
109.616231679999999,0x00,,
109.744313439999999,0x0A,,
109.744830719999996,0x89,,

将此捕获文件放到 ArduPilot 资源库的根目录下。

上指定模式和文件名。 sim_vehicle.py 命令行。下面的示例在数据被读入解析器时插入了一个断点:

./工具/自动测试/模拟载具.py  --gdb --排错 -v 飞机 -A --序列5=logic_async_csv:爱好翼-白金-职业运动员-v3.csv --加速=1 -B AP_HobbyWing_Platinum_PRO_v3::更新

备注

您的 serial5_protocol 必须适当设置,才能读取该数据。

备注

在数据从文件输入模拟之前,会有 5 秒钟的模拟时间延迟。

使用不同的 GCS 代替 MAVProxy

开始 模拟载具 无需使用 --无导航代理 选项。SITL 将通过 TCP 5760 端口监听任何 GGS 站的连接。

许多 GCS 只能通过 TCP 启动连接。对于 Mission Planner 或 QGC,请选择 TCP、sim_vehicle 运行的主机 IP 或本地运行的 127.0.0.1,然后进行连接。

../_images/MissionPlanner_ConnectTCP.jpg

Mission Planner地面站:使用 TCP 连接到 SITL

使用不同的 GCS 代替 MAVProxy(通过 UDP)

使用 --无导航代理 选项和 UDP 要求添加一个启动选项,让模拟在 UDP 上输出心跳,以便 GCS 可以连接:

模拟载具.py -A "--serial0=udpclient<gcs ip>:14550"; --游戏机 --地图

其中,如果 GCS 位于同一台电脑上,<gcs ip> 将是 127.0.0.1,或者是运行 GCS 的远程电脑的 IP 地址

在Mission Planner地面站中,通过选择 UDP 然后 连接 按钮。输入要监听的端口(如果 SITL 在同一台计算机上运行,默认端口号 14550 应该是正确的)。

../_images/MissionPlanner_Connect_UDP.jpg

Mission Planner地面站:连接到 UDPPort

使用飞行Mission Planner地面站的模拟功能

而不是使用 sim_vehicle.py 在 Linux 或 WSL 下,您还可以使用 Mission Planner 的模拟功能进行模拟。

参见 飞行任务规划模拟

连接其他/附加地面站

通过使用 MAVProxy 或 Mission Planner 将 UDP 数据包转发到 GCS 网络地址,SITL 可以连接多个地面站。

使用 MAVProxy(UDP)转发

通过使用 MAVProxy 将 UDP 数据包转发至 GCS 网络地址(例如,转发至本地网络上的另一个 Windows 操作系统或安卓平板电脑),可将多个地面站连接至 SITL。然后就可以通过任何连接的 GCS 控制和查看模拟飞行器。

首先找到运行 GCS 的机器的 IP 地址。如何获取地址取决于平台(在 Windows 系统中,可以使用 "ipconfig "命令查找计算机地址)。

假设 GCS 的 IP 地址为 192.168.14.82,则可使用以下方法将该地址/端口添加为 MAVProxy 输出:

产量 增加 192.168.14.82:14550

然后,GCS 将通过监听 UDP 端口连接到 SITL。

提示

如果您在 同一台机器 那么适当的输出可能已经存在。通过调用 产量MAVProxy 命令提示符:

指导>; 产量
指导>; 2 产出
0: 127.0.0.0.1:14550
1: 127.0.0.0.1:14551

在这种情况下,我们可以将同一台机器上运行的 GCS 连接到 UDP 端口 14550 或 14551。我们可以选择将另一个 GCS 连接到剩余的端口,并根据需要添加更多端口。

使用Mission Planner地面站转发

Mission Planner地面站可以使用 Mavlink 镜像转发到其他 GCS。在 "设置/高级/Mavlink 镜像 "下设置连接类型(通常为 UDP 客户端)、波特率(UDP 为 11520)、允许连接的 GCS 更改内容的可选写入权限,然后按连接。监听 GCS 将自动连接到 SITL。

../_images/mavlink-forwarding.jpg

SITL 模拟参数

在 sim_vehicle 中添加模拟设备

访问日志文件

SITL 支持块日志和 SD 卡存储 DataFlash 日志(与物理(飞行)控制器使用的相同)。SD 卡日志存储在启动 sim_vehicle 的目录下的 "logs "子目录中,或Mission Planner地面站文档文件夹中的 sitl/logs 目录下。Block Flash 日志存储在 blackbox.bin 文件中。您也可以使用 GCS 通过 MAVLink 访问日志,但直接访问 logs/ 目录中的 SD 卡模拟日志通常更为方便。

为使您的日志井井有条,建议您使用"-aircraft NAME "选项启动 SITL。这将创建一个名为 NAME 的子目录,其中的飞行日志将按日期排列。每次模拟运行都会有自己的目录,其中包括飞行参数以及下载的航点和集结点。

载具状态图表

通过加载 MAVProxy,您可以创建输入、输出、内部变量等图表。 示意图 模块。

模块 负荷 示意图

然后就可以使用图形命令创建载具状态图。例如,在模拟过程中绘制 RC 通道 3 输入的图形:

示意图 RC_CHANNELS.channel3_raw

与大多数命令一样,您可以键入 示意图 然后双击选项卡查看可用的补全。在上面的示例中 RC_CHANNELS 组包含 16 个 rc 通道,因此键入 示意图 RC_CHANNELS然后双击选项卡就会显示这些内容。

由于这些别名键入起来较长,MAVProxy 允许创建较短的别名。在 ArduPilot 源代码树中的 Tools/vagrant 子目录下名为 mavinit.scr.如果将该文件复制到主目录并重命名为 .mavinit.scr它将用于 MAVProxy 的 初始化。常见的有 g 为图形、 grc 来绘制 RC 输入的图形、 gservo8 来绘制前 8 个输出通道的图形,而无需输入 8 次长项名等。使用该别名初始化文件还有一个好处,即启动时自动加载图形模块,因此无需加载。

Mission Planner地面站允许使用 "数据 "选项卡地图屏幕中的 "调整 "框绘制图表。选中该框将打开一个图表屏幕。双击该框将弹出一个选择对话框,显示要绘制的信息/数据。

使用操纵杆

在 SITL 中使用操纵杆输入可能非常有用。操纵杆可以是真正的遥控发射机,带有用于教练端口的 USB 加密狗,也可以是类似 RealFlight 互联控制器或其他各种操纵杆设备。

在使用手柄支持之前,你可能需要删除 Linux 上 python-pygame 手柄驱动程序中的调试语句。如果不这样做,你可能会看到类似下面这样的大量调试输出:

SDL_JoystickGetAxis 价值:-32768:

要删除此调试行,请运行此命令:

苏都 欙腓 -i 's/SDL_JoystickGetAxis value/\x00DL_JoystickGetAxis value/g'; /我们/lib/蟒蛇2.7/地区-套餐/pygame/操纵杆.那么

注意,这必须是一长段命令行。请忽略 wiki 中的换行说明。如果您已使用 ArduPilot 代码编译环境设置说明安装了操纵杆支持,则可能不需要此操作。

然后在 MAVProxy 中运行操纵杆:

模块 负荷 操纵杆

如果您想添加对新操纵杆类型的支持,则需要按照以下步骤为其添加文件 说明 .请注意,如果您的操纵杆已经支持该功能,您也可以使用这些信息自定义操纵杆的操作。只需适当修改文件即可。

要在 Windows 下的Mission Planner地面站中使用操纵杆,请务必使用 Window 的游戏控制器控制面板设置操纵杆,然后在Mission Planner地面站 DATA 屏幕的 "操作 "选项卡下单击 "操纵杆",然后设置轴和按钮并启用。请参见 操纵杆/游戏板 了解更多信息。