se3_lee 是一个基于 ROS + MAVROS 的四旋翼几何轨迹跟踪控制节点,适用于 PX4 Offboard 模式。控制器核心包含:
- 几何姿态控制(SE(3) 框架)
- 位置/速度反馈 + 参考加速度前馈
- 旋翼阻力补偿(rotor drag compensation)
- 将期望加速度映射为姿态与机体系角速度,再输出推力与角速度命令
节点内置状态机流程:等待 home pose -> 任务执行 -> 降落/着陆(含越界应急分支)。
- 接收轨迹并进行跟踪(支持
reference/setpoint与command/trajectory) - 支持仿真模式下自动 Offboard 与自动解锁
- 支持地理围栏保护(越界进入应急状态)
- 支持
/land服务触发降落 - 支持
dynamic_reconfigure在线调节关键增益与最大反馈加速度
reference/setpoint(geometry_msgs/TwistStamped)reference/yaw(std_msgs/Float32)command/trajectory(trajectory_msgs/MultiDOFJointTrajectory)mavros/state(mavros_msgs/State)mavros/local_position/pose(geometry_msgs/PoseStamped)mavros/local_position/velocity_local(geometry_msgs/TwistStamped)
command/bodyrate_command(mavros_msgs/AttitudeTarget)reference/pose(geometry_msgs/PoseStamped)mavros/setpoint_position/local(geometry_msgs/PoseStamped)mavros/companion_process/status(mavros_msgs/CompanionProcessStatus)se3_lee/state(std_msgs/Int8)
/land(std_srvs/SetBool)trigger_rlcontroller(std_srvs/SetBool)
节点私有参数(~ 命名空间):
- 基础控制
mavnamectrl_mode(默认ERROR_QUATERNION)enable_simdebugvelocity_yaw
- 动力学与限制
max_accmax_velyaw_headingdrag_dx、drag_dy、drag_dzattctrl_constantnormalizedthrust_constantnormalizedthrust_offset
- 位置/速度反馈增益
Kp_x、Kp_y、Kp_zKv_x、Kv_y、Kv_z
- 任务与安全
takeoff_heightgeo_fence/x、geo_fence/y、geo_fence/zposehistory_window
max_accKp_x、Kp_y、Kp_zKv_x、Kv_y、Kv_z
该控制器采用“先算期望加速度,再映射到姿态/角速度”的结构。核心步骤为:
- 由位置、速度误差计算反馈加速度
- 叠加参考加速度前馈
- 引入旋翼阻力补偿项
- 从期望加速度和期望航向求期望姿态,再由姿态控制器输出角速度与推力
可写为:
其中阻力补偿在实现中体现为:
利用
推力输出经过线性归一化并裁剪到 [0,1]:
对应参数为 normalizedthrust_constant 与 normalizedthrust_offset。这两个参数与具体机体推重比、桨电配置强相关。
max_acc:限制反馈加速度模长,防止大误差下命令过激geo_fence/*:越界切入应急分支- 应急分支下输出回 home pose 的位置目标,便于人工接管或系统降落
在工作空间根目录执行:
cd ~/catkin_ws
catkin build se3_lee
source devel/setup.bash推荐使用包内 launch:
roslaunch se3_lee sitl_trajectory_track_circle.launch或:
roslaunch se3_lee trajectory_controller.launch上述 launch 会完成:
- 启动
se3_lee_node - 将
command/bodyrate_command重映射到/mavros/setpoint_raw/attitude - 启动 MAVROS/PX4(对应 launch 场景)
- 可选启动
rqt_reconfigure进行在线调参
rosrun se3_lee se3_lee_node _enable_sim:=true _takeoff_height:=2.0- 先调平移外环:
Kp_*决定“拉回力度”,Kv_*决定阻尼 - 抖动明显时先降
Kv_*与max_acc,确认不是推力映射过激 - 跟踪偏慢时先增
Kp_*,再配合Kv_*抑制过冲 - 高速轨迹误差大时检查
drag_d*与normalizedthrust_*是否匹配机体 - 若航向出现不稳定,先固定
velocity_yaw=false并单独调 yaw 参考
- T. Lee, M. Leok, and N. H. McClamroch, Geometric Tracking Control of a Quadrotor UAV on SE(3), CDC, 2010.
- M. Faessler, A. Franchi, and D. Scaramuzza, Differential Flatness of Quadrotor Dynamics Subject to Rotor Drag for Accurate Tracking of High-Speed Trajectories, IEEE RA-L, 2018.