ROS2标定板aruco apriltag

发布时间:2026/8/12 17:40:04

ROS2标定板aruco apriltag
ROS2标定板aruco apriltaghttps://blog.csdn.net/wangmj_hdu/article/details/111233878AprilTag标记跟踪 · OpenMV中文入门教程https://blog.csdn.net/sinat_16643223/article/details/137357584https://docs.opencv.org/3.4/d5/d1f/calib3d_solvePnP.html安装docker pull ubuntu:22.04docker run -it --user root --gpus all \ -v /etc/localtime:/etc/localtime:ro \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAYunix$DISPLAY \ -e GDK_SCALE \ -e GDK_DPI_SCALE \ --network host \ --volume /home/zoujiu/data:/home/data \ --volume /home/zoujiu/Downloads:/home/Downloads \ --volume /home/zoujiu/Desktop/projects:/home/Desktop \ --shm-size 30G --name ros2humble ubuntu:22.04 /bin/bashhttps://docs.ros.org/en/humble/Installation/Alternatives/Ubuntu-Development-Setup.htmlhttps://docs.ros.org/en/humble/Installation/Alternatives/Ubuntu-Development-Setup.html1 报错No rospy 使用rclpyNo cv_bridge https://index.ros.org/p/cv_bridge/git clone https://github.com/ros-perception/vision_opencv.git -b humble cd .. colcon build --symlink-install *colcon build --symlink-install --packages-select image_pipeline**# *https://index.ros.org/p/cv_bridge/# ros2 run image_view image_view --ros-args --remap image:/camera/rgb/image_raw --log-level debug*# *https://github.com/ros-perception/image_pipeline.git*# *https://index.ros.org/p/image_view/# colcon build --symlink-installcolcon build --symlink-install --packages-select image_pipeline配置**apt-get** install python3-cv-bridge python3-rospy **pip** install sensor_msgs --extra-index-url https://rospypi.github.io/simple/ *# https://www.cnblogs.com/yunhgu/p/15785460.html*2 标定要求的鱼眼相机标定对采集图片的要求核心目标只有一个让标定算法能稳定、准确地估计内参和畸变最终重投影误差 ≤ 0.5 像素。下面我给你按「必满足」和「加分项」分清楚方便你照着执行。✅ 必须满足的硬性要求少一个都可能标崩棋盘格本身必须合格格子数量内角点黑白交界点行列数要写对比如(8, 6)你代码里的CHECKERBOARD必须和实际完全一致。棋盘格要平整不能有弯曲、折痕、鼓包尤其是鱼眼镜头边缘轻微变形都会导致角点检测不准。格子尺寸必须真实准确比如每个格子 25mm标定代码里的SQUARE_SIZE要和实际完全一致否则外参全错内参也会受影响。角点必须能稳定检测到每张图片里棋盘格角点必须全部被检测到不能缺角点也不能只检测到部分。角点清晰锐利没有模糊、反光、阴影对比度要高。棋盘格不能被手、设备、人等遮挡边缘的角点也必须完整可见。覆盖足够多的镜头区域最关键鱼眼标定必须让棋盘格出现在画面中心画面四角和边缘不同高度、不同倾斜角度覆盖原则至少 15~20 张图片覆盖整个鱼眼视野尤其是边缘区域边缘区域必须有足够多的棋盘格否则边缘畸变无法被正确估计不要只拍中心位置的几张这样标出来的畸变参数基本是错的角度和姿态要多样化棋盘格要多拍不同倾斜角度上仰、下俯、左倾、右倾多拍不同距离近景格子占画面 1/3 以上、中景、远景格子在画面中占比适中多拍不同旋转角度棋盘格不要总是水平竖直适当旋转 30°/45° 拍几组避免这些致命场景强烈反光棋盘格反光、玻璃反射、强光直射运动模糊手持抖动导致的拖影严重过曝 / 欠曝棋盘格黑白边界不清晰棋盘格离镜头过近 / 过远角点太小或超出画面画面裁剪 / 畸变拍摄过程中不要对图片做任何裁剪、拉伸、畸变矫正标定用原始鱼眼原图 能让标定效果翻倍的加分项图片数量与质量建议采集 30~50 张比 10 张更稳尤其是鱼眼边缘畸变需要更多数据约束所有图片分辨率必须一致不能混不同分辨率的照片同一场景、同一棋盘格多拍几张不同角度避免单张异常数据影响整体结果棋盘格摆放技巧让棋盘格出现在画面的四个角落各几次边缘畸变估计会更准至少有 3~5 张图片里棋盘格同时覆盖画面中心和边缘倾斜拍摄时让棋盘格的一部分靠近镜头另一部分远离这样 Z 轴信息更丰富环境条件光线均匀柔和避免局部强光和大面积阴影相机固定避免拍摄过程中相机晃动如果是手持尽量稳定棋盘格背景尽量简单避免复杂纹理干扰角点检测 简单自检清单按这个检查你的数据集棋盘格内角点数量和代码里的CHECKERBOARD完全一致所有图片角点都能被findChessboardCorners完整检测棋盘格出现在画面中心、边缘、四角有不同倾斜、旋转、距离的图片没有反光、模糊、遮挡、过曝 / 欠曝图片数量 ≥ 15 张推荐 30~50 张所有图片都是鱼眼原始图没有裁剪 / 畸变矫正如果你愿意我可以帮你写一个批量角点检测脚本一键检查你的所有标定图片是否合格哪些图片角点检测失败帮你快速筛掉不合格的照片只保留能让标定一次成功的数据集。ROS2发布视频帧*#!/usr/bin/env python* *#coding:utf-8* import **os** *# os.environ[PYTHONPATH]/opt/ros/humble/lib/python3.10/site-packages;/opt/ros/humble/local/lib/python3.10/dist-packages* import **rclpy** import **sys** **sys**.path.**append**(.) import **cv2** import **time** from **rclpy**.**node** import **Node** import **numpy** as **np** from **sensor_msgs**.**msg** import **Image** from cv_bridge import CvBridge, CvBridgeError def **pubVideo**(): **rclpy**.**init**() nod **rclpy**.**create_node**(frame) pub nod.**create_publisher**(**Image**, /camera/rgb/image_raw, qos_profile1) *# rate nod.create_rate(5)* HZ 5 path /home/Desktop/ros2/002.mp4 cap **cv2**.**VideoCapture**(path) scaling_factor 0.5 bridge CvBridge() if not cap.**isOpened**(): **sys**.stdout.**write**(vedio is not available !) return -1 count 0 ret True while ret: ret, frame cap.**read**() if ret: count count 1 else: **rclpy**.loginfo(Capturing image failed.) if count 2: count 0 frame **cv2**.**resize**(frame,None,fxscaling_factor,fyscaling_factor,interpolation**cv2**.INTER_AREA) msg bridge.cv2_to_imgmsg(frame, encodingbgr8) pub.**publish**(msg) **print**(** publishing webcam_frame ***) *# rate.sleep()* **time**.**sleep**(1 / HZ) kk 0 **rclpy**.**shutdown**() if __name__ __main__: *# https://index.ros.org/p/cv_bridge/* *# ros2 run image_view image_view --ros-args --remap image:/camera/rgb/image_raw --log-level debug* try: **pubVideo**() except **rclpy**.ROSInterruptException: pass3 aruco自定义字典的作用含义自定义 ArUco 字典 作用、含义、使用方法超级通俗版我用最简单、最实用的方式给你讲清楚你马上就能用在你的多相机标定代码里。一、自定义 ArUco 字典 是什么含义ArUco 字典 一套二维码的编码规则它决定了二维码长什么样6×6 / 7×7一共有多少个不同的二维码100个 / 1000个哪些ID是合法的二维码之间差异多大防止误识别自定义字典 你自己造一套专属二维码别人用通用字典扫不出来只有你能扫。二、自定义字典 作用为什么要用1. 防止别人的二维码干扰你的检测工厂/车内环境如果有别人的二维码通用字典会误识别。自定义字典 只认你自己打印的码。2. 二维码数量你自己定OpenCV 自带字典最多 1000 个你可以做10000 个。3. 二维码尺寸你自己定6×6、7×7、8×8 随便选。4. 适合多相机、多传感器标定系统你现在做的车载多相机外参标定必须用自定义字典避免干扰。三、自定义字典 怎么用3步万能流程第1步创建字典生成XMLimport **cv2** *6x6 网格一共 1000 个二维码* dict **cv2**.**aruco**.**extendDictionary**(nMarkers1000, markerSize6) dict.maxCorrectionBits 6 *保存成 XML 文件和你 1000_6.xml 一样* fs **cv2**.**FileStorage**(my_dict.xml, **cv2**.FILE_STORAGE_WRITE) dict.**writeDictionary**(fs) fs.**release**()第2步生成二维码图片打印出来贴车上img **cv2**.**aruco**.**generateImageMarker**(dict, id0, sidePixels400) **cv2**.**imwrite**(marker0.png, img)第3步在你的相机标定代码里 加载自定义字典fs **cv2**.**FileStorage**(my_dict.xml, **cv2**.FILE_STORAGE_READ) bytesList fs.**getNode**(bytesList).**mat**() ms **int**(fs.**getNode**(markerSize).**real**()) mc **int**(fs.**getNode**(maxCorrectionBits).**real**()) fs.**release**() *加载你的 XML* *重建字典* aruco_dict **cv2**.**aruco**.Dictionary_create(1,1) aruco_dict.bytesList bytesList aruco_dict.markerSize ms aruco_dict.maxCorrectionBits mc *检测* detector **cv2**.**aruco**.**ArucoDetector**(aruco_dict, **cv2**.**aruco**.**DetectorParameters**()) corners, ids, _ detector.**detectMarkers**(gray)四、一句话总结最重要自定义 ArUco 字典 你自己的专属二维码家族作用防干扰、更稳定、适合车载多相机标定使用生成XML → 打印二维码 → 代码加载XML五、我可以直接帮你把 你的多相机标定代码 改成支持自定义字典从1000_6.xml加载的最终完整版4、自定义aruco字典下面我给你一套完整、可直接运行的流程生成自定义 ArUco 字典 → 保存为 XML → 在你的多相机标定代码里加载这个 XML。全程 Python OpenCV4和你现在的代码无缝对接。一、核心概念先搞懂一个 ArUco 字典由三个参数决定markerSize内部位矩阵大小如6表示 6×6 位不含边框nMarkers字典里有多少个标记ID 0 ~ nMarkers-1maxCorrectionBits最多可纠正的错误位数一般 markerSize你之前的1000_6.xml就是markerSize 6nMarkers 1000maxCorrectionBits 6二、生成自定义字典并保存为 XML直接运行import **cv2** import **numpy** as **np** *-------- 1. 自定义字典参数 --------* nMarkers 1000 *# 标记数量ID 0~999* markerSize 6 *# 6×6 位* maxCorrectionBits 6 *-------- 2. 创建自定义字典 --------* *方法extendDictionaryOpenCV 官方推荐* custom_dict **cv2**.**aruco**.**extendDictionary**( nMarkersnMarkers, markerSizemarkerSize ) custom_dict.maxCorrectionBits maxCorrectionBits *-------- 3. 保存为 XML和你 1000_6.xml 格式完全一致 --------* xml_path custom_1000_6.xml fs **cv2**.**FileStorage**(xml_path, **cv2**.FILE_STORAGE_WRITE) custom_dict.**writeDictionary**(fs) fs.**release**() **print**(f✅ 自定义字典已保存{xml_path}) **print**(f nMarkers{nMarkers}, markerSize{markerSize}) 运行后得到 custom_1000_6.xml**和你原来的 1000_6.xml 结构完全一样**。三、在你的多相机标定代码里加载自定义 XML把你代码里“ArUco 字典”那一段替换成下面这段* 加载自定义 ArUco 字典从 XML * dictFile /home/zoujiu/Desktop/.../custom_1000_6.xml *# 你的路径* cv_file **cv2**.**FileStorage**(dictFile, **cv2**.FILE_STORAGE_READ) bytesList cv_file.**getNode**(bytesList).**mat**() markerSize **int**(cv_file.**getNode**(markerSize).**real**()) maxCorrectionBits **int**(cv_file.**getNode**(maxCorrectionBits).**real**()) cv_file.**release**() *重建字典* aruco_dict **cv2**.**aruco**.Dictionary_create(markerSize, nMarkers) aruco_dict.bytesList bytesList aruco_dict.markerSize markerSize aruco_dict.maxCorrectionBits maxCorrectionBits detector **cv2**.**aruco**.**ArucoDetector**(aruco_dict, **cv2**.**aruco**.**DetectorParameters**()) 这样就**完全替代预定义字典**用你自己的 1000_6.xml 了。四、只生成指定 ID 的子集常用如果你不想 1000 个只要比如 0~9*从大字典里截取 ID 0~9* sub_dict **cv2**.**aruco**.custom_dictionary(10, 6) for i in **range**(10): sub_dict.bytesList[i] custom_dict.bytesList[i]五、生成标记图片用来打印size_px 300 *# 图片像素* for **id** in **range**(5): *# 生成前 5 个* img **cv2**.**aruco**.**generateImageMarker**(custom_dict, **id**, size_px) **cv2**.**imwrite**(fmarker_{**id**}.png, img)六、总结你要的一句话自定义字典用cv2.aruco.extendDictionary()生成保存 XMLdict.writeDictionary(fs)加载 XMLFileStorage读bytesList/markerSize替换你代码直接把字典部分换成“从 XML 加载”要不要我把完整的“生成XML多相机标定”合并成一个最终版脚本

