IMU資料積分獲得當前位姿

2021-10-24 03:14:23 字數 2164 閱讀 9803

ref:

從兩幀imu資料中獲得當前位姿的**思路非常簡單,無非是求出當前時刻?與下一時刻?+1加速度的均值, 把它作為δ?時間內的平均加速度,有了這個平均加速度及當前時刻的初始速度和初始位置,就可以近似的求出?+1時刻的速度和位置。求出當前時刻?與下一時刻?+1角速度的均值, 把它作為δ?時間內的平均角速度,有了這個平均角速度及當前時刻的姿態,就可以近似的求出?+1時刻的姿態。

但是由於imu的資料存在著座標系、bias和重力加速度的問題需要額外的一些處理。

首先對於加速度,因為imu的加速度資料是在body座標系下表示的,所以要利用對應時刻的姿態將其轉換到世界座標系下,轉換之前要減去bias,轉化之後要減去重力加速度(世界座標系下的重力加速度恆等於9.8):

imu積分定位實踐**如下

void predict(const sensor_msgs::imuconstptr &imu_msg)

double dt = t - latest_time;

latest_time = t;

double dx = imu_msg->linear_acceleration.x;

double dy = imu_msg->linear_acceleration.y;

double dz = imu_msg->linear_acceleration.z;

eigen::vector3d linear_acceleration;

double rx = imu_msg->angular_velocity.x;

double ry = imu_msg->angular_velocity.y;

double rz = imu_msg->angular_velocity.z;

eigen::vector3d angular_velocity;

eigen::vector3d un_acc_0 = tmp_q * (acc_0 - tmp_ba) - estimator.g;

eigen::vector3d un_gyr = 0.5 * (gyr_0 + angular_velocity) - tmp_bg;

tmp_q = tmp_q * utility::deltaq(un_gyr * dt);

eigen::vector3d un_acc_1 = tmp_q * (linear_acceleration - tmp_ba) - estimator.g;

eigen::vector3d un_acc = 0.5 * (un_acc_0 + un_acc_1);

tmp_p = tmp_p + dt * tmp_v + 0.5 * dt * dt * un_acc;

tmp_v = tmp_v + dt * un_acc;

acc_0 = linear_acceleration;

gyr_0 = angular_velocity;

}

for ****** implementation:

//

// created by hyj on 18-1-19.

//#include #include "imu.h"

#include "utilities.h"

// euler2rotation: body frame to interitail frame

eigen::matrix3d euler2rotation( eigen::vector3d eulerangles)

eigen::matrix3d eulerrates2bodyrates(eigen::vector3d eulerangles)

imu::imu(param p): param_(p)

void imu::addimunoise(motiondata& data)

motiondata imu::motionmodel(double t)

//讀取生成的imu資料並用imu動力學模型對資料進行計算,最後儲存imu積分以後的軌跡,

//用來驗證資料以及模型的有效性。

void imu::testimu(std::string src, std::string dist)

std::cout<

}

IMU資料積分獲得當前位姿

從兩幀imu資料中獲得當前位姿的 思路非常簡單,無非是求出當前時刻 t 與下一時刻 t 1 加速度的均值,把它作為 delta t 時間內的平均加速度,有了這個平均加速度及當前時刻的初始速度和初始位置,就可以近似的求出 t 1 時刻的速度和位置。求出當前時刻 t 與下一時刻 t 1 角速度的均值,把...

資料庫獲得當前時間getdate

convert nvarchar 10 count time,121 convert為日期轉換函式,一般就是在時間型別 datetime,smalldatetime 與字串型別 nchar,nvarchar,char,varchar 相互轉換的時候才用到的函式的3個引數,第1個引數為,轉換後的大小,...

使用資料庫SQL語句獲得當前月的天數

view plain copy to clipboard print?獲得當月天數 select day dateadd mm,1,getdate day getdate as 本月天數 select getdate as 當前日期 select day getdate as 目前第幾天 selec...