相机雷达联合标定cam_lidar_calibration

news/2024/4/17 5:44:45/文章来源:https://blog.csdn.net/qq_42227760/article/details/130282095

文章目录

    • 运行环境:
    • 1.1 ROS环境配置
      • 1)工作空间创建和编译
      • 2)官方数据集测试环境
    • 2.1 在线标定
      • 1)数据类型
      • 2)标定板制作
      • 3)配置文件
      • 4)开始标定
      • 5)完整实现步骤
    • 3.1 python版本选择
    • 3.2 rviz参数修改

运行环境:

ubuntu18.04.6 melodic
opencv 3.4.16
python 2.7.17 (ros自带)
usb-cam
速腾robosense 16

1.1 ROS环境配置

官方Github: https://github.com/acfr/cam_lidar_calibration
rs_to_velodyne :https://github.com/HViktorTsoi/rs_to_velodyne

1)工作空间创建和编译

# 创建工作空间
mkdir -p calib_new_ws/src
cd calib_new_ws/src# 克隆仓库
git clone -c http.sslverify=false https://gitlab.acfr.usyd.edu.au/its/cam_lidar_calibration.git# 下载ros和python依赖
sudo apt update && sudo apt-get install -y ros-noetic-pcl-conversions ros-noetic-pcl-ros ros-noetic-tf2-sensor-msgs
pip install pandas scipy# 编译
cd calib_new_ws
catkin_make

2)官方数据集测试环境

①开始标定

roslaunch cam_lidar_calibration run_optimiser.launch import_samples:=true

标定好的文件保存在 cam_lidar_calibration/data/vlp/路径下

②评估标定结果

roslaunch cam_lidar_calibration assess_results.launch csv:="$(rospack find cam_lidar_calibration)/data/vlp/calibration_quickstart.csv" visualise:=true

2.1 在线标定

1)数据类型

激光雷达点云类型为XYZIR
雷达话题数据类型 sensor_msgs::PointCloud2
相机话题数据类型 sensor_msgs::Image、sensor_msgs::CameraInfo

rostopic type /velodyne_points
rostopic type /usb_cam/image_raw
rostopic type /usb_cam/camera_info

标定好的文件保存在cam_lidar_calibration/data路径下

2)标定板制作

标定板打印路径
我们标定板大小:图3—A1(841 x 594mm), 小方格边长 95mm ,内部顶点 7x5

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

标定注意事项:标定板摆放与地面成45°角

3)配置文件

设置params.yaml中的话题和棋盘格大小(参考标定板制作内容)

# 速腾RS16 + usb_cam
camera_topic: "/usb_cam/image_raw"
camera_info: "/usb_cam/camera_info"
# rs 话题
# lidar_topic: "/rslidar_points" 
# rs_to_velodyne 话题
lidar_topic: "/velodyne_points"

在这里插入图片描述

4)开始标定

偏移量设置(减少平均误差) distance_offset_mm=-30
在这里插入图片描述

①启动标定包

roslaunch cam_lidar_calibration run_optimiser.launch import_samples:=false

②调整 rqt_reconfigure 中的 x、y 、 z 分离出棋盘点云, 分离好一张点Capture, 有问题的点discard。分离好20张左右点Optimise。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标定注意事项:对于 VLP-16,至少保证7条线打在标定板上

②获取标定结果

roslaunch cam_lidar_calibration assess_results.launch csv:="$(rospack find cam_lidar_calibration)/data/vlp/calibration_quickstart.csv" visualise:=true

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5)完整实现步骤

详细操作见博客:
Robosense激光雷达Linux配置
usb_cam 相机ROS配置
usb_cam相机标定实践 ROS

1.启动相机
cd /home/duduzai/SPbot/usb_cam_ws
source ./devel/setup.bash
roslaunch usb_cam usb_cam.launch2.启动雷达(注释雷达launch中的rviz)
cd /home/duduzai/SPbot/robosense_ws
source ./devel/setup.bash
roslaunch rslidar_sdk start.launch3.rs to velodyne
cd source ./devel/setup.bash
source ./devel/setup.bash
rosrun rs_to_velodyne rs_to_velodyne XYZIRT XYZIR4、标定
cd /home/duduzai/SPbot/calib_new_ws
source ./devel/setup.bash
roslaunch cam_lidar_calibration run_optimiser.launch import_samples:=false
roslaunch cam_lidar_calibration assess_results.launch csv:="$(rospack find cam_lidar_calibration)/data/vlp/calibration_2023-04-20_17-23-44.csv" visualise:=true

