コンテンツにスキップ

rust_imu_utils#

IMUに関わる操作を行うためのライブラリです。

How to use#

Cargo.tomlに以下を記述する

[dependencies]
rust_imu_utils = {git = "https://github.com/motii8128/rust_imu_utils.git"}

Functions#

xyz_to_quaternion#

オイラー角をクォータニオンに変換する関数です。

pub fn xyz_to_quaternion(euler:na::Vector3<f32>)->na::Quaternion<f32>

convert_to_vector#

3つのf32の変数を含んだ、nalgebra用の3次元ベクトルを生成します。 このライブラリのEKFではnalgebraのVectorを引数にするのでこちらで変換してください。

pub fn convert_to_vector(x:f32, y:f32, z:f32)->na::Vector3<f32>

remove_gravity_from_euler#

一定の重力、そしてオイラー角の姿勢を使って加速度の重力を除去する関数です。 x, y, zのタプルを返します。

pub fn remove_gravity_from_euler(linear_accel:na::Vector3<f32>,euler:na::Vector3<f32>, gravity:f32)->(f32, f32, f32)

EKF for Posture#

加速度センサー、角速度センサーの値から姿勢を推定する

Initialize

use rust_imu_utils::ekf::Axis6EKF;

let delta_time = 0.001;
let ekf = Axis6EKF::new(delta_time);

in the loop

let linear_accel = rust_imu_utils::convert_to_vector(linear_x, linear_y, linear_z);
let gyro_velocity = rust_imu_utils::convert_to_vector(angular_velocity_x, angular_velocity_x, angular_velocity_x);

let result_euler_angle = ekf.run_ekf(gyro_velocity, linear_accel, delta_time);

// result_euler_angle.x:推定したxの角度
// result_euler_angle.y:推定したyの角度
// result_euler_angle.z:推定したzの角度

std::thread::sleep(std::time::Duration::from_millis(1));

ROS2で実装したもの

posture_estimater