设置多飞行器PX4模拟#

PX4 SITL堆栈附带一个名为sitl_multiple_run.sh的shell脚本,用于运行多个PX4二进制实例。这将允许SITL堆栈在从4560开始的多个TCP端口上监听来自多个AirSim飞行器的连接。然而,提供的脚本不允许我们查看PX4控制台。如果您想手动运行实例并能够查看每个实例的控制台(推荐),请参阅此部分

设置多个PX4软件在环(SITL)实例#

注意,在尝试运行多个PX4实例之前,您必须按照此处所示,使用make px4_sitl_default none_iris构建PX4。

  1. 从您的bash(或Cygwin)终端进入PX4固件目录,并运行sitl_multiple_run.sh脚本,同时指定您需要的飞行器数量

    cd PX4-Autopilot
    ./Tools/sitl_multiple_run.sh 2    # 2 here is the number of vehicles/instances 
    这将启动多个实例,它们监听TCP端口4560到4560+i,其中“i”是指定的飞行器/实例数量

  2. 您应该会收到一条确认消息,表明旧实例已停止,新实例已启动

    killing running instances
    starting instance 0 in /cygdrive/c/PX4/home/PX4/Firmware/build/px4_sitl_default/instance_0
    starting instance 1 in /cygdrive/c/PX4/home/PX4/Firmware/build/px4_sitl_default/instance_1

  3. 现在编辑AirSim设置文件,以确保您为设置的飞行器数量匹配了TCP端口设置,并确保两个飞行器不会在同一点生成。

    例如,这些设置将生成两架PX4多旋翼飞行器,其中一架将尝试连接到端口4560的PX4 SITL,另一架连接到端口4561。它还确保飞行器在0,1,00,-1,0生成,以避免碰撞

    {
        "SettingsVersion": 1.2,
        "SimMode": "Multirotor",
        "Vehicles": {
            "Drone1": {
                "VehicleType": "PX4Multirotor",
                "UseSerial": false,
                "UseTcp": true,
                "TcpPort": 4560,
                "ControlPortLocal": 14540,
                "ControlPortRemote": 14580,
                "X": 0, "Y": 1, "Z": 0
            },
            "Drone2": {
                "VehicleType": "PX4Multirotor",
                "UseSerial": false,
                "UseTcp": true,
                "TcpPort": 4561,
                "ControlPortLocal": 14541,
                "ControlPortRemote": 14581,       
                "X": 0, "Y": -1, "Z": 0
            }
        }
      }
    您可以添加两架以上的飞行器,但您需要确保调整每个飞行器的TCP端口(例如:飞行器3的端口将是4562,依此类推...)并调整生成点。

  4. 现在运行您的Unreal AirSim环境,它应该通过TCP连接到SITL PX4。如果您在PX4控制台可见的情况下运行实例,您应该会看到每个SITL PX4窗口发出大量消息。具体来说,以下消息告诉您AirSim已正确连接且GPS融合稳定

    INFO  [simulator] Simulator connected on UDP port 14560
    INFO  [mavlink] partner IP: 127.0.0.1
    INFO  [ecl/EKF] EKF GPS checks passed (WGS-84 origin set)
    INFO  [ecl/EKF] EKF commencing GPS fusion

    如果您没有看到这些消息,请检查您的端口设置。

  5. 您还应该能够在SITL模式下使用QGroundControl。请确保没有插入Pixhawk硬件,否则QGroundControl将选择使用它。请注意,由于我们没有物理板,遥控器无法直接连接到它。因此,替代方案是使用Xbox 360控制器或通过USB连接您的遥控器(例如,对于FrSky Taranis X9D Plus)或使用训练器USB电缆连接到您的PC。这使您的遥控器看起来像一个操纵杆。您需要在QGroundControl中进行额外的设置才能使用虚拟操纵杆进行遥控。除非您计划在AirSim中手动驾驶无人机,否则无需这样做。使用Python API进行自主飞行不需要遥控器,请参阅无遥控器

使用PX4控制台启动SITL实例#

如果您想启动您的SITL实例并能够查看PX4控制台,您将需要运行此处找到的shell脚本,而不是sitl_multiple_run.sh。以下是操作方法:

注意 此脚本还假设PX4已按照此处所示,使用make px4_sitl_default none_iris构建,然后尝试运行多个PX4实例。

  1. 从您的bash(或Cygwin)终端进入PX4目录并获取脚本(将它们放在PX4目录中名为Scripts的子目录中,如所示)
    cd PX4
    mkdir -p Scripts
    cd Scripts
    wget https://github.com/microsoft/AirSim/raw/main/PX4Scripts/sitl_kill.sh
    wget https://github.com/microsoft/AirSim/raw/main/PX4Scripts/run_airsim_sitl.sh
    注意 shell脚本要求ScriptsFirmware目录位于同一父目录中。此外,您可能需要通过运行chmod +x sitl_kill.shchmod +x run_airsim_sitl.sh使脚本可执行。
  2. 运行sitl_kill.sh脚本以终止所有活动的PX4 SITL实例

    ./sitl_kill.sh

  3. 运行run_airsim_sitl.sh脚本,同时指定您要在当前终端窗口中运行哪个实例(第一个实例编号为0)

    ./run_airsim_sitl.sh 0 # first instance = 0

    您应该会看到PX4实例开始并等待AirSim的连接,就像单个实例一样。

    ______  __   __    ___
    | ___ \ \ \ / /   /   |
    | |_/ /  \ V /   / /| |
    |  __/   /   \  / /_| |
    | |     / /^\ \ \___  |
    \_|     \/   \/     |_/
    
    px4 starting.
    INFO  [px4] Calling startup script: /bin/sh /cygdrive/c/PX4/home/PX4/Firmware/etc/init.d-posix/rcS 0
    INFO  [dataman] Unknown restart, data manager file './dataman' size is 11798680 bytes
    INFO  [simulator] Waiting for simulator to connect on TCP port 4560
    4. 打开一个新终端,进入Scripts目录并启动下一个实例
    cd PX4
    cd Scripts
    ./run_airsim_sitl.sh 1  # ,2,3,4,..,etc

  4. 根据您要启动的实例数量重复步骤4

  5. 运行您的Unreal AirSim环境,它应该通过TCP连接到SITL PX4(假设您的settings.json文件有正确的端口)。