目录

  • 1. imu 校准
    • 1.1 IMU型号
    • 1.2 坐标定义
      • 1.2.1 大地坐标系(WGS84)
      • 1.2.2 当地地理坐标系(ENU)
      • 1.2.3 传感器坐标轴定义
    • 1.3 传感器内参校准
    • 1.4 校准imu和车底坐标系
  • 2. 底盘车辆参数配置
  • 3. 单激光雷达校准
    • 3.1 产品说明摘要
    • 3.2 雷达出厂设置
    • 3.3 使用RSView自定义雷达IP和端口号
  • 参考文献

1. imu 校准

1.1 IMU型号

阅读IMU产品说明书,获得如下信息:
Yesense YIS300 系列惯性传感系统
YIS300 系列包含:

  • YIS300-U 惯性测量单元(IMU):输出经过校准的加速度和角速度值,同时也能够输出磁场强度信息。
  • YIS300-V 垂直参考系统(VRU):除了具备 YIS300-U 特性的同时,还能够输出无漂移的横滚角、俯仰角以及无参考的航向角。
  • YIS300-A 航姿参考系统(AHRS):除了具备YIS300-U 特性的同时,还能够输出无漂移的横滚角、俯仰角以及参考地球磁北方向的航向角信息。同时,YIS300-A 经过配置可以作为一个垂直参考单元(VRU, Vertical Reference Unit),输出的航向角为无参考方向,不受磁场环境影响。

YIS300 的动态姿态检测精度为 0.3°,同时提供稳定、低漂移的相对航向输出以及无漂移的绝对航向输出。

图4-1 产品系列简图

1.2 坐标定义

1.2.1 大地坐标系(WGS84)

现在,最普遍的方式是用大地坐标系来表示某点相对于地球的位置。这种坐标系用一个椭球来代表整个地球的形状。

目前,WGS84 椭球系统是应用最普遍的一个大地坐标系,因为它被用作 GPS 的标准。因此,在 YIS300 的中采用的大地坐标系为 WGS84 参考坐标系。

1.2.2 当地地理坐标系(ENU)

YIS300 中采用的当地地理坐标系为 ENU(东北天坐标系)。

ENU(East North Up)坐标系,即东北天坐标系,简称为 n 坐标系,也叫做导航坐标系,是在导航时根据导航系统工作的需要而选取的用于导航结算的参考坐标系。

ENU 坐标系各轴的定义:

  • E——东轴指向地球东;
  • N——北轴指向地球北;
  • U——地轴垂直于地球表面并指向上。


图4-2 当地地理坐标

1.2.3 传感器坐标轴定义


图4-3 YIS300 系列坐标轴定义

注意:imu参数标定最重要的工作就是令IMU的坐标轴方向和小车车体中心的坐标轴方向平行,即:x、y、z都平行。

1.3 传感器内参校准

每一个 YIS300 系列姿态传感器都单独进行过全测量范围内的校准和测试。陀螺仪、加速度计简化的统一模型表示如下:
u=H⋅y+bu = H \cdot y + bu=H⋅y+b
其中:

  • uuu表示陀螺仪、加速度计校准后的测量值(单位°/s°/s°/s,m/s2m/s^2m/s2)
  • yyy表示陀螺仪、加速度计的原始输出值
  • HHH表示传感器的复合误差校准矩阵
  • bbb表示传感器的偏置

YIS300 的校准过程包括传感器的标度因数、传感器轴间非正交、以及传感器与 PCB 板间的不对准等误差校准,所有的校准参数都预先完成并写入到板基内嵌算法中。

1.4 校准imu和车底坐标系

根据IMU产品说明书中的坐标系说明,如图4-3 YIS300 系列坐标轴定义,预先将imu位置摆正,使得imu的坐标系方向和车底坐标系方向一致,并且令imu位于x轴正方向上,可以使得在后面的xyz三轴的位置校准上,可以不需要计算y轴方向上的数据,直接令y=0。

在hdl的建图启动文件~/sx_ws/src/hdl_graph_slam/launch/hdl_graph_slam_sx.launch 新增imu相对与底盘的tf变换关系:

<node pkg="tf" type="static_transform_publisher" name="imu2base_publisher" args="1.86 0 -0.35 0 0 0 base_link imu 10" />