相关新闻

图片GPS元数据操作指南:从Exif原理到隐私保护实战

图片GPS元数据操作指南:从Exif原理到隐私保护实战

2026/8/12 17:40:04

1. 从一张照片说起:GPS元数据的隐秘世界你可能没意识到,当你用手机拍下一张照片并随手分享到社交网络时,除了图像本身,还有一整套“数字行李”被一同打包发送了出去。这其中,最引人注目的就是GPS地理位置信息。它精确地…

迭代加深-加成序列、双向DFS-送礼物、IDA*-排书、 回转游戏

迭代加深-加成序列、双向DFS-送礼物、IDA*-排书、 回转游戏

2026/8/12 17:40:04

满足如下条件的序列 X&#xff08;序列中元素被标号为 1、2、3…m&#xff09;被称为“加成序列”&#xff1a;X[1]1X[m]nX[1]<X[2]<…<X[m−1]<X[m]对于每个 k&#xff08;2≤k≤m&#xff09;都存在两个整数 i 和 j &#xff08;1≤i,j≤k−1&#xff0c;i 和 j …

Spring Boot集成Redis:模式选型与性能优化实战

Spring Boot集成Redis:模式选型与性能优化实战

2026/8/12 17:30:04

1. Redis与Spring Boot集成概述 Redis作为当今最流行的内存数据库之一&#xff0c;在Spring Boot生态中扮演着重要角色。我经历过从早期Spring Data Redis的简单封装到现在成熟的全模式支持&#xff0c;深刻体会到不同部署模式对系统架构的影响。在真实生产环境中&#xff0c;R…