3.1 python版本选择

在这里插入图片描述

3.2 rviz参数修改

Panels:- Class: rviz/DisplaysHelp Height: 0Name: DisplaysProperty Tree Widget:Expanded:- /Global Options1- /Status1- /Image1- /Image2- /MarkerArray1Splitter Ratio: 0.5Tree Height: 366- Class: rviz/SelectionName: Selection- Class: rviz/Tool PropertiesExpanded:- /2D Pose Estimate1- /2D Nav Goal1- /Publish Point1Name: Tool PropertiesSplitter Ratio: 0.5886790156364441- Class: rviz/ViewsExpanded:- /Current View1Name: ViewsSplitter Ratio: 0.5- Class: rviz/TimeExperimental: falseName: TimeSyncMode: 0SyncSource: Image- Class: cam_lidar_calibration/CamLidarCalibrationName: CamLidarCalibration
Preferences:PromptSaveOnExit: true
Toolbars:toolButtonStyle: 2
Visualization Manager:Class: ""Displays:- Alpha: 0.5Cell Size: 1Class: rviz/GridColor: 160; 160; 164Enabled: trueLine Style:Line Width: 0.029999999329447746Value: LinesName: GridNormal Cell Count: 0Offset:X: 0Y: 0Z: 0Plane: XY# Plane Cell Count: 10Plane Cell Count: 50Reference Frame: <Fixed Frame>Value: true- Class: rviz/ImageEnabled: trueImage Topic: /gmsl/A0/image_colorMax Value: 1Median window: 5Min Value: 0Name: ImageNormalize Range: trueQueue Size: 2Transport Hint: rawUnreliable: falseValue: true- Class: rviz/ImageEnabled: true# Image Topic: /camera_featuresImage Topic: /usb_cam/image_rawMax Value: 1Median window: 5Min Value: 0Name: ImageNormalize Range: trueQueue Size: 2Transport Hint: rawUnreliable: falseValue: true- Alpha: 1Autocompute Intensity Bounds: trueAutocompute Value Bounds:Max Value: 10Min Value: -10Value: trueAxis: ZChannel Name: intensityClass: rviz/PointCloud2Color: 255; 255; 255Color Transformer: IntensityDecay Time: 0Enabled: trueInvert Rainbow: falseMax Color: 255; 255; 255# Max Intensity: 217Max Intensity: 155Min Color: 0; 0; 0Min Intensity: 1Name: Experimental RegionPosition Transformer: XYZQueue Size: 10Selectable: trueSize (Pixels): 3# Size (m): 0.009999999776482582Size (m): 0.01Style: Flat SquaresTopic: /feature_extraction/experimental_regionUnreliable: falseUse Fixed Frame: trueUse rainbow: trueValue: true- Alpha: 1Autocompute Intensity Bounds: trueAutocompute Value Bounds:Max Value: 10Min Value: -10Value: trueAxis: ZChannel Name: intensityClass: rviz/PointCloud2Color: 255; 255; 255Color Transformer: IntensityDecay Time: 0Enabled: trueInvert Rainbow: falseMax Color: 255; 255; 255Max Intensity: 60Min Color: 0; 0; 0Min Intensity: 1Name: ChessboardPosition Transformer: XYZQueue Size: 10Selectable: trueSize (Pixels): 3Size (m): 0.009999999776482582Style: Flat SquaresTopic: /feature_extraction/chessboardUnreliable: falseUse Fixed Frame: trueUse rainbow: trueValue: true- Class: rviz/MarkerArrayEnabled: trueMarker Topic: /feature_extraction/collected_samplesName: MarkerArrayNamespaces:Frame Rate: 30Name: rootTools:- Class: rviz/InteractHide Inactive Objects: true- Class: rviz/MoveCamera- Class: rviz/Select- Class: rviz/FocusCamera- Class: rviz/Measure- Class: rviz/SetInitialPoseTheta std deviation: 0.2617993950843811Topic: /initialposeX std deviation: 0.5Y std deviation: 0.5- Class: rviz/SetGoalTopic: /move_base_simple/goal- Class: rviz/PublishPointSingle click: trueTopic: /clicked_pointValue: trueViews:Current:Class: rviz/OrbitDistance: 7.726625442504883Enable Stereo Rendering:Stereo Eye Separation: 0.05999999865889549Stereo Focal Distance: 1Swap Stereo Eyes: falseValue: falseFocal Point:X: 2.3772096633911133Y: -1.2373826503753662Z: 1.9428495168685913Focal Shape Fixed Size: trueFocal Shape Size: 0.05000000074505806Invert Z Axis: falseName: Current ViewNear Clip Distance: 0.009999999776482582Pitch: 0.6603978276252747Target Frame: <Fixed Frame>Value: Orbit (rviz)Yaw: 2.71859073638916Saved: ~
Window Geometry:CamLidarCalibration:collapsed: falseDisplays:collapsed: falseHeight: 1075Hide Left Dock: falseHide Right Dock: trueImage:collapsed: falseQMainWindow State: 000000ff00000000fd00000004000000000000016a00000391fc020000000cfb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073000000003d000001ab000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000a0049006d006100670065010000003d000001660000001600fffffffb0000000a0049006d00610067006501000001a90000016d0000001600fffffffb0000000a0049006d0061006700650100000172000001400000000000000000fb0000002600430061006d004c006900640061007200430061006c006900620072006100740069006f006e010000031c000000b2000000a300ffffff000000010000010f00000315fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d00000315000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000078000000042fc0100000002fb0000000800540069006d0065010000000000000780000002eb00fffffffb0000000800540069006d00650100000000000004500000000000000000000006100000039100000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000Selection:collapsed: falseTime:collapsed: falseTool Properties:collapsed: falseViews:collapsed: trueWidth: 1920X: 1920Y: 201  Value: trueEnabled: trueGlobal Options:Background Color: 48; 48; 48Default Light: true# Fixed Frame: velodyne_front_link# Fixed Frame: rslidar Fixed Frame: velodyneFrame Rate: 30Name: rootTools:- Class: rviz/InteractHide Inactive Objects: true- Class: rviz/MoveCamera- Class: rviz/Select- Class: rviz/FocusCamera- Class: rviz/Measure- Class: rviz/SetInitialPoseTheta std deviation: 0.2617993950843811Topic: /initialposeX std deviation: 0.5Y std deviation: 0.5- Class: rviz/SetGoalTopic: /move_base_simple/goal- Class: rviz/PublishPointSingle click: trueTopic: /clicked_pointValue: trueViews:Current:Class: rviz/OrbitDistance: 7.726625442504883Enable Stereo Rendering:Stereo Eye Separation: 0.05999999865889549Stereo Focal Distance: 1Swap Stereo Eyes: falseValue: falseFocal Point:X: 2.3772096633911133Y: -1.2373826503753662Z: 1.9428495168685913Focal Shape Fixed Size: trueFocal Shape Size: 0.05000000074505806Invert Z Axis: falseName: Current ViewNear Clip Distance: 0.009999999776482582Pitch: 0.6603978276252747Target Frame: <Fixed Frame>Value: Orbit (rviz)Yaw: 2.71859073638916Saved: ~
Window Geometry:CamLidarCalibration:collapsed: falseDisplays:collapsed: falseHeight: 1075Hide Left Dock: falseHide Right Dock: trueImage:collapsed: falseQMainWindow State: 000000ff00000000fd00000004000000000000016a00000391fc020000000cfb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073000000003d000001ab000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000a0049006d006100670065010000003d000001660000001600fffffffb0000000a0049006d00610067006501000001a90000016d0000001600fffffffb0000000a0049006d0061006700650100000172000001400000000000000000fb0000002600430061006d004c006900640061007200430061006c006900620072006100740069006f006e010000031c000000b2000000a300ffffff000000010000010f00000315fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d00000315000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000078000000042fc0100000002fb0000000800540069006d0065010000000000000780000002eb00fffffffb0000000800540069006d00650100000000000004500000000000000000000006100000039100000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000Selection:collapsed: falseTime:collapsed: falseTool Properties:collapsed: falseViews:collapsed: trueWidth: 1920X: 1920Y: 201