args参数顺序分别为:

  • 前边的x y z分别代表着相应轴的平移,单位是 米 。

  • yaw pitch roll 分别代表着绕三个轴的转动,单位是 弧度
    前文介绍过了,可能有人感觉这东西不好记,很容易忘掉哪个对应哪个坐标轴,其实你可以发现,yaw pitch roll 分别对应着 Z,Y,X轴的旋转,也就是把我们总说的XYZ的反过来,只要记住顺序还是不容易弄错的。

  • 再之后的frame_id为坐标系变换中的父坐标系, child_frame_id为坐标系变换中的子坐标系。

  • 最后一个参数为发布频率,单位为 毫秒。通常取100。

    一毫秒为一秒的千分之一,100毫秒即为0.1秒,也就是10Hz。

注意:欧拉角定义如下:

  • Yaw(偏航):欧拉角向量的y轴
  • Pitch(俯仰):欧拉角向量的x轴
  • Roll(翻滚): 欧拉角向量的z轴

在tf中填写imu 相对于 车底中心的距离,以xyz标准。由于已经人为使得imu和车体坐标系方向一致,不用添加 rpy的参数。否则,以逆时针旋转为正、顺时针旋转为负,添加rpy的参数。

其中,x=1.86 z=-0.35 单位是米,均是实际测量值。

同理,在hdl的定位启动文件~/sx_ws/src/hdl_localization/launch/hdl_localization.launch添加相同的tf变换关系:

<node pkg="tf" type="static_transform_publisher" name="imu2base_publisher" args="1.86 0 -0.35 0 0 0 i_base_link i_imu 10" />

2. 底盘车辆参数配置

修改底盘参数配置文件:~/sx_ws/src/iexpress_omni_4_driver/config/vehicle_params_sx.yaml:

#agv 车体参数
# 端口名称
port_name : "/dev/usbDIPAN" header_frame_id_odom : "i_odom"
child_frame_id_odom :  "i_base_link"# 串口的波特率
baud_rate : 115200control_rate : 50
battery_rate : 1# 编码率=电机转一圈的脉冲数*减速比 800*25
encoder_resolution : 20000# 对角线/2
diagonal : 1.677Battery_min : 21.5
Battery_max : 29.4# 标定里程计: 目前置1 ;走10米,实际走的路/里程计数据
# y轴   8/8.555
calibrate_y : 0.9351
# x轴  8/8,467
calibrate_x : 1# w轴,车旋转180度进行测量
calibrate_w : 1max_radio : 0.8
max_angular : 15# 轮直径
wheel_diameter_rf : 0.412
wheel_diameter_lf : 0.412
wheel_diameter_lr : 0.412
wheel_diameter_rr : 0.412angle_rf : 2.3562
angle_lf : 3.9270
angle_lr : 5.4978
angle_rr : 0.78

其中,重点修改以下参数:(以实际测量为准)

  • port_name:端口名称,在usb转串口中设置
  • header_frame_id_odom : “i_odom” 轮式里程计坐标系
  • child_frame_id_odom : "i_base_link"车底坐标系
  • encoder_resolution:计算公式为 编码率=电机转一圈的脉冲数*减速比
  • wheel_diameter_rf、lf、lr、rr:右前轮、左前轮、左后轮、右后轮的轮胎直径
  • calibrate_x、y、w:车体坐标x,y,绕z轴旋转的里程计标定参数。
    计算方法如下:初始设1,然后进行标定。
    标定参数 = 小车实际走的长度、角度/odom里程计数据
    预计设置标定参数后的效果:(小车实际走的长度、转的角度) 约等于 (odom里程计显示的数据)

注意1:直接测量的数据要精准,否则会影响后续标定参数的设置,导致其参数不准。

注意2:参考里程计数据的方法:

  1. 启动底盘驱动:
roslaunch iexpress_omni_4_driver iexpress_omni_4_driver.launch
  1. 找到底盘驱动的topic:显示内容包含 wheel_odom
rostopic list
  1. 在终端输出里程计数据:
rostopic echo 里程计节点名称

3. 单激光雷达校准

3.1 产品说明摘要


图4-4 雷达示例图

RS-LiDAR-16,固态混合激光雷达,有以下特点:

  • 测量范围高达150米
  • 测量误差在2厘米内
  • 320000点/秒的数据速率
  • 360度水平视野
  • 30度垂直视野

RS-LiDAR-16紧凑外壳安装有16对激光/探测器对,快速旋转并发出高频激光束,连续扫描周围环境。先进的数字信号处理和测距算法计算点云数据和物体反射率,使机器能够看到世界,并为定位、导航和避障提供可靠的数据。

图4-4 RS-LiDAR成像系统

3.2 雷达出厂设置

