Git Product home page Git Product logo

vio_data_simulation's Introduction

imusim

imu和cam数据仿真,用于vio算法测试,代码有任何问题都欢迎交流 [email protected]

we also create a ros_version in ros_version branch.

demo pic

坐标系

  • Body frame: imu坐标系

  • Cam frame: 相机坐标系

  • World frame: imu坐标系的第一帧位置

  • Navigation frame: NED(北东地)or ENU(东北天),本代码采用的是ENU,重力向量在该坐标系下为$(0,0,-9.81)$

目前,imu的z轴向上,xy平面内做椭圆运动,z轴做正弦运动,x轴沿着圆周向外。外参数Tbc将相机坐标旋转,使得相机朝向特征点。

代码结构

main/gener_alldata.cpp : 用于生成imu数据,相机轨迹,特征点像素坐标,特征点的3d坐标

src/paramc.h:imu噪声参数,imu频率,相机内参数等等

src/camera_model.cpp:相机模型,调用的svo,目前代码里这个文件删掉了

python_tool/:文件夹里为可视化工具,draw_points.py就是动态绘制相机轨迹和观测到的特征点。如果是ubuntu不需额外安装,windows需要安装python matplot等依赖项

数据存储的格式

特征点

x,y,z,1,u,v

每个特征出现在文件里的顺序,就是他们独立的id,可用来检索特征匹配

imu data

timestamp (1),imu quaternion(4),imu position(3),imu gyro(3),imu acc(3)

cam data

timestamp (1),cam quaternion(4),cam position(3),imu gyro(3),imu acc(3)

注意,由于imu和cam的存储采用的是同一个函数,所以cam也会存储一些gyro,acc这些数据,但是没用,是多余存储的。

vio_data_simulation's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vio_data_simulation's Issues

积分精度

您好!我运行您的代码,发现x的积分值和真值之间存在较大的误差,但是y,z,roll,pitch和yaw并不存在误差,想请教您可能的原因
Figure_2

不同计算方法的误差

贺博您好,我试着使用欧拉法,中值积分和龙格库塔法(msckf-vio)进行计算,发现使用龙格库塔法没能提升精度,这不符合我之前了解的一些结论,请问是怎么回事?

下图是不同方法的误差,计算方法是err=gt位移-计算位移,再计算err的二范数。请问这种计算方式合适么?
mid是中值积分,runge是龙格库塔,rungem是将龙格库塔法中角速度替换为中值,euler是欧拉法。
error

Problem about data_gen

When I use ./data_gen to generate data ,there is a little problem:
gener_alldata.cpp

It does not generate bin/keyframe/all_points_0.txt.... because the directory keyframe does not exist.
😄

cd bin
mkdir keyframe

It works fine.

消除重力问题

在代码中Rwb.transpose() * ( ddp - gn ),有点迷惑,我觉得应该是加号啊,难道这个z轴向下?

大神所表达的ENU 实际上是想表达使用 ZYX的欧拉角顺序吧?

代码中 , 欧拉角转旋转矩阵的部分:
`// 使用ZYX 欧拉角顺序
Eigen::Matrix3d euler2Rotation(Eigen::Vector3d eulerAngles) {
double roll = eulerAngles(0);
double pitch = eulerAngles(1);
double yaw = eulerAngles(2);

double cr = cos(roll);
double sr = sin(roll);
double cp = cos(pitch);
double sp = sin(pitch);
double cy = cos(yaw);
double sy = sin(yaw);

// 载体坐标系到参考坐标系的旋转变换
Eigen::Matrix3d RIb;
RIb << cy * cp, cy * sp * sr - sy * cr, sy * sr + cy * cr * sp,
        sy * cp, cy * cr + sy * sr * sp, sp * sy * cr - cy * sr,
        -sp, cp * sr, cp * cr;
return RIb;

}`

motionModel中欧拉角的计算

请问贺博:
double k_roll = 0.1; double k_pitch = 0.2; Eigen::Vector3d eulerAngles(k_roll * cos(t) , k_pitch * sin(t) , K*t );
,欧拉角怎么计算的,如何理解?

怎么编译和运行?

对非 ros :

  1. 编译
  2. 执行bin/data_gen, 生成数据
  3. 执行python_tools/draw_trajectory.py 画出轨迹
  4. 换成中值积分, 再重做一遍上述1,2,3过程
    第一步和第二步怎么做?

欧拉法代码实现是不是有问题?

imu.cpp第136行后面的欧拉法中,由k的测量值计算k+1时刻的位姿,137行 “MotionData imupose = imudata[i];” 应该是 “MotionData imupose = imudata[i-1];” 吧?不然从1开始的话(比如时间戳0.005),就是用该时刻的角速度和加速度计算该时刻的位姿了,和定义不符,从保存的数据也可以看出来。(后面保存的时间戳也要改)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.