⭐⭐⭐ 嘟嘟崽 ⭐⭐⭐
⭐⭐⭐ 祝你成功 ⭐⭐⭐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_102744.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4年的测试工程师,你遇到过自身瓶颈期吗?又是怎样度过的?

从毕业到现在已经快4年啦&#xff0c;一直软件测试行业混迹。我不是牛人&#xff0c;但是自我感觉还算是个合格的测试工程师&#xff0c;有必要写下自己将近4年来的经历&#xff0c;给自我以提示&#xff0c;给刚入行的朋友提供点参考。 貌似这一点适应的行业最广&#xff0c;…

Java——二叉搜索树的后序遍历序列

题目链接 牛客在线oj题——二叉搜索树的后序遍历序列 题目描述 输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。 数据范围&#xff1a; 节点数量 0≤n≤1000 …

自习室管理系统的设计与实现(论文+源码)_kaic

摘要 近年来&#xff0c;随着高校规模的逐步扩大&#xff0c;学生对高校自习室座位的需求也在不断增加。然而&#xff0c;一些高校仍然采用人工管理学院自习室座位&#xff0c;这大大降低了管理效率。显然&#xff0c;开发一个成本低、占用资源少、能提高高校自习室座位管理效率…

Junit 5 如何使用 Guice DI

