Skip to content

Drones Shaking Violently #179

Description

@cl-cv

Hi, I am running into an issue where I am seeing certain vehicles in my Unreal world shake violently when hovering.

I am running:

  • The latest ProjectAirSim on main branch
  • Unreal Engine Release 5.7

I have a system in place to run an arbitrary number of Ardupilot SITLs connected to Unreal Engine via ProjectAirSim. My vehicles are loaded into the Unreal World using a slightly modified version of client/python/example_user_scripts_ardupilot_ardupilot_quadrotor.py. The quadrotor .jsonc file is essentially unchanged, and the scene .jsonc file has only been edited to adjust clocking to make Ardupilot happy (for this and also for when I have run Gazebo in the past, I have had to use 1 ms steps, otherwise Ardupilot yells about main loop slow).

"clock": {
    "type": "steppable",
    "step-ns": 1000000,
    "real-time-update-rate": 1000000,
    "pause-on-start": false
 }

The parameters loaded onto each Ardupilot SITL are

OA_TYPE 3
OA_MARGIN_MAX 5

SERVO9_FUNCTION 120
NTF_LED_TYPES   123847
NTF_LED_LEN     1

SCR_ENABLE 1

# This file is used to optimally fly the Ardupilot quadrotor with the Project AirSim script (ardupilot_quadrotor.py).
# Use it running the following command: python sim_vehicle.py -v ArduCopter -f airsim-copter --add-param-file=<path_to_this_file>
# For more information go to Project AirSim Documentation --> Guides --> Configure AirSim Controller 

# For more information about the following parameters see https://ardupilot.org/copter/docs/parameters-Copter-stable-V4.3.4.html
# Roll axis rate controller PID gain
ATC_RAT_RLL_P   0.733
ATC_RAT_RLL_I   0.733
ATC_RAT_RLL_D   0.0056

# Roll axis angle controller P gain
ATC_ANG_RLL_P   36.000

# Acceleration Max for Roll
ATC_ACCEL_R_MAX 374870


# Pitch axis rate controller PID gain
ATC_RAT_PIT_P   0.768
ATC_RAT_PIT_I   0.768
ATC_RAT_PIT_D   0.0050

# Pitch axis angle controller P gain
ATC_ANG_PIT_P   36.00

# Acceleration Max for Pitch
ATC_ACCEL_P_MAX 348730


# Yaw axis rate controller PID gain.
ATC_RAT_YAW_P   2.000
ATC_RAT_YAW_I   0.200
ATC_RAT_YAW_D   0.0000

# Yaw axis angle controller P gain
ATC_ANG_YAW_P   3.429

# Acceleration Max for Yaw
ATC_ACCEL_Y_MAX 2893

And I create my SITLs in a custom server with

{"bash", "-c",
   "/ardupilot/Tools/autotest/sim_vehicle.py -v ArduCopter -f airsim-copter "
    "--no-mavproxy -I" + std::to_string(rxdMsg.sysid) + " --add-param-file " + activeParamFileInContainer +
     " --no-rebuild --sysid " + std::to_string(rxdMsg.sysid)};

On system bootup, I generate SITL heartbearts for N-many drones, starting from sysid 3 and with 1 second delays between each startup. Once all heartbeats are started up, I see ProjectAirSim load all of my vehicles into the world properly. Now say I have loaded 10 vehicles (sysids 3 - 12). If I make sysid 12 takeoff, it looks fine when hovering. If I make sysid 3 takeoff, it vibrates violently while hovering (seemingly more violently based on the number of other vehicles in the world). And if I go down the line making each other sysid takeoff, the vibrations generally just become more and more violent as I approach sysid 3. It also doesn't seem to matter in what order I make them take off. The lower sysids always vibrate the most.

While it does seem that the vibrations are made worse by running my system with more and more vehicles, I also noted that if I only run with 1 vehicle, that vehicle still vibrates fairly badly while hovering, especially compared to sysid 12 in the example above. As a result, I am having a hard time drawing conclusions on why this is happening and what is causing it. Additionally, I never saw this shaking when I was using Gazebo as my physics engine.

Any thoughts would be greatly appreciated.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions