General
I’m trying to simulate the swarming flight using 5 SITL with Morse following official document.
It has been successful to launch 5 SITL instances and connect to the MavProxy instance on a one-to-one basis. If I use MavProxy / SITL without using Morse as a simulator and issue Arm / Takeoff command for each of the 5 SITL instances, all drones will take off.
What I’m not clear is that when I use MavProxy / SITL / Morse, the Arm command succeeds only on the last connected SITL instance, but other drones violate the Prearm check and cannot Arm.
Steps to reproduce
-
Launch the Morse / Generate 5 SITL instances
morse run copter_swarm/copters.py
sh copter_swarm/start_copters_tcp.sh
copter_swarm/copters.py
is based on rover_follow.py and quadcopter.py, with the Rover description replaced by the QuadCopter onecopter_swarm/start_copters_tcp.sh
is based on start_fllow.sh.
It replaces the parm file and configuration with Copter’s and executes all sitl in a for block.
Sitl execute command:build/sitl/bin/arducopter -S --model "morse-quad:127.0.0.1:$port1:$port2" --speedup 1 --instance $(expr $i - 1) --defaults Tools/autotest/default_params/copter.parm &
The morse-quad’s port is shifted by 2 for each instance like 60000:60001, 60002:60003…
5 drones are generated in Morse
-
Open 5 consoles and run mavproxy instance on each consoles.
mavproxonsole --out=127.0.0.1:14550 --out=127.0.0.1:14551 --master=tcp:127.0.0.1:5760 --sitl=127.0.0.1:5501
The master’s port is shifted by 10 for each instance like 5760, 5770… -
Issue
throttle arm
on each consoles. The Arm command succeeds only on the last connected SITL instance.
Other SITL instances dump the EKF error.APM: PreArm: EKF2 Roll/Pitch inconsistent by 15 deg APM: PreArm: EKF2 Roll/Pitch inconsistent by 12 deg APM: PreArm: EKF2 Yaw inconsistent by 79 deg APM: PreArm: EKF2 Yaw inconsistent by 34 deg
Environment
Ubuntu 18.04