手写VIO作业总结(二)

作业题目:
在这里插入图片描述
1、基础作业

1.1 生成标定曲线

1.建立work space
2.利用caktin_make编译vio_data_simulation-ros_version
3.rosrun  vio_data_simulation vio_data_simulation_node

注意:
1、在启动ros节点时需要把vio_data_simulation-ros_version修改成vio_data_simulation
2、需要修改vio_data_simulation-ros_version/src/gener_alldata.cpp中的bag路径
3、打开vio_data_simulation-ros_version/src/param.h可以设置参数

对ROS: 使用 imu_utils

1. ros下编译 
2. 执行, 生成 imu.bag 
3. rosbag play -r 500 imgimu_utils.bag 回放
4. 用imu_utils进行接收和分析
5. 用imu_utils下的scripts/下的matlab 脚本画allan曲线

对ROS: 使用 kalibr_allan

1. ros下编译 
2. 执行, 生成 imu.bag 
3. 用kalibr_allan的bagconver把bag转成 mat文件, 见readme
4. 用kalibr_allan的m脚本对mat文件进行分析, (需修改m文件中的mat文件路径)
5. 用kalibr_allan的m脚本画allan曲线, (需修改m文件中的result文件路径)

1.2 将imu仿真代码中的欧拉积分替换成中值积分

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

欧拉积分得到的仿真图像
在这里插入图片描述
中值积分得到的图像
在这里插入图片描述
具体代码实现

 /************************************欧拉积分*******************************************/
       /*MotionData imupose = imudata[i];

        //delta_q = [1 , 1/2 * thetax , 1/2 * theta_y, 1/2 * theta_z]
        Eigen::Quaterniond dq;
        Eigen::Vector3d dtheta_half =  imupose.imu_gyro * dt /2.0;
        dq.w() = 1;
        dq.x() = dtheta_half.x();
        dq.y() = dtheta_half.y();
        dq.z() = dtheta_half.z();

        /// imu 动力学模型 欧拉积分
        Eigen::Vector3d acc_w = Qwb * (imupose.imu_acc) + gw;  // aw = Rwb * ( acc_body - acc_bias ) + gw
        Qwb = Qwb * dq;
        Vw = Vw + acc_w * dt;
        Pwb = Pwb + Vw * dt + 0.5 * dt * dt * acc_w;*/
       /***************************************************************************************/


        /*********************************中值积分*********************************************/
        MotionData imupose_pre=imudata[i-1];
        MotionData imupose=imudata[i];
        Eigen::Quaterniond dq;
        Eigen::Vector3d dtheta_half=0.5*(imupose_pre.imu_gyro+imupose.imu_gyro)*dt*0.5;

        dq.w()=1;
        dq.x()=dtheta_half.x();
        dq.y()=dtheta_half.y();
        dq.z()=dtheta_half.z();
        dq.normalize();

        Eigen::Vector3d acc_w=(Qwb*(imupose_pre.imu_acc)+gw+Qwb*dq*(imupose.imu_acc)+gw)*0.5;
        Qwb=Qwb*dq;
        Vw=Vw+acc_w*dt;
        Pwb=Pwb+Vw*dt+0.5*dt*dt*acc_w;
        /************************************************************************************/

2、提升作业

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纷繁中淡定

你的鼓励是我装逼的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值