资讯动态

多激光雷达到车体的标定

发布时间:2026/9/6 8:32:41 来源:尧图企业网站定制
0.标定准备代码准备multi_lidar目录lidar_align_tool功能包用于初始标定multi_ldiar_calibrator功能包用于单个从雷达到主雷达的标定lidar_calib目录multi_ldiar_calibrator功能包用于单个雷达到车体后轴的标定主要是roll pitch yaw。multi_lidar_merge功能包用于多个雷达的融合以同一帧点云发布。这里以三个雷达标定为例进行说明topics:/cx/pcl_right51122msgs:sensor_msgs/PointCloud2//定义为主雷达/livox/lidar_192_168_1_10325561msgs:sensor_msgs/PointCloud2//定义为从雷达1/livox/lidar_192_168_2_10225561msgs:sensor_msgs/PointCloud2//定位为从雷达2三个雷达的初始安装如下所示初始static_tf如下ros2 run tf2_ros static_transform_publisher x y z yaw pitch roll frame_id child_frame_id使用以米为单位的 x/y/z 偏移量和以弧度为单位的滚动/俯仰/偏航向 tf2 发布静态坐标变换。 roll/pitch/yaw 分别指的是围绕 x/y/z 轴的旋转。launchnode pkgtf2_rostypestatic_transform_publishernamelidar_bl2c10args0.95 0 1.15 0.0 0.0 0.0 /base_link /velodyne_right/node pkgtf2_rostypestatic_transform_publishernamelidar_laser1Tolaser3args-1.834 0.854 -0.63 3.14159 0 3.1415926 /velodyne_right /laser_link2/node pkgtf2_rostypestatic_transform_publishernamelidar_laser2Tolaser3args0.645 -0.856 -0.63 0.0 0.0 3.1415926 /velodyne_right /laser_link1//launch1.主雷达到车体坐标系的标定准备工作车体坐标系定义:前x 左y 上z。同ROS坐标系一致标定目标:主雷达相对于车体的 x y z roll pitch yaw方法:x y z的参数借助测距仪量取雷达在车体坐标系下的位置本例雷达相对车体坐标系的位置为0.95 0 1.15roll pitch yaw的参数就是找一个水平的地面和垂直地面的墙;将车体与墙面空间上垂直是否垂直可以用测距仪测量一下车的某个面上任意一点相对于墙面的距离相等保证有多条线束扫描到地面和墙面具体步骤1multi_lidar_calibration目前可同时标定两个雷达。多个雷达也可以改代码但是我这里只标定主雷达即可将其中的src/lidar_calb/multi_lidar_calibration/config/config_prototype.yaml改为主雷达对应的配置参数将测距仪得到的平移量输入我这里以FL为主雷达的参数INIT_ANGEL_FL:HEADING:0.0PITCH:0.0ROLL:0.0INIT_ANGEL_FR:HEADING:0.0PITCH:0.0ROLL:0.0#translationINIT_TRANSLATION_FL:X:0.95Y:0.0Z:1.15INIT_TRANSLATION_FR:X:0.0Y:0.0Z:0.02.设定标定区域先确认雷达的标定区域具体就是rviz可视化数据用grid30个格子一个格子1m衡量距离。从框的大小来看墙在前方17m处为了把地面也检测出来选择-15到17m之间的点云左右4m即可3.修改标定参数找到代码src/lidar_calb/multi_lidar_calibration/src/multi_lidar_calibration_core.cpp![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/893821455232492fa3a581591bd48cc3.png视标定场景的范围而定修改完后保存重新catkin_make编译即可。4.启动标定roslaunch multi_lidar_calibration calibration_prototype.launch从rviz的frameid 可以看到这是主雷达的标定结果黄色为墙面 绿色为地面终端显示将这个结果填到src/lidar_calb/multi_lidar_calibration/config/config_prototype.yamlINIT_ANGEL_FL:HEADING:-3.8PITCH:-0.99ROLL:0.8INIT_ANGEL_FR:HEADING:0.0PITCH:0.0ROLL:0.0#translationINIT_TRANSLATION_FL:X:0.95Y:0.0Z:1.15INIT_TRANSLATION_FR:X:0.0Y:0.0Z:0.0再次运行roslaunch multi_lidar_calibration calibration_prototype.launch可以看到参数收敛标定结束。标定结果检验找到src/lidar_calb/multi_lidar_merge/config/static_tf.launch将标定出来的值 取反HEADING: 3.8PITCH: 0.99ROLL: -0.8计算他们的弧度值填入yaw、pitch、roll。弧度角度xPI/180node pkgtf2_rostypestatic_transform_publishernamelidar_bl2c10args0.95 0 1.15 0.06632251 0.01727875 -0.013962634 /base_link /velodyne_right/在此src/lidar_calb/multi_lidar_merge/config$ 目录下运行roslaunch static_tf.launch新开终端运行 rviz -f base_link新开终端播放数据 rosbag play --clock 2026-09-05-13-49-11.bag -l从三视图来看yaw是ok的roll,pitch陷入局部最优需要手动微调。直至与白框线条对齐。目前来看最明显的就是pitch角最差先调。调试方法可以先给roll或者pitch一个相反数然后再看可视化效果如果相反数调节不行就用二分法直至地面与白框平行。调节后视图如下就这样可以了。2.从雷达到主雷达的标定1初始外参准备我这里直接用两个从雷达到主雷达的较为准确的初始外参先跳过lidar_align_tool的运行。这里直接用multi_lidar_calibrator功能包。src/lidar_calb/multi_lidar_merge/config/static_tf.launch添加两个从雷达到velodyne_right的初始外参。launchnode pkgtf2_rostypestatic_transform_publishernamelidar_bl2c10args0.95 0 1.15 0.06632251 -0.01727875 -0.013962634 /base_link /velodyne_right/node pkgtf2_rostypestatic_transform_publishernamelidar_laser1Tolaser3args-1.834 0.854 -0.63 3.1415926 0.0 3.1415926 /velodyne_right /laser_link2/node pkgtf2_rostypestatic_transform_publishernamelidar_laser2Tolaser3args0.645 -0.856 -0.63 0.0 0.0 3.1415926 /velodyne_right /laser_link1//launch2初始外参写入整完毕后将界面上的数值记录并填入工具目录下src/multi_lidar/multi_lidar_calibrator/run.sh中同时修改points_child_src与points_parent_src的topic修改完成后如下roslaunch multi_lidar_calibrator multi_lidar_calibrator.launch points_child_src:/livox/lidar_192_168_2_102 points_parent_src:/cx/pcl_right x:0.645y:-0.856z:-0.63yaw:0.0pitch:0.0roll:3.14159roslaunch multi_lidar_calibrator multi_lidar_calibrator.launch points_child_src:/livox/lidar_192_168_1_103 points_parent_src:/cx/pcl_right x:-1.834y:0.854z:-0.63yaw:3.14159pitch:0.0roll:3.141593开始标定标定/livox/lidar_192_168_2_102雷达打开终端运行指令roslaunch multi_lidar_calibrator multi_lidar_calibrator.launch points_child_src:/livox/lidar_192_168_2_102 points_parent_src:/cx/pcl_right x:0.645y:-0.856z:-0.63yaw:0.0pitch:0.0roll:3.14159开始计算后打开rviz,添加主激光雷达topic与计算过程中的雷达topic/points_calibrated观察两个雷达点云重叠情况当观察到两个点云基本重合后即可用ctrlc停止工具无需等待默认400次迭代完成停止后取控制台最后一次打印结果rosrun tf static_transform_publisher0.605634-0.890437-0.5609793.05476-3.136410.0137358/velodyne_right/laser_link110Corresponding transformation matrix:0.996219-0.08664820.006349430.605634-0.0867261-0.9961440.0132346-0.8904370.0051782-0.0137352-0.999892-0.5609790001该结果则为最终标定结果将得出的结果填入static_tf.launch文件中launchnode pkgtf2_rostypestatic_transform_publishernamelidar_bl2c10args0.95 0 1.15 0.06632251 -0.01727875 -0.013962634 /base_link /velodyne_right/node pkgtf2_rostypestatic_transform_publishernamelidar_laser1Tolaser3args-1.834 0.854 -0.63 3.1415926 0.0 3.1415926 /velodyne_right /laser_link2/node pkgtf2_rostypestatic_transform_publishernamelidar_laser2Tolaser3args0.605634 -0.890437 -0.560979 3.05476 -3.13641 0.0137358 /velodyne_right /laser_link1//launch同理标定/livox/lidar_192_168_1_103雷达打开终端运行指令roslaunch multi_lidar_calibrator multi_lidar_calibrator.launch points_child_src:/livox/lidar_192_168_1_103 points_parent_src:/cx/pcl_right x:-1.834y:0.854z:-0.63yaw:3.14159pitch:0.0roll:3.14159开始计算后打开rviz,添加主激光雷达topic与计算过程中的雷达topic/points_calibrated观察两个雷达点云重叠情况取控制台最后一次打印结果Normal Distributions Transform converged:1score:2.84208prob:1.12393transformation from laser_link2 to velodyne_right This transformation can be replicatedusing:rosrun tf static_transform_publisher-1.84010.987424-0.5359893.05544-0.00823685-3.12103/velodyne_right/laser_link210Corresponding transformation matrix:-0.9962570.0858637-0.00997376-1.84010.08604770.996095-0.01977610.9874240.00823676-0.0205603-0.999755-0.5359890001该结果则为最终标定结果将得出的结果填入static_tf.launch文件中launchnode pkgtf2_rostypestatic_transform_publishernamelidar_bl2c10args0.95 0 1.15 0.06632251 -0.01727875 -0.013962634 /base_link /velodyne_right/node pkgtf2_rostypestatic_transform_publishernamelidar_laser1Tolaser3args-1.8401 0.987424 -0.535989 3.05544 -0.00823685 -3.12103 /velodyne_right /laser_link2/node pkgtf2_rostypestatic_transform_publishernamelidar_laser2Tolaser3args0.605634 -0.890437 -0.560979 3.05476 -3.13641 0.0137358 /velodyne_right /laser_link1//launch4将以上的static_tf.launch体现的从雷达到主雷达的关系转换到各个雷达相对于车体坐标系的关系src/lidar_calb/multi_lidar_merge/config/launch_to_yaml.py。在config目录下运行python3 launch_to_yaml.py static_tf.launch config_prototype_three_lidar_to_chassis.yaml会生成此文件src/lidar_calb/multi_lidar_merge/config/config_prototype_three_lidar_to_chassis.yamlINIT_ANGEL_FL:HEADING:175.063817PITCH:-0.471937ROLL:-178.821847INIT_ANGEL_FR:HEADING:0.000000PITCH:0.000000ROLL:179.999997INIT_ANGEL_TP:HEADING:3.800000PITCH:-0.989999ROLL:-0.800000#translationINIT_TRANSLATION_FL:X:-1.840100Y:0.987424Z:-0.535989INIT_TRANSLATION_FR:X:0.645000Y:-0.856000Z:-0.630000INIT_TRANSLATION_TP:X:0.950000Y:0.000000Z:1.150000回放录制的数据包rosbag play -l c16_front.bag在工具根目录下新建终端运行tf坐标转换roslaunch static_tf.launch3.新建终端运行lidar_calibration_ws工具cd lidar_calibration_wssource devel/setup.bashroslaunch lidar_align_tool lidar_align.launch4.在弹出的rviz界面上选择Add-By topic选中主激光雷达topic/lidar_points选中后可在rviz界面中看到两个激光雷达点云同时存在界面上可修改左侧点云大小配置以便于标定5.编辑与rviz同时弹出的界面Lidar Mouting Calibration Tool3. 标定融合这里说明一下multi_lidar_merge功能包的配置。该示例我们使用了main_prototype_three_lidar_to_chassis他是融合三个点云分别以不同颜色表示具体如下。运行roslaunch multi_lidar_merge three_lidar_merge_prototype_to_chassis.launch新开终端运行rviz -f base_link回放数据rosbag play --clock 2026-09-05-13-49-11.bag -l都与白框平行满足条件。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价