要使得电脑能连接上雷达,需要设置电脑的以太网IP,具体参数如下图所示:

图4-5 出厂设置的IP地址和端口号

每个RS-LiDAR-16的默认MAC地址都在出厂前设置。MAC地址可以根据需要改变。
为了在传感器和计算机之间建立通信,需要将计算机的IP地址设置在传感器的同一网络段。默认:192.168.1.102,子网掩码:255.255.255.0。如果对传感器的互联网设置不确定,请将计算机子网掩码设置为0.0.0.0,将传感器连接到计算机,通过Wireshark解析包获取IP和端口。

RS-LiDAR-16采用3种通信协议与计算机建立通信:

  • MSOP(主数据流输出协议)。将传感器采集到的距离、方位角和反射率数据打包输出到计算机。
  • DIFOP(设备信息输出协议)。监控传感器的当前配置信息。
  • UCWP(用户配置写协议)。用户可以根据需要修改传感器的一些参数。

3.3 使用RSView自定义雷达IP和端口号

具体参见 工作笔记02.编译功能包并配置传感器
“3.2 配置雷达参数”。

由于我们使用hdl进行建图和定位工作,而hdl只支持使用一颗激活雷达进行建图和定位工作,所以将原先使用两颗雷达的启动文件修改为启动一颗雷达的启动文件(同时获取双雷达的数据,但是只使用一颗,貌似对定位的精度有影响)。~/sx_ws/src/iexpress_ladar_driver/iexpress_rs_driver_new/rslidar_pointcloud_new/launch/one_lidar.launch内容如下:

<!--注释掉雷达1,只使用雷达2--><launch>
<arg name="iexpress" default="iexpress"/>
<!--
<arg name="iexpress_rs_driver1" default="iexpress_rs_driver1"/>
-->
<arg name="iexpress_rs_driver2" default="iexpress_rs_driver2"/>
<group ns="$(arg iexpress)"><!--
<group ns="$(arg iexpress_rs_driver1)"><node  name="rslidar_node" pkg="rslidar_driver_new" type="rslidar_node" output="screen" ><param name="model" value="RS16"/><param name="cut_angle" value="240"/><param name="device_ip" value="192.168.1.200" /><param name="msop_port" value="6699"/><param name="difop_port" value="7788"/></node><node  name="cloud_node" pkg="rslidar_pointcloud_new" type="cloud_node" output="screen" ><param name="model" value="RS16"/><param name="curves_path" value="$(find rslidar_pointcloud_new)/data/lidar1/curves.csv" /><param name="angle_path" value="$(find rslidar_pointcloud_new)/data/lidar1/angle.csv" /><param name="channel_path" value="$(find rslidar_pointcloud_new)/data/lidar1/ChannelNum.csv" /><param name="topic_name" value="rslidar_points1" /><param name="frame_id" value="i_scan1" /></node>
</group>
--><group ns="$(arg iexpress_rs_driver2)"><node  name="rslidar_node" pkg="rslidar_driver_new" type="rslidar_node" output="screen" ><param name="model" value="RS16"/><param name="cut_angle" value="240"/><!--param name="pcap" value="/home/tony-sti/lidar_data/lm75-170616-roadtest.pcap"/ --><param name="device_ip" value="192.168.1.201"/><param name="msop_port" value="9966"/><param name="difop_port" value="8877"/></node><node  name="cloud_node" pkg="rslidar_pointcloud_new" type="cloud_node" output="screen" ><param name="model" value="RS16"/><param name="curves_path" value="$(find rslidar_pointcloud_new)/data/lidar2/curves.csv" /><param name="angle_path" value="$(find rslidar_pointcloud_new)/data/lidar2/angle.csv" /><param name="channel_path" value="$(find rslidar_pointcloud_new)/data/lidar2/ChannelNum.csv" /><param name="topic_name" value="rslidar_points2" /><param name="frame_id" value="i_scan2" /></node>
</group>
</group>
</launch>

和imu一样,在hdl的建图和定位中添加 雷达相对于小车中心 的TF变换关系:

<node pkg="tf" type="static_transform_publisher" name="lidar2base_publisher" args="-1.925 1.1 0.0 2.25  0 0 base_link i_scan2 10" />

上述语句的作用的直观表现是:在令小车和仓库墙面保持平行的前提下,雷达发射的激光射线和墙面反射的射线平行。代表雷达的校准成功。

参考文献

[1] LATEX:玩转数学公式

[2] tf之static_transform_publisher

