You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PX4Multirotor起飞时意外触发FailSafe模式如何解决?

修复AirSim+PX4添加CV逻辑后错误触发Failsafe的问题

我正在用AirSim和PX4开展无人机CV功能测试,所有软件安装配置正常,AirSim官方示例脚本可正常运行。运行AirSim\PythonClient\multirotor\path.py演示脚本时,无人机能准确执行路径指令,修改路径后也无异常,但添加摄像头帧处理逻辑后,无人机起飞即冻结并提示“Failsafe activated”。我已将无人机所有安全相关参数设为0,且在QGroundControl中完成相同设置,问题仍未解决。

环境配置

  • Windows 11(i7 14代 + RTX 4070)+ WSL2(Ubuntu 22)运行PX4
  • UE v4.27
  • AirSim v1.7.0
  • QGroundControl v4.3.0
  • PX-Autopilot v1.14.0

AirSim settings.json 配置

{  
  "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/main/docs/settings.md",  
  "SimMode": "Multirotor",  
  "ClockType": "SteppableClock",  
  "SettingsVersion": 1.2,  
  "CameraDefaults": {  
    "CaptureSettings": [  
      {  
        "ImageType": 0,  
        "Width": 640,  
        "Height": 480  
      },  
      {  
        "ImageType": 3,  
        "Width": 640,  
        "Height": 480  
      },  
      {  
        "ImageType": 5,  
        "Width": 640,  
        "Height": 480  
      }  
    ]  
  },  
  "Recording": {  
    "RecordOnMove": false,  
    "RecordInterval": 0.033,  
    "Folder": "",  
    "Enabled": false,  
    "Cameras": [  
      {  
        "CameraName": "high_res",  
        "ImageType": 0,  
        "PixelsAsFloat": false,  
        "VehicleName": "PX4",  
        "Compress": true  
      }  
    ]  
  },  
  "Vehicles": {  
    "PX4": {  
      "VehicleType": "PX4Multirotor",  
      "UseSerial": false,  
      "UseTcp": true,  
      "LockStep": true,  
      "QgcHostIp": "",  
      "TcpPort": 4560,  
      "ControlIp": "***",  
      "ControlPort": 14580,  
      "LocalHostIp": "***",  
      "Parameters": {  
        "SYS_MC_EST_GROUP": 2,  
        "MPC_XY_VEL_MAX": 20,  
        "MPC_XY_CRUISE": 5,  
        "COM_OBL_RC_ACT": 5,  
        "COM_RCL_EXCEPT": 4,  
        "NAV_RCL_ACT": 0,  
        "NAV_DLL_ACT": 0,  
        "GF_ACTION": 0  
      },  
      "Sensors": {  
        "barometer": {  
          "SensorType": 1,  
          "Enabled": true,  
          "pressure_factor_sigma": 0.0001815  
        }  
      },  
      "Cameras": {  
        "track": {  
          "CaptureSettings": [  
            {  
              "ImageType": 0,  
              "Width": 640,  
              "Height": 480  
            }  
          ],  
          "X": 0.50,  
          "Y": 0.0,  
          "Z": 0.10,  
          "Pitch": 0.0,  
          "Roll": 0.0,  
          "Yaw": 0.0  
        }  
      },  
      "Logs": "C:\\<bla bla bla>\\Documents\\AirSimLogs"  
    }  
  }
}

基于path.py修改的Python脚本片段

# imports

def get_image_from_drone_as_np_array(_client: MultirotorClient, image_as_np: bool = True):    
    images: List[ImageResponse] = client.simGetImages(
        [airsim.ImageRequest("0", airsim.ImageType.Scene, False, False)]
    )

    image: ImageResponse = images[0]

    p_image = Image.frombytes(
        mode="RGB",
        size=SHAPE,
        data=image.image_data_uint8
    )    
    if image_as_np:
        return np.array(p_image)
    else:
        return p_image

