赞
踩
本文为学习ardupilot官网文档做的笔记。
ardupilot总体架构
ArduCopter架构
手动模式架构(Stabilize、Acro、Drift)
自动模式架构(RTL、Guided、Auto)
Copter姿态控制流程
AP控制器将角度误差(目标角度和实际角度之间的差异)转换为所需的转速,然后PID控制器将转速误差转换为高级电机命令。
手动模式流程
angle_ef_roll_pitch_rate_ef_yaw() :这接受滚转和俯仰的NED角度,以及偏航的NED速率。例如,提供此功能 roll = -1000, pitch = -1500, yaw = 500 表示车辆向左倾斜 10 度,向前倾斜 15 度并以 5 度/秒的速度向右旋转。
angle_ef_roll_pitch_yaw() :这接受用于滚转、俯仰和偏航的NED角度。与上面类似,除了提供 500 的偏航意味着将车辆旋转到北方以东 5 度。
rate_bf_roll_pitch_yaw() :这接受滚转、俯仰和偏航的机体系速率(以度/秒为单位)。例如,提供这个函数 roll = -1000, pitch = -1500, yaw = 500 将导致车辆以 10 度/秒的速度向左滚动,以 15 度/秒的速度向前俯仰并以 5 度/秒的速度绕车辆的 z 轴旋转。
在对这些函数进行任何调用后,将调用 AC_AttitudeControl::rate_controller_run() 。 这会将上面列出的方法的输出转换为滚转、俯仰和偏航输入,这些输入通过它的set_roll、set_pitch、set_yaw 和 set_throttle 方法发送到 AP_Motors库。
如果调用了 AC_PosControl 中的任何方法,则飞行模式代码也必须调用 AC_PosControl::update_z_controller() 方法。这将运行 z 轴位置控制 PID 循环并将低级油门级别发送到 AP_Motors 库。如果调用任何 xy 轴方法,则必须调用 AC_PosControl::update_xy_controller() 。
Copter电机库
Motors库的类层次结构图
电机库的输入
姿态控制器向电机库提供高级滚转、俯仰、偏航和油门命令,范围为-1到1(滚转、俯仰和偏航)与0到1(油门)。姿态控制器发出这些命令的确切位置可以在AC_AttitudeControl_Multi的rate_controller_run()函数中找到。
void AC_AttitudeControl_Multi::rate_controller_run() { Vector3f gyro_latest = _ahrs.get_gyro_latest(); _motors.set_roll(rate_target_to_motor_roll(gyro_latest.x, _rate_target_ang_vel.x)); _motors.set_pitch(rate_target_to_motor_pitch(gyro_latest.y, _rate_target_ang_vel.y)); _motors.set_yaw(rate_target_to_motor_yaw(gyro_latest.z, _rate_target_ang_vel.z));
所用方法定义见AP_Motors_Class.h
// set_roll, set_pitch, set_yaw, set_throttle void set_roll(float roll_in) { _roll_in = roll_in; }; // range -1 ~ +1 void set_pitch(float pitch_in) { _pitch_in = pitch_in; }; // range -1 ~ +1 void set_yaw(float yaw_in) { _yaw_in = yaw_in; }; // range -1 ~ +1 void set_throttle(float throttle_in) { _throttle_in = throttle_in; }; // range 0~1
电机库的作用
// structure for holding motor limit flags struct AP_Motors_limit { uint8_t roll_pitch : 1; // we have reached roll or pitch limit uint8_t yaw : 1; // we have reached yaw limit uint8_t throttle_lower : 1; // we have reached throttle's lower limit uint8_t throttle_upper : 1; // we have reached throttle's upper limit } limit;
Copter位置控制和导航
类层次结构和描述
在最高级别,AC_WPNav、AC_Circle 和 AC_Loiter 库是对等的,都使用 AC_PosControl 库
AC_PosControl:
水平(X 和 Y 轴)控制和垂直(Z 轴)控制的单独接口。这些接口是分开的,因为某些飞行模式(如 AltHold 模式)只需要 Z 轴控制器
使用分层 PID 控制器
AC_PosControl 还包括一个 3D 速度控制器和一个 3D 位置+速度控制器
L1制导律
L1 控制器的update_waypoint 方法的最终输出是所需的横向加速度(在下面红色中显示为“latAccDem”),它将使车辆回到起点和终点之间的线。
使用的公式也如下所示。 阻尼来自NAVL1_DAMPING参数。period来自NAVL1_PERIOD参数。
ArduPlane架构
ahrs_update
调用 EKF 以使用最新的传感器数据并产生姿态和位置估计。read_radio
读取飞行员的输入并计算适当的姿态或位置目标navigate
调用 L1 和 TECS 控制器(见下文)为横滚、俯仰和油门控制器转换位置目标update_flight_mode
将 L1 控制器的滚动和俯仰目标复制到 nav_roll_cd 和 nav_pitch_cd 全局变量stabilize
执行较低级别的横滚、俯仰和油门控制器set_servos
将横滚、俯仰和油门控制器的输出发送到适当的伺服输出Plane控制器
Plane有两个高级控制器和至少3个低级控制器。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。