PSINS中19维组合导航模块sinsgps详解(初始赋值部分)

19维组合导航模块sinsgps

初始赋值部分

1.[nn, ts, nts] = nnts(2, diff(imu(1:2,end)));用于设置nn子样数、ts采样间隔以及前面两者相乘nts
2.if size(gps,2)<=5, gpspos_only=1; pos0=gps(1,1:3)'; else, gpspos_only=0; pos0=gps(1,4:6)'; end 判断传入的GPS数据是否有速度结果,只有位置的话,gpspos_only=1,还有速度的话,gpspos_only=0
3.

if ~exist('rk', 'var'),
        if gpspos_only==1, rk=poserrset([10,30]);
        else, rk=vperrset([0.1;0.3],[10,30]); end
    end

上述代码块是用于给测量值赋初始方差的,只有位置观测值的话,只需要位置误差;还有速度观测值的话,那速度位置的方差都要设置;注意这里,位置误差的值输入的是米,速度误差的值单位是米每秒
4.

    if ~exist('dT', 'var'), dT = 0.01; end;   if length(dT)==1, dT(2,1)=1; end
    if ~exist('lever', 'var'), lever = rep3(1); else, lever=rep3(lever); end;   if length(lever)==3, lever(4)=1; end
    if ~exist('imuerr', 'var'), imuerr = imuerrset(0.05, 500, 0.001, [10;10;100]); end
    if ~exist('davp', 'var'), davp = avperrset([10;300], 1, [10;30]); end
    if ~exist('ins', 'var'), ins=100; end
    if ~isstruct(ins)  % sinsgps(imu, gps, T);  T=ins align time
        [~, res0] = aligni0(imu(1:fix(ins/ts),:), pos0);  imu(1:fix(ins/ts),:)=[];
        ins = insinit([res0.attk(1,1:3)'; 0;0;0; pos0], ts); ins.nts=nts;
    end

上述代码块是为没有提供的变量赋初值的:
dT默认(0.01,1)s; lever默认[1;1;1]m;其他的如默认设置;
最重要的是ins默认为100,是用于后面判断是否要进行ins的初始化的
5. ins.lever = lever(1:3); ins.tDelay = dT(1);设置杆臂和时间延迟参数
6. ins = inslever(ins, -ins.lever); ins.vn = ins.vnL; ins.pos = ins.posL;对速度和位置进行杆臂误差的补偿
7. psinstypedef(196-gpspos_only*3);为组合导航维度类型做准备的
8.

kf = [];
kf.Qt = diag([imuerr.web; imuerr.wdb; zeros(3,1); imuerr.sqg; imuerr.sqa; zeros(3,1); 0])^2;

上述代码块为系统噪声方差阵的构建。imuerr.web为角度随机游走;imuerr.wdb为速度随机游走; imuerr.sqg为角速率随机游走相关偏差;imuerr.sqa为比力随机游走相关偏差。
9.kf.Rk = diag(rk)^2;为设置测量噪声矩阵。
10. kf.Pxk = diag([davp; imuerr.eb; imuerr.db; lever(1:3)*lever(4); dT(1)*dT(2)]*1.0)^2; 为设置状态方差矩阵
11. kf.Hk = zeros(length(rk),19);为设置系数矩阵
12. kf = kfinit0(kf, nts);为卡尔曼滤波器初始化
13.

if exist('Pmin', 'var'),
        if sum(Pmin)<=0, kf.pconstrain=0;
        else kf.Pmin = Pmin; kf.pconstrain = 1; end
    end
    kf.adaptive = 1;
    if exist('Rmin', 'var'), 
        if sum(Rmin)<=0, kf.adaptive=0; end
        if kf.adaptive==1,
            if length(Rmin)==1, kf.Rmin = kf.Rk*Rmin;
            else kf.Rmin = diag(Rmin); end
        end
    end

上述代码为设置限制状态方差下限以及自适应滤波的测量噪声矩阵下限设置
14.

if exist('fbstr', 'var'), kf.fbstr=fbstr; end
    kf.xtau = [ [1;1;1]; [1;1;1]; [1;1;1]; [1;1;1]; [1;1;1]; [1;1;1]; 1]*1;

上述代码为设置相关参数

时间同步初始化部分

  1. imugpssyn(imu(:,end), gps(:,end));时间同步部分会在下一篇详细介绍
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
move_base是ROS用于导航的一个包,其包含了多个配置文件,下面我们来详细解释每个配置文件的作用。 1. costmap_common_params.yaml 该文件定义了全局和局部costmap的一些通用参数,包括地图分辨率、costmap分辨率、膨胀半径、障碍物图层名称、不可通行区域图层名称等。具体参数包括: - obstacle_range:表示障碍物图层障碍物的最小值,超过此值的障碍物将不会被考虑。 - raytrace_range:表示射线距离,用于检查是否能够到达某个点。 - robot_radius:表示机器人半径,用于计算膨胀半径。 - inflation_radius:表示膨胀半径,用于将障碍物膨胀成一个圆形区域。 - observation_sources:表示观测源,包括雷达、摄像头等。 - map_type:表示地图类型,包括静态地图、动态地图等。 2. global_costmap_params.yaml 该文件定义了全局costmap的参数,包括地图的尺寸、分辨率、更新频率、障碍物距离等。具体参数包括: - global_frame:表示全局坐标系的名称。 - robot_base_frame:表示机器人的底盘坐标系名称。 - update_frequency:表示更新频率。 - static_map:表示是否使用静态地图。 - rolling_window:表示是否使用滚动窗口。 - transform_tolerance:表示坐标变换的容差值。 - resolution:表示costmap的分辨率。 3. local_costmap_params.yaml 该文件定义了局部costmap的参数,包括地图的尺寸、分辨率、更新频率、障碍物距离等。具体参数包括: - global_frame:表示全局坐标系的名称。 - robot_base_frame:表示机器人的底盘坐标系名称。 - update_frequency:表示更新频率。 - static_map:表示是否使用静态地图。 - rolling_window:表示是否使用滚动窗口。 - transform_tolerance:表示坐标变换的容差值。 - resolution:表示costmap的分辨率。 4. base_local_planner_params.yaml 该文件定义了局部规划器的参数,包括控制频率、最大线速度、最大角速度等。具体参数包括: - controller_frequency:表示控制频率。 - max_vel_x:表示机器人最大线速度。 - min_vel_x:表示机器人最小线速度。 - max_vel_theta:表示机器人最大角速度。 - min_vel_theta:表示机器人最小角速度。 - acc_lim_x:表示机器人线加速度。 - acc_lim_theta:表示机器人角加速度。 以上是move_base包常用的配置文件,用户可以根据自己的需求修改这些参数,以满足不同的导航场景需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

十八与她

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值