链表与哈希表:数据结构核心原理与工程实践

链表与哈希表:数据结构核心原理与工程实践

2026/8/12 18:40:07

1. 数据结构入门&#xff1a;为什么链表和哈希表是核心基础 刚入行那会儿&#xff0c;我总以为数据结构就是些抽象概念&#xff0c;直到第一次面试被要求手写链表反转才意识到它的重要性。链表和哈希表作为数据结构中最基础也最实用的两种结构&#xff0c;几乎出现在所有技术岗…

基于YOLOv8+pyqt5的农作物识别检测系统1(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

基于YOLOv8+pyqt5的农作物识别检测系统1(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

2026/8/12 18:40:07

基于YOLOv8pyqt5的农作物识别检测系统1(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_ 内含CWC数据集 包含蓝草、藜、刺菜、玉米、莎草、棉花、茄属植物、番茄、天鹅绒、生菜、萝卜&#xff0c;11类农作物 也可自行替换模型&#xff0c;使用该…

Godot贪吃蛇开发:游戏循环、状态管理与性能优化实践

Godot贪吃蛇开发:游戏循环、状态管理与性能优化实践

2026/8/12 18:40:07

1. 项目概述与核心思路 最近在社区里看到不少朋友在用Godot引擎复刻经典游戏&#xff0c;其中“贪吃蛇”的出镜率相当高。这确实是个绝佳的练手项目&#xff0c;它麻雀虽小&#xff0c;五脏俱全&#xff0c;几乎涵盖了2D游戏开发的所有基础概念&#xff1a;场景管理、节点控制、…

Wi-Fi信道与频宽详解:从5GHz到6GHz,优化网络速度与稳定性的核心指南

Wi-Fi信道与频宽详解:从5GHz到6GHz,优化网络速度与稳定性的核心指南

2026/8/12 18:40:07

1. 项目概述&#xff1a;从“信道”与“频宽”出发&#xff0c;理解现代Wi-Fi的基石最近在折腾家里的网络&#xff0c;从老旧的Wi-Fi 5路由器升级到了支持Wi-Fi 6的设备&#xff0c;后来又眼馋Wi-Fi 7的宣传&#xff0c;发现了一个挺有意思但又容易让人迷糊的点&#xff1a;同样…

C++项目工程化实战:gflags配置管理与gtest单元测试框架详解

C++项目工程化实战:gflags配置管理与gtest单元测试框架详解

2026/8/12 18:40:07

1. 项目概述&#xff1a;为什么我们需要gflags和gtest&#xff1f;在C项目开发里&#xff0c;尤其是当你从写“玩具”代码转向构建一个正经的、需要维护和协作的项目时&#xff0c;两个问题会立刻变得尖锐起来&#xff1a;第一&#xff0c;如何优雅地管理那些运行时才确定的配置…

从单智能体到多智能体协作:AgentRun生产级架构解析与实践指南

从单智能体到多智能体协作:AgentRun生产级架构解析与实践指南

2026/8/12 18:30:06

1. 从“单兵”到“团队”&#xff1a;为什么我们需要多智能体协作&#xff1f;如果你和我一样&#xff0c;在过去几年里深度使用过各种AI智能体&#xff08;Agent&#xff09;&#xff0c;大概率经历过这样一个阶段&#xff1a;兴奋地搭建起一个能自动写代码、查资料、做分析的…

比较好的亚太EMBA,问了6位校友师资差别真的挺大

比较好的亚太EMBA,问了6位校友师资差别真的挺大

2026/8/12 7:11:29

比较好的亚太EMBA核心差异先看什么&#xff1f;对于希望兼顾工作与系统管理能力提升的亚太区高管而言&#xff0c;筛选匹配度高的EMBA项目时&#xff0c;师资配置是决定学习体验与实际收获的核心要素之一。我们结合3-4个公开信息透明、办学历史较长的亚太区主流EMBA项目特点&am…

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

2026/8/11 8:44:43

备考海外游学的亚洲EMBA面试&#xff0c;核心要围绕项目国际化设计逻辑、个人跨文化管理经验匹配度两个维度准备&#xff0c;避免把游学模块等同于普通旅游参访的认知偏差。不少备考者花3个月对比6份资料&#xff0c;却容易忽略面试官对“国际视野落地能力”的考察——比如香港…

比较好的国内EMBA,问了二十位校友聊透人脉价值

比较好的国内EMBA,问了二十位校友聊透人脉价值

2026/8/11 15:57:54

比较好的国内EMBA核心差异体现在哪些方面&#xff1f;比较好的国内EMBA的核心长期价值&#xff0c;很大程度上依托于校友网络的连接质量与资源生态的活跃度&#xff0c;这也是不少高管在择校时优先考量的因素。我们结合3-4个市场关注度较高的项目公开信息&#xff0c;从课程、师…

告别模组冲突!5步掌握《神界:原罪2》模组管理的终极秘诀

告别模组冲突!5步掌握《神界:原罪2》模组管理的终极秘诀

2026/8/12 9:39:37

告别模组冲突&#xff01;5步掌握《神界&#xff1a;原罪2》模组管理的终极秘诀 【免费下载链接】DivinityModManager A mod manager for Divinity: Original Sin - Definitive Edition. 项目地址: https://gitcode.com/gh_mirrors/di/DivinityModManager 你是否曾经为《…

如何用Charge Limiter延长MacBook电池寿命:终极保护指南

如何用Charge Limiter延长MacBook电池寿命:终极保护指南

2026/8/12 9:39:37

如何用Charge Limiter延长MacBook电池寿命&#xff1a;终极保护指南 【免费下载链接】charge-limiter macOS app to set battery charge limit for Intel MacBooks 项目地址: https://gitcode.com/gh_mirrors/ch/charge-limiter 还在为MacBook电池健康度下降而烦恼吗&am…

推三返一模式5.0版本系统开发

推三返一模式5.0版本系统开发

2026/8/12 9:39:37

推三返一模式5.0版本系统开发要点编辑&#xff1a;araolin&#xff08;私域邦网络土土哥&#xff09;模式核心逻辑 推三返一是一种促销或分销机制&#xff0c;用户推荐三人完成特定行为&#xff08;如购买、注册&#xff09;&#xff0c;推荐人可获得返利或奖励。5.0版本通常在…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/8 5:07:31

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具&#xff0c;覆盖选题构思、文献整理、内容生成、格式排版等核心场景&#xff0c;真正帮你高效搞定论文难题。 一、全流程王者&#xff1a;一站式搞定论文全链路&#xff08;一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/9 13:42:46

2026年真正好用的AI论文工具&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/8 2:30:15

告别游戏崩溃&#xff1a;XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…