将 SITL 与 Webots Python 结合使用

ArduPilot 基于 python- 的 Webots 实现是一种跨平台模拟工具,可在运行 ArduPilot 时避免现实生活中的崩溃风险。本页将介绍如何使用 ArduPilot 的 SITL 设置和使用 Webots,以及如何创建新的载具和世界。


安装

Webots 本身可从以下网址下载 www.cyberbotics.com.如果在安装过程中遇到任何问题,请参见 Webots 安装指南 以获得进一步指导。

备注

Webots python 实现是为 Webots 2023a 构建的,并不向后兼容。不过,新版本应该也能正常运行。

运行虹膜示例

以下假设您已经成功设置了 ArduPilot 开发环境(请参阅 编写代码).

  1. 运行 Webots 并打开 /path/to/ardupilot/libraries/SITL/examples/Webots_Python/worlds/iris.wbt (文件 >; 开放 世界).如果一切正常,你应该能看到模拟时间在延长,控制台中也不会出现错误(红色警告即可)。

  2. 使用以下命令运行 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,方法如下 主机名 -Iiris.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 而不是 ArduCopterpioneer3at.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.