72 std::array<int16_t, 4> data;
73 if (!read_reg(0x1A,
reinterpret_cast<uint8_t *
>(data.data()), 6)) {
76 euler_x_orig_ = data[0] / 900.0f;
77 euler_y_orig_ = data[1] / 900.0f;
78 euler_z_orig_ = data[2] / 900.0f;
80 euler_x_ = normalize_angle(euler_x_orig_ - euler_x_offset_);
81 euler_y_ = normalize_angle(euler_y_orig_ - euler_y_offset_);
82 euler_z_ = normalize_angle(euler_z_orig_ - euler_z_offset_);
84 if (!read_reg(0x20,
reinterpret_cast<uint8_t *
>(data.data()), 8)) {
87 quat_w_orig_ = data[0] / 16384.0f;
88 quat_x_orig_ = data[1] / 16384.0f;
89 quat_y_orig_ = data[2] / 16384.0f;
90 quat_z_orig_ = data[3] / 16384.0f;
92 quat_w_ = quat_w_orig_ * quat_w_offset_ - quat_x_orig_ * quat_x_offset_ -
93 quat_y_orig_ * quat_y_offset_ - quat_z_orig_ * quat_z_offset_;
94 quat_x_ = quat_w_orig_ * quat_x_offset_ + quat_x_orig_ * quat_w_offset_ +
95 quat_y_orig_ * quat_z_offset_ - quat_z_orig_ * quat_y_offset_;
96 quat_y_ = quat_w_orig_ * quat_y_offset_ - quat_x_orig_ * quat_z_offset_ +
97 quat_y_orig_ * quat_w_offset_ + quat_z_orig_ * quat_x_offset_;
98 quat_z_ = quat_w_orig_ * quat_z_offset_ + quat_x_orig_ * quat_y_offset_ -
99 quat_y_orig_ * quat_x_offset_ + quat_z_orig_ * quat_w_offset_;
161 std::array<uint8_t, 4> buf{0xAA, 0x00, addr, size};
176 std::array<uint8_t, 4> buf{0xAA, 0x01, addr, size};