Guice 是一个依赖注入的小清新工具。 相比 Spring 的依赖管理来说&#xff0c;这个工具更加小巧&#xff0c;我们可以在测试中直接使用。 Junit 5 在 Junit 中使用就没有那么方便了&#xff0c;因为 Junit 没有 Guice 的注解。 你需要手动写一个类&#xff0c;在这个类中&a…

ABeam Insight | 智能制造系列(6):虚拟/增强现实(VR/AR)×智能制造

虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;的概念早在20世纪60年代就被提出&#xff0c;但由于当时的技术水平无法满足相关应用的需求&#xff0c;这些概念并没有引起广泛关注。直到近年来随着计算机技术的飞速发展&#xff0c;虚拟现实和增强现…

nodejs+vue 文旅旅游公司智能管理OA系统

通过本次设计&#xff0c;让我学到了更多的知识&#xff0c;而且在设计中会有一些问题出现&#xff0c;最后通过查阅资料和在老师和同学的帮助下完成了系统的设计和开发&#xff0c;使得这次系统的开发非常的有意义。同时通过这次系统的设计也让我明白了自己在哪方面有不足&…

【PWN刷题__ret2text】[CISCN 2019华北]PWN1

ret2text~ 前言 依旧是简单的ret2text 一、checksec查看 No canary found 没有开启栈溢出保护 二、IDA反汇编 双击进入func() 发现后门函数system("cat/flag")&#xff1b;根据语义&#xff0c;函数提供了修改v1&#xff0c;判断v2是否等于11.28125&#xff0c;如…

项目沟通管理5大技巧 第4个很重要

1、充分使用twitter管理沟通模型 项目沟通会议可以充分使用witter的管理沟通模型&#xff0c;提高会议沟通效率。使用此模型&#xff0c;主要是有三步&#xff1a; 第一步&#xff1a;倾听&#xff0c;项目经理需要保持中立的立场&#xff0c;不先表态&#xff0c;让团队成员畅…

SAP ABAP 使用SICF发布HTTP API接口

一、SE24创建类&#xff1a;Z_HCX_HTTP 1、创建类&#xff1a; 2、切换到接口&#xff08;interface&#xff09;页签&#xff0c;输入IF_HTTP_EXTENSION &#xff0c;回车。切换到方法&#xff08;method&#xff09;页签&#xff0c;双击IF_HTTP_EXTENSION~HANDLE_REQUEST进…

STM32 产生随机数方式