client = airsim.MultirotorClient()
client.confirmConnection()
client.enableApiControl(True)

print("arming the drone...")
client.armDisarm(True)

state = client.getMultirotorState()
if state.landed_state == airsim.LandedState.Landed:
    print("taking off...")
    client.takeoffAsync().join()
else:
    client.hoverAsync().join()

time.sleep(1)

state = client.getMultirotorState()
if state.landed_state == airsim.LandedState.Landed:
    print("take off failed...")
    sys.exit(1)

z = -5
print("make sure we are hovering at {} meters...".format(-z))
client.moveToZAsync(z, 1).join() # 调试时此处出现"Failsafe activated"提示

tracker = ObjectTracker(det_classes=["car"])

for i in range(TRACKING_STEPS):
    print(f"Tracking step {i}")
    image_p = get_image_from_drone_as_np_array(client, image_as_np=False)
    # 此处为CV处理逻辑

# 后续代码

PX4 日志

...______  __   __    ___| ___ \ \ \ / /   /   || |_/ /  \ V /   / /| ||  __/   /   \  / /_| || |     / /^\ \ \___  |\_|     \/   \/     |_/
px4 starting.

INFO  [px4] startup script: /bin/sh etc/init.d-posix/rcS 0env SYS_AUTOSTART: 10016INFO  [param] selected parameter default file parameters.bsonINFO  [param] importing from 'parameters.bson'INFO  [parameters] BSON document size 729 bytes, decoded 729 bytes (INT32:25, FLOAT:11)INFO  [param] selected parameter backup file parameters_backup.bsonINFO  [dataman] data manager file './dataman' size is 7872608 bytesINFO  [init] PX4_SIM_HOSTNAME: 172.19.208.1INFO  [simulator_mavlink] using TCP on remote host 172.19.208.1 port 4560WARN  [simulator_mavlink] Please ensure port 4560 is not blocked by a firewall.INFO  [simulator_mavlink] Waiting for simulator to accept connection on TCP port 4560INFO  [simulator_mavlink] Simulator connected on TCP port 4560.INFO  [lockstep_scheduler] setting initial absolute time to 1707899797857182 usWARN  [vehicle_angular_velocity] no gyro selected, using sensor_gyro_fifo:0 1310988INFO  [commander] LED: open /dev/led0 failed (22)WARN  [health_and_arming_checks] Preflight Fail: ekf2 missing dataINFO  [mavlink] mode: Normal, data rate: 4000000 B/s on udp port 18570 remote port 14550INFO  [mavlink] mode: Onboard, data rate: 4000000 B/s on udp port 14580 remote port 14540INFO  [mavlink] mode: Onboard, data rate: 4000 B/s on udp port 14280 remote port 14030INFO  [mavlink] mode: Gimbal, data rate: 400000 B/s on udp port 13030 remote port 13280INFO  [logger] logger started (mode=all)INFO  [logger] Start file log (type: full)INFO  [logger] [logger] ./log/2024-02-14/08_36_37.ulgINFO  [logger] Opened full log file: ./log/2024-02-14/08_36_37.ulgINFO  [mavlink] MAVLink only on localhost (set param MAV_{i}_BROADCAST = 1 to enable network)INFO  [mavlink] MAVLink only on localhost (set param MAV_{i}_BROADCAST = 1 to enable network)INFO  [px4] Startup script returned successfullypxh&gt; INFO  [tone_alarm] home setINFO  [mavlink] partner IP: 172.19.208.1INFO  [commander] Ready for takeoff!INFO  [commander] Armed by external commandINFO  [tone_alarm] arming warningINFO  [commander] Takeoff detectedWARN  [failsafe] Failsafe activatedINFO  [tone_alarm] battery warning (fast)...

核心问题

如何修复这种错误触发Failsafe的问题?

内容的提问来源于stack exchange,提问作者Andrey Kanevskoi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 04:47:05