设置多飞行器PX4模拟#
PX4 SITL堆栈附带一个名为sitl_multiple_run.sh
的shell脚本,用于运行多个PX4二进制实例。这将允许SITL堆栈在从4560开始的多个TCP端口上监听来自多个AirSim飞行器的连接。然而,提供的脚本不允许我们查看PX4控制台。如果您想手动运行实例并能够查看每个实例的控制台(推荐),请参阅此部分
设置多个PX4软件在环(SITL)实例#
注意,在尝试运行多个PX4实例之前,您必须按照此处所示,使用make px4_sitl_default none_iris
构建PX4。
-
从您的bash(或Cygwin)终端进入PX4固件目录,并运行
sitl_multiple_run.sh
脚本,同时指定您需要的飞行器数量
这将启动多个实例,它们监听TCP端口4560到4560+i,其中“i”是指定的飞行器/实例数量cd PX4-Autopilot ./Tools/sitl_multiple_run.sh 2 # 2 here is the number of vehicles/instances
-
您应该会收到一条确认消息,表明旧实例已停止,新实例已启动
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
-
现在编辑AirSim设置文件,以确保您为设置的飞行器数量匹配了TCP端口设置,并确保两个飞行器不会在同一点生成。
例如,这些设置将生成两架PX4多旋翼飞行器,其中一架将尝试连接到端口
4560
的PX4 SITL,另一架连接到端口4561
。它还确保飞行器在0,1,0
和0,-1,0
生成,以避免碰撞
您可以添加两架以上的飞行器,但您需要确保调整每个飞行器的TCP端口(例如:飞行器3的端口将是{ "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 } } }
4562
,依此类推...)并调整生成点。 -
现在运行您的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
如果您没有看到这些消息,请检查您的端口设置。
-
您还应该能够在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实例。
- 从您的bash(或Cygwin)终端进入PX4目录并获取脚本(将它们放在PX4目录中名为Scripts的子目录中,如所示)
注意 shell脚本要求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
Scripts
和Firmware
目录位于同一父目录中。此外,您可能需要通过运行chmod +x sitl_kill.sh
和chmod +x run_airsim_sitl.sh
使脚本可执行。 -
运行
sitl_kill.sh
脚本以终止所有活动的PX4 SITL实例./sitl_kill.sh
-
运行
run_airsim_sitl.sh
脚本,同时指定您要在当前终端窗口中运行哪个实例(第一个实例编号为0)./run_airsim_sitl.sh 0 # first instance = 0
您应该会看到PX4实例开始并等待AirSim的连接,就像单个实例一样。
4. 打开一个新终端,进入Scripts目录并启动下一个实例______ __ __ ___ | ___ \ \ \ / / / | | |_/ / \ 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
cd PX4 cd Scripts ./run_airsim_sitl.sh 1 # ,2,3,4,..,etc
-
根据您要启动的实例数量重复步骤4
-
运行您的Unreal AirSim环境,它应该通过TCP连接到SITL PX4(假设您的settings.json文件有正确的端口)。