这个示例演示了如何从安装在地面车辆上的传感器生成惯性测量单元(IMU)读数。根据传感器的位置,IMU的加速度是不同的。
指定车辆的路径点轨迹,并使用lookupPose
.
%采样率。Fs = 100;航路点和到达时间。路径点= [1 1 1;3 1 1;3 0 0;0 0 0];t = [1;10;20;30);创建轨迹和计算姿势。traj = waypointTrajectory(路径点,t,“SampleRate”Fs);[posVeh, orientVeh, velVeh, accVeh, angvelVeh] = lookupPose(traj,...t (1): 1 / Fs: t ());
创建两个9-axisimuSensor
由加速度计、陀螺仪和磁强计传感器组成的物体。一个imuSensor
对象生成安装在车辆原点的IMU的读数,另一个生成安装在驾驶员座位上的IMU的读数。接下来,指定车辆原点和安装在驾驶员座位上的IMU之间的偏移量。调用helperPlotIMU
来可视化传感器的位置。
% IMU在车辆起源。imu = imuSensor (“accel-gyro-mag”,“SampleRate”Fs);IMU坐在驾驶座上。mountedIMU = imuSensor (“accel-gyro-mag”,“SampleRate”Fs);车辆和安装的IMU的位置和方向偏移。posVeh2IMU = [2.4 0.5 0.4];orientVeh2IMU =四元数([0 0 90],“eulerd”,“ZYX股票”,“帧”);%的可视化。helperPlotIMU(posVeh(1,:), orientVeh(1,:), posVeh2IMU, orientVeh2IMU);
计算安装在驾驶员座位上的IMU的地面真实轨迹transformMotion
函数。该函数利用位置和姿态偏移量以及车辆轨迹来计算IMU轨迹。
[posIMU, orientIMU, velIMU, accIMU, angvelIMU] = transformMotion(...posVeh2IMU orientVeh2IMU,...posVeh, orientVeh, velVeh, accVeh, angvelVeh);
生成安装在车辆原点的IMU和安装在驾驶员座位的IMU的IMU读数。
% IMU在车辆起源。[accel, gyro, mag] = imu(accVeh, angvelVeh, orientVeh);IMU坐在驾驶座上。[accelMounted, gyroMounted, magMounted] = mountedIMU(...accIMU、angvelIMU orientIMU);
比较两个imu的加速度计读数。请注意,x-轴加速度是不同的,因为偏心位置。
图(“名字”,加速度计比较的) subplot(3,1,1) plot([accel(:,1), accelMounted(:,1)]) legend(与车辆的,“偏心”)标题(加速度计的) ylabel (“轴(m / s ^ 2)”) subplot(3,1,2) plot([accel(:,2), accelMounted(:,2)]) ylabel(“轴(m / s ^ 2)”) subplot(3,1,3) plot([accel(:,3), accelMounted(:,3)]) ylabel(“z轴(m / s ^ 2)”)
比较两个imu的陀螺仪读数。
图(“名字”,“陀螺仪比较”)次要情节(3、1、1)的阴谋([陀螺(:1),gyroMounted (: 1)]) ylim([-0.22 - 0.1])传说(与车辆的,“偏心”)标题(“陀螺”) ylabel (“轴(rad / s)”次要情节(3、1、2)情节([陀螺(:,2),gyroMounted (:, 2)]) ylabel (“轴(rad / s)”次要情节(3,1,3)情节([陀螺(:,3),gyroMounted (:, 3)]) ylabel (“z轴(rad / s)”)
比较两个imu的磁强计读数。
图(“名字”,“磁强计比较”)次要情节(3、1、1)的阴谋([杂志(:1),magMounted(: 1)])传说(与车辆的,“偏心”)标题(“磁强计”) ylabel (“轴(\狗)”次要情节(3、1、2)情节([杂志(:,2),magMounted (:, 2)]) ylabel (“轴(\狗)”次要情节(3,1,3)情节([杂志(:,3),magMounted (:, 3)]) ylabel (“z轴(\狗)”)