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> 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
相关产品推荐
相关产品推荐