工作笔记05:imu、底盘车轮、单激光雷达外参校准(基于hdl_graph_slam建图和定位)相关推荐

  1. 激光雷达学习笔记-------Ubuntu 18.04 + 思岚科技 A1M8+ ROS 上手使用及基于hector_slam 建图

    一,在虚拟机环境上搭建环境 官方提供了纯 C++和ROS节点两种形式的SDK,ROS版SDK中已经包含了C++的SDK(版本稍晚),不需要单独下载C++版本的SDK. 这里我们主要使用ROS来测试,从 ...

  2. ndtmapping建图_自动驾驶系列:激光雷达建图和定位(NDT)

    该系列主要为对前期工作进行梳理,以后所进行的工作也会部分在此记录. 使用NDT(正态分布变换)进行点云建图和定位 前言 定位模块是自动驾驶最核心的模块之一,定位又包括全局定位和局部定位,对于自动驾驶, ...

  3. 使用Kalibr标定相机和IMU(ZED+px4)外参

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 使用Kalibr标定相机和IMU(ZED+px4)外参 前言 一.Kalibr介绍 二.CAM-IMU外参标定 1.相机内参 2.IM ...

  4. 多激光雷达外参⾃动化标定算法及代码实例

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 激光雷达是⽬前⾃动驾驶系统中的核⼼传感器之⼀,但是由于其信息密度低.存在垂直盲区等问题,⼚商⼤多在其L ...

  5. 相机和livox激光雷达外参标定:ROS功能包---livox_camera_lidar_calibration 使用方法

    相机和livox激光雷达外参标定:ROS功能包---livox_camera_lidar_calibration 使用方法 livox_camera_lidar_calibration 功能包介绍 使 ...

  6. 相机和livox激光雷达外参标定:ROS功能包---livox_camera_lidar_calibration 介绍

    相机和livox激光雷达外参标定:ROS功能包---livox_camera_lidar_calibration 相机与激光雷达外参标定 功能包介绍 环境配置及功能包安装 功能包节点 准备内容 1 l ...

  7. F-LOAM:基于激光雷达的快速里程计和建图

    文章:F-LOAM : Fast LiDAR Odometry and Mapping 作者:Han Wang, Chen Wang, Chun-Lin Chen, and Lihua Xie git ...

  8. EAI激光雷达X4使用gmapping与laser_scan_matcher建图(二)

    以下便是gmapping+laser_scan_matcher提供的2Dpose的launch文件源码,这里将laser_scan_matcher提供的2Dpose当作里程计来使用: <!-- ...

  9. EAI激光雷达X4使用gmapping与laser_scan_matcher建图(一)

    由于底盘部分没处理好,想了个偏门的法子,就是利用雷达扫描与周围环境匹配实现位姿估计,将位姿估计当做里程计提供给gmapping进行建图,经过博主测试,使用gmapping+laser_scan_mat ...

最新文章

  1. 什么是REST?以及RESTful的实现之二
  2. 在高科技产业当中,有时候你的产品出现了问题,你反过来可以把这个问题称为你的特点...
  3. 四、操作系统——读者写者问题(详解)
  4. ffmpeg系列-编译
  5. 测试人员该学习哪些Linux知识
  6. FPGA驱动USB协议芯片的测试
  7. 全志平台速鼎模块的BT调试记录
  8. 2021最新Chrome 88版本 绕过webdriver检测
  9. c++编程求解二元二次方程组_c++:求解二元二次方程组(解析解)
  10. 玩转IE之自动切换代理服务器
  11. POS收银系统对商家的影响不可小看
  12. 微软常用运行库合集(3264位)
  13. 机器人驻场富士康,流水线青年的自救
  14. java 之JNLP
  15. 2016年当程序员有前途吗?
  16. led灯串怎么摆造型_用灯带设计的造型图片
  17. 基于STM32F103的红外遥控的一点浅显知识的分享
  18. jdk小工具jps介绍 - Sky's blog - BlogJava
  19. misc中文件无扩展名修复
  20. Google黑客语法总结

热门文章

  1. 设计模式(九)模版方法模式
  2. Sonar问题(一)Multi-threading - Call to static DateFormat
  3. 关于iframe 嵌套页面
  4. 创建Google play开发者账号,并验证身份通过
  5. (最详细)小米手机5s Plus的USB调试模式在哪里开启的经验
  6. linux 软件源 镜像源 yum apt pip
  7. ZOJ-1309-圆的切线
  8. Git分支合并操作教程(超详细配图说明)
  9. php uint,PHP内核 - 数据类型 - 变量
  10. css阴影遮盖其他组件