- utils/task_runner: 6态状态机(WAIT→ARM_TAKEOFF→GOTO(L2)→TRACK(L1)→APPROACH→RTL) + 编排器(快照采集/状态动作) + 双层日志(事件JSONL/遥测CSV) + 吊舱控制指令(0x07/0x0F/0x0E/0x08) - pod_bridge: ground_link 地面坐标UDP注入(超龄判无效,无激光替代表4); set_heading_servo_enabled() 运行时L1/L2切换(切换即reset清积分防输出跳变); pod_locked 提为公共门控; config 新增 ground_inject 段 - virtual_pod 模拟吊舱(无电机语义) + verify_px4 增量④仅飞控验证 + pod_sitl_test L1 SITL全流程(飞行编排不塞进 run_bridge, 保持纯offboard闭环入口) - 入口: task_runner_sitl(VirtualPod+虚拟目标, SITL端到端跑通约1m24s) / task_runner_real(真串口+UDP注入+吊舱控制) - 地面站 ground_station: 坐标注入 + 状态可视化(Flask) - S1标定回填(2026-10-09): beta_sign=+1 / alpha_sign=-1, 加标定回归测试守护 - 新增测试: task_runner x4 + ground_link/virtual_pod*/bridge/px4_gateway 增量; 全量 483 passed - 文档: 预定流程(需求) + 预定流程-操作指南(操作/待办) + L1方案补S1结论与实现状态
95 lines
2.6 KiB
JSON
95 lines
2.6 KiB
JSON
{
|
||
"_comment": "吊舱↔PX4 桥接配置。heading_servo.enabled=true → 走 L1 航向伺服(TrackingControlLaw);tracking 段为 L1 控制律参数(与 visual_track_control 同结构,各分组须齐全)。S1 台架标定(2026-10-09):目标在左下时 off_target_x/y 均为负 → 吊舱 X 轴右正(与控制律 β 同向)故 beta_sign=+1;Y 轴上正(与控制律 α 下正相反)故 alpha_sign=-1。厂商已确认本版电机无用 → beta_from_frame/alpha_from_frame 恒 false(框架角路径仅留作将来装电机的预留)。heading.gain 等增益仍为占位,须 S2 干跑验证方向与量级后方可实飞。",
|
||
|
||
"pod_serial": {
|
||
"port": "",
|
||
"baudrate": 115200
|
||
},
|
||
"px4": {
|
||
"connection_string": "udp://:14540"
|
||
},
|
||
"link": {
|
||
"attitude_downlink_hz": 20.0,
|
||
"telemetry_timeout_ms": 500,
|
||
"require_laser_valid": false
|
||
},
|
||
"guidance": {
|
||
"frequency_hz": 10.0,
|
||
"target_stale_ms": 1000,
|
||
"position_stale_ms": 1000,
|
||
"stop_radius_m": 5.0,
|
||
"max_speed_mps": 5.0,
|
||
"speed_kp": 0.5,
|
||
"speed_ki": 0.0,
|
||
"speed_kd": 0.0,
|
||
"speed_integral_limit": 0.0,
|
||
"speed_derivative_filter_coef": 0.0,
|
||
"speed_slew_mps2": 2.0,
|
||
"max_yaw_rate_dps": 30.0,
|
||
"yaw_kp": 1.0,
|
||
"yaw_slew_dps2": 60.0
|
||
},
|
||
|
||
"heading_servo": {
|
||
"enabled": true,
|
||
"beta_sign": 1,
|
||
"alpha_sign": -1,
|
||
"beta_from_frame": false,
|
||
"beta_from_off_target": true,
|
||
"alpha_from_frame": false,
|
||
"alpha_from_off_target": true,
|
||
"vertical_enabled": true,
|
||
"require_vision": false
|
||
},
|
||
|
||
"tracking": {
|
||
"control": {
|
||
"frequency_hz": 20.0,
|
||
"visual_stale_ms": 200,
|
||
"distance_stale_ms": 500,
|
||
"attitude_stale_ms": 300
|
||
},
|
||
"camera": {
|
||
"image_width": 1920,
|
||
"image_height": 1080,
|
||
"fov_h_deg": 60.0,
|
||
"fov_v_deg": 35.0
|
||
},
|
||
"heading": {
|
||
"mode": "rate",
|
||
"gain": 1.0,
|
||
"yaw_rate_limit_dps": 20.0,
|
||
"yaw_slew_limit_dps2": 40.0
|
||
},
|
||
"vertical": {
|
||
"vz_gain_mps_per_deg": 0.05,
|
||
"vz_limit_mps": 0.5
|
||
},
|
||
"distance": {
|
||
"d_exp_m": 10.0,
|
||
"kp": 0.5,
|
||
"ki": 0.0,
|
||
"kd": 0.0,
|
||
"integral_limit": 0.0,
|
||
"derivative_filter_coef": 0.0,
|
||
"approach_velocity_limit_mps": 0.5,
|
||
"retreat_velocity_limit_mps": 0.3,
|
||
"no_distance_action": "slow_approach",
|
||
"no_distance_approach_limit_mps": 0.2,
|
||
"no_distance_exit_grace_ms": 3000
|
||
},
|
||
"accel_limit": {
|
||
"ax_mps2": 1.0,
|
||
"ay_mps2": 1.0,
|
||
"az_mps2": 0.5
|
||
}
|
||
},
|
||
|
||
"ground_inject": {
|
||
"enabled": false,
|
||
"host": "0.0.0.0",
|
||
"port": 14555,
|
||
"timeout_ms": 5000
|
||
}
|
||
}
|