将 SITL 与 Webots Python 结合使用¶
ArduPilot 基于 python- 的 Webots 实现是一种跨平台模拟工具,可在运行 ArduPilot 时避免现实生活中的崩溃风险。本页将介绍如何使用 ArduPilot 的 SITL 设置和使用 Webots,以及如何创建新的载具和世界。
安装¶
Webots 本身可从以下网址下载 www.cyberbotics.com.如果在安装过程中遇到任何问题,请参见 Webots 安装指南 以获得进一步指导。
备注
Webots python 实现是为 Webots 2023a 构建的,并不向后兼容。不过,新版本应该也能正常运行。
运行虹膜示例¶
以下假设您已经成功设置了 ArduPilot 开发环境(请参阅 编写代码).
运行 Webots 并打开
/path/to/ardupilot/libraries/SITL/examples/Webots_Python/worlds/iris.wbt
(文件
>;开放 世界
).如果一切正常,你应该能看到模拟时间在延长,控制台中也不会出现错误(红色警告即可)。使用以下命令运行 SITL,替换为
/path/to/
的本地绝对路径:/路/至/ardupilot/工具/自动测试/模拟载具.py -v ArduCopter -w --模型 网点-蟒蛇 --增加-停止-文件=/路/至/ardupilot/图书馆/SITL/例子/Webots_Python/参数/马兰花.调味料
警告
在 WSL2 中运行 SITL 和在 Windows 中运行 Webots 时,必须为 SITL 提供 Windows 的 IP,方法如下
--sim-address=172.x.x.1
到上述命令中。运行 ipconfig
在 cmd 中查找 WSL 适配器下的 IP。您可能还需要添加 WSL 的 IP,方法如下 主机名 -I
至 iris.wbt
所以看起来是这样的
光圈 {
控制器 "ardupilot_vehicle_controller";
控制器参数 [
"-电机";
"m1_motor、m2_motor、m3_motor、m4_motor";
"--sitl-address";
"172.x.x.x";
]
}
如果一切顺利,您将看到 已连接 至 ardupilot SITL
在 Webots 控制台中。此时,您就可以使用 MAVProxy(在 SITL 终端窗口中)或 GCS 驾驶无人机四处飞行了。
其他示例世界¶
iris.wbt
实现了一个基本的四旋翼飞行器。iris_camera.wbt
在四旋翼飞行器上安装摄像头。参见example_camera_receive.py
脚本文件夹中的"......",这是访问摄像机的一种方法。iris_depth_camera.wbt
实现了一种能看到深度而非颜色的摄像机。示例相机脚本也可以接收这些图像。pioneer3at.wbt
实现了先锋 3at 漫游器。运行 SITL 命令时,使用无人车UGV
而不是ArduCopter
和pioneer3at.parm
而不是iris.parm
.crazyflie.wbt
实现了 crazyflie 四旋翼飞行器。运行 SITL 命令crazyflie.parm
而不是iris.parm
.crazyflie_double.wbt
将两架 crazyflie 无人机组成一个蜂群。运行 SITL 命令时,使用crazyflie.parm
而不是iris.parm
并额外添加-n 2 --auto-sysid
.
创造新世界¶
创建一个新世界的方法是复制一个示例世界(如
iris.wbt
)并进行所需的更改。预建模型(称为
PROTOs可通过 Webots 直接添加),方法是按 CTRL+SHIFT+A
或直接将它们添加到世界文件中 (参见文档中的选项).
如果您想更进一步,请查看 Webots 教程.
备注
在每个新世界中设置的一个重要参数是 基本时间步
参数。该参数应设置为 1 或 2,因为它表示模拟在物理时间步之间应延迟多少毫秒。如果将该值设置得过高,会导致 ArduPilot 的主循环运行速度过慢。
创建新载具¶
Webots 中的 ArduPilot 载具是一个
机器人 对象,该对象使用
ardupilot_vehicle_controller.py
控制器(位于 控制器
目录)。该控制器在模拟启动时运行,负责连接 SITL 并向其传递 Webots 传感器信息。请注意,要做到这一点,它需要假设机器人对象有一个
加速计,
陀螺仪,
惯性单位和 全球定位系统.
要创建一个可以在多个世界中使用的新载体,就像 Iris 模型一样,我们可以创建一个 PROTO 文件,该文件将描述载具(机器人对象),并可导入任何世界。最简单的方法是复制 iris.proto
文件中的 原点
文件夹并编辑或删除组件(如螺旋桨、网格和扩展槽)。如果您想从头开始,可以查看
创建 PROTO 文件的文档.
特别值得一提的是,机器人对象有一个名为 控制器参数
参数在模拟运行时传递给控制器,允许我们指定载具的特征,如电机名称、数量和方向。可用参数的完整列表记录在
ardupilot_vehicle_controller.py
.