GKD.RoboCtrl
RoboMaster Linux 电控:异步 IO、设备驱动与机器人控制
载入中...
搜索中...
未找到
serial_imu.cpp
1#include "device/imu/serial_imu.hpp"
2#include "device/imu/serial_imu_codec.hpp"
3#include "io/serial.h"
4#include "utils/utils.hpp"
5
6#include <array>
7
8using namespace roboctrl::device;
9
10serial_imu::serial_imu(const info_type& info) : imu_base{100ms}, info_{info} {
11 auto& serial = roboctrl::get<io::serial>(info.serial_name);
12 serial.on_data(1, [this](const std::array<std::byte, 24>& bytes) {
13 const auto packet = decode_serial_imu(bytes);
14 if (!packet) return;
15 const auto sample = convert_serial_imu(*packet,
16 {info_.roll_sign, info_.pitch_sign, info_.yaw_sign},
17 {info_.roll_rate_sign, info_.pitch_rate_sign, info_.yaw_rate_sign}, info_.gyro_scale);
18 if (!sample) return;
19 angle_ = sample->angle;
20 gyro_ = sample->gyro;
21 tick();
22 });
23}
std::optional< serial_imu_sample > convert_serial_imu(const serial_imu_packet &packet, three_axis angle_sign, three_axis rate_sign, float gyro_scale)
串口裸 IO 封装。
IMU 基类,封装常见数据通道。
Definition base.hpp:36
常用数值与字节工具集合。