记录无人机的航点任务



航点的是怎么影响无人机的姿态的?

打个断点停在上一个航点结束 下一个开始


计算以当前点为原点的下一个目标点的向量值

向量的三个分量:

  • x:北向距离(米)

  • y:东向距离(米)

  • z:垂直距离(米,向下为正)

这个方向向量通常用于航点导航中:

  1. 计算航向角

    float target_bearing = atan2(destination_vector.y, destination_vector.x);

  2. 计算距离

    float leg_length = destination_vector.length();

  3. 计算路径跟踪误差

    // 计算当前位置到目标航线的偏移 Vector3f position_error = current_pos - _destination_ned_m; float crosstrack_error = position_error.x * sin(leg_bearing) - position_error.y * cos(leg_bearing);

  4. 计算速度前馈

    // 将方向向量归一化后作为期望速度方向 Vector3f target_velocity = destination_vector.normalized() * wp_speed;





航点影响_ang_vel_target_rads

void ModeAuto::nav_attitude_time_run()

具体来说:

  1. 航点 → 位置控制器AC_WPNav 将航点位置传递给 AC_PosControl

  2. 位置控制器 → 目标姿态角AC_PosControl::NE_update_controller() 计算出 _roll_target_rad 和 _pitch_target_rad

  3. 目标姿态角 → 姿态控制器ModeAuto 或其他飞行模式调用 attitude_control->input_euler_angle_roll_pitch_yaw_rad(),传入目标横滚/俯仰/偏航角。

  4. 姿态控制器 → _ang_vel_target_rads:在 input_euler_angle_roll_pitch_yaw_rad() 中,attitude_command_model() 计算角度误差对应的角速度,最终通过 euler_derivative_to_body() 转换为机体角速度,存入 _ang_vel_target_rads

     

_euler_angle_target_rad 来自与_ang_vel_target_rads

看下roll 
(gdb)  p ((AP_MotorsMatrix*)copter.motors)._roll_in
$16 = 0.383552969

    roll_thrust = (_roll_in + _roll_in_ff) * compensation_gain;

_roll_in =>

 _motors.set_roll(get_rate_roll_pid().update_all(ang_vel_body.x, gyro_rads.x,  dt, _motors.limit.roll, _pd_scale.x, _i_scale.x) + _actuator_sysid.x);

PID:

get_rate_roll_pid().update_all(ang_vel_body.x, gyro_rads.x,  dt, _motors.limit.roll, _pd_scale.x, _i_scale.x) 

 

变量含义
_target滤波后的目标值
_error滤波后的误差值(target - measurement)
_derivative滤波后的误差导数(D 项)
_integrator积分项累积值(I 项)
_target_derivative目标值导数(用于 D_FF 前馈)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值