ArduPilot开源代码之AP_DAL_RangeFinder_Backend
ArduPilot开源代码之AP_DAL_RangeFinder_Backend
1. 源由
AP_DAL_RangeFinder_Backend
是封装测距仪的数据访问和操作,提供了接口以获取测距仪的状态、方向、距离等信息。
它提供了AP_DAL_RangeFinder
作为测距类更为基础的共性方法。
2. 框架设计
2.1 类成员
-
构造函数:
AP_DAL_RangeFinder_Backend(struct log_RRNI &RRNI);
- 使用一个
log_RRNI
结构体的引用来初始化。
-
公共方法:
enum Rotation orientation() const
: 返回测距仪的方向,转换为Rotation
类型。AP_DAL_RangeFinder::Status status() const
: 返回测距仪的状态,转换为AP_DAL_RangeFinder::Status
类型。uint16_t distance_cm() const
: 返回测距仪测量的距离(以厘米为单位)。const Vector3f &get_pos_offset() const
: 返回位置偏移量的Vector3f
引用。void start_frame(AP_RangeFinder_Backend *backend)
: 启动新的测距帧。
2.2 私有成员
struct log_RRNI &_RRNI;
: 一个指向log_RRNI
结构体的引用,存储测距仪的状态和数据。
3. 重要例程
enum Rotation : uint8_t {
ROTATION_NONE = 0,
ROTATION_YAW_45 = 1,
ROTATION_YAW_90 = 2,
ROTATION_YAW_135 = 3,
ROTATION_YAW_180 = 4,
ROTATION_YAW_225 = 5,
ROTATION_YAW_270 = 6,
ROTATION_YAW_315 = 7,
ROTATION_ROLL_180 = 8,
ROTATION_ROLL_180_YAW_45 = 9,
ROTATION_ROLL_180_YAW_90 = 10,
ROTATION_ROLL_180_YAW_135 = 11,
ROTATION_PITCH_180 = 12,
ROTATION_ROLL_180_YAW_225 = 13,
ROTATION_ROLL_180_YAW_270 = 14,
ROTATION_ROLL_180_YAW_315 = 15,
ROTATION_ROLL_90 = 16,
ROTATION_ROLL_90_YAW_45 = 17,
ROTATION_ROLL_90_YAW_90 = 18,
ROTATION_ROLL_90_YAW_135 = 19,
ROTATION_ROLL_270 = 20,
ROTATION_ROLL_270_YAW_45 = 21,
ROTATION_ROLL_270_YAW_90 = 22,
ROTATION_ROLL_270_YAW_135 = 23,
ROTATION_PITCH_90 = 24,
ROTATION_PITCH_270 = 25,
ROTATION_PITCH_180_YAW_90 = 26, // same as ROTATION_ROLL_180_YAW_270
ROTATION_PITCH_180_YAW_270 = 27, // same as ROTATION_ROLL_180_YAW_90
ROTATION_ROLL_90_PITCH_90 = 28,
ROTATION_ROLL_180_PITCH_90 = 29,
ROTATION_ROLL_270_PITCH_90 = 30,
ROTATION_ROLL_90_PITCH_180 = 31,
ROTATION_ROLL_270_PITCH_180 = 32,
ROTATION_ROLL_90_PITCH_270 = 33,
ROTATION_ROLL_180_PITCH_270 = 34,
ROTATION_ROLL_270_PITCH_270 = 35,
ROTATION_ROLL_90_PITCH_180_YAW_90 = 36,
ROTATION_ROLL_90_YAW_270 = 37,
ROTATION_ROLL_90_PITCH_68_YAW_293 = 38, // this is actually, roll 90, pitch 68.8, yaw 293.3
ROTATION_PITCH_315 = 39,
ROTATION_ROLL_90_PITCH_315 = 40,
ROTATION_PITCH_7 = 41,
ROTATION_ROLL_45 = 42,
ROTATION_ROLL_315 = 43,
///
// Do not add more rotations without checking that there is not a conflict
// with the MAVLink spec. MAV_SENSOR_ORIENTATION is expected to match our
// list of rotations here. If a new rotation is added it needs to be added
// to the MAVLink messages as well.
///
ROTATION_MAX,
ROTATION_CUSTOM_OLD = 100,
ROTATION_CUSTOM_1 = 101,
ROTATION_CUSTOM_2 = 102,
ROTATION_CUSTOM_END,
};
3.1 应用函数
3.1.1 orientation
获取传感器放置方向
enum Rotation orientation() const {
return (Rotation)_RRNI.orientation;
}
3.1.2 status
获取传感器状态
AP_DAL_RangeFinder::Status status() const {
return (AP_DAL_RangeFinder::Status)_RRNI.status;
}
3.1.3 distance_cm
获取安全距离
uint16_t distance_cm() const { return _RRNI.distance_cm; }
3.1.4 get_pos_offset
获取传感器安装位置
const Vector3f &get_pos_offset() const { return _RRNI.pos_offset; }
3.2 其他函数
3.2.1 AP_DAL_RangeFinder_Backend
构造函数,直接传址赋值
AP_DAL_RangeFinder_Backend::AP_DAL_RangeFinder_Backend(struct log_RRNI &RRNI) :
_RRNI(RRNI)
{
}
3.2.2 start_frame
frame处理,直接传址赋值
void AP_DAL_RangeFinder_Backend::start_frame(AP_RangeFinder_Backend *backend) {
const log_RRNI old = _RRNI;
_RRNI.orientation = backend->orientation();
_RRNI.status = (uint8_t)backend->status();
_RRNI.pos_offset = backend->get_pos_offset();
_RRNI.distance_cm = backend->distance_cm();
WRITE_REPLAY_BLOCK_IFCHANGED(RRNI, _RRNI, old);
}
4. 总结
AP_DAL_RangeFinder_Backend
主要封装测距仪的共性数据访问和操作。
- orientation //安装方向
- get_pos_offset //安装位置
- status //设备状态
- distance_cm //传感距离
5. 参考资料
【1】ArduPilot开源飞控系统之简单介绍
【2】ArduPilot之开源代码Task介绍
【3】ArduPilot飞控启动&运行过程简介
【4】ArduPilot之开源代码Library&Sketches设计
【5】ArduPilot之开源代码Sensor Drivers设计
【6】ArduPilot开源代码之EKF系列研读
【7】ArduPilot开源代码之AP_DAL_RangeFinder
原文地址:https://blog.csdn.net/lida2003/article/details/140526651
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!