STM32 产生随机数方式 C语言的stdlib.h库里的srand(unsigned seed)和rand(void)函数&#xff0c;可以配合产生伪随机数。其中srand(seed)产生算法种子&#xff0c;再由rand()通过算法产生随机数&#xff0c;产生的随机数在宏定义RAND_MAX范围内。如果seed不变&#xff0c;则产…

URL 转为QR code(二维码)

推荐一个良心的网站&#xff0c;能够免费地将url、text编码为二维码&#xff0c;而且还能设计logo、颜色等。 https://www.the-qrcode-generator.com/ 如下图&#xff1a; 可以自己定义logo、颜色&#xff1a; 还能查看扫描历史等统计信息&#xff1a; 上述所有功能都是免…

【虚拟仿真】Unity3D打包WEBGL后播放视频(VideoPlayer组件)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 本篇文章实现Unity3D打包WEBGL后播放视频&#xff0c;如下图所…

VGG网络与中间层特征提取

1. 背景 VGG是常见的用于大型图片识别的极深度卷积网络&#xff0c; 这里主要介绍VGG网络预测在ImageNet数据集上的训练及预测。 2. ImageNet图像数据集简介 ImageNet包含了145W张224*224像素的三通道彩色图像数据集&#xff0c;图像划分为1000个种类。其中训练集130W张&…

Observability:添加免费和开放的 Elastic APM 作为 Elastic 可观察性部署的一部分 - 8.x

作者&#xff1a;David Hope 在最近的一篇博文中&#xff0c;我们向你展示了如何开始使用 Elastic 可观察性的免费开放层。 下面&#xff0c;我们将介绍你需要做些什么来扩展你的部署&#xff0c;这样你就可以开始免费从应用程序性能监控&#xff08;APM&#xff09;或跟踪集群…

可算是熬出头了,测试4年,费时8个月,入职阿里,涨薪14K

前言 你的努力&#xff0c;终将成就无可替代的自己。 本科毕业后就一直从事测试的工作&#xff0c;和多数人一样&#xff0c;最开始从事点点点的工作&#xff0c;看着自己的同学一步一步往上走&#xff0c;自己还是在原地踏步&#xff0c;说实话这不是自己想要的状态。 一年半…

为什么你永远不应该在CSS中使用px来设置字体大小

代码部署后可能存在的BUG没法实时知道&#xff0c;事后为了解决这些BUG&#xff0c;花了大量的时间进行log 调试&#xff0c;这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。 在Josh Collinsworth的博客文章“永远不要用px作为字体大小”中&#xff0c;作者讨论了为什么不…

Ceph入门到精通-Ceph 编排器简介

第 1 章 Ceph 编排器简介 作为存储管理员&#xff0c;您可以将 Ceph 编排器与 Cephadm 实用程序搭配使用&#xff0c;能够发现设备并在 Red Hat Ceph Storage 集群中创建服务。 1.1. 使用 Ceph Orchestrator Red Hat Ceph Storage Orchestrators 是经理模块&#xff0c;主要…

C语言函数大全-- o 开头的函数

C语言函数大全 本篇介绍C语言函数大全-- o 开头的函数 1. obstack_init&#xff0c;obstack_free&#xff0c;obstack_alloc&#xff0c;obstack_blank&#xff0c;obstack_grow 1.1 函数说明 函数声明函数功能void obstack_init(struct obstack *obstack_ptr);它是 POSIX …

TypeScript自学笔记

目录 1.什么是Ts? 1.1 设计公司&#xff1a;微软 1.2 TS概述 1.3 TS是静态类型 JS是动态类型 1.4 TS是强类型语言 JS是弱类型语言 2.TypeScript编译器 2.1 安装 2.2 TS自动编译和编译选项设置 3.TS的数据类型 3.1 基础数据类型number、string、boolean 3.2 Arrays&a…

美颜sdk开发实践:如何构建美颜sdk功能?

美颜功能是现今很多应用中必不可少的一项功能。而要实现美颜功能&#xff0c;除了自己编写美颜算法外&#xff0c;还可以使用美颜sdk来实现。本文将介绍如何从零开始构建美颜功能&#xff0c;利用美颜sdk实现美颜效果。 一、简介 美颜sdk可以向用户提供多种美颜效果&#xff…