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多相机标定”合并成一个最终版脚本

相关新闻

蓝白斑筛选技术原理与实验操作全解析:从LacZ基因到克隆筛选

蓝白斑筛选技术原理与实验操作全解析:从LacZ基因到克隆筛选

1. 项目概述:蓝白斑筛选,一个分子生物学家的“显色”魔法 在分子克隆实验室里,每天打交道最多的,除了各种酶和试剂,就是那些肉眼看不见的DNA片段。如何从成千上万个重组子中,快速、准确地找到那个插入了目标…

2026/10/11 4:07:40 阅读更多 →
2026华为OD面试题067:田忌赛马

2026华为OD面试题067:田忌赛马

题目描述 给定两个只包含数字的数组 a 和 b,调整数组 a 里面数字的顺序,使得尽可能多的 a[i] > b[i]。数组 a 和 b 中的数字各不相同。 输出所有可以达到最优结果的 a 数组的数量。 输入描述: 第一行是数组 a 的数字,空格隔开,a 大小不超过 10。 第二行是数组 b 的数…

2026/10/9 14:19:13 阅读更多 →
通用Agent越强,垂直Agent越应专注领域知识与工作流构建

通用Agent越强,垂直Agent越应专注领域知识与工作流构建

1. 项目概述:一个被误解的行业趋势 最近和几个做AI应用的朋友聊天,发现一个挺有意思的现象:大家一窝蜂地在卷大模型。无论是做代码生成、数据分析还是内容创作,第一反应就是“换个更强的基座模型试试”。这让我想起了一个在技术圈…

2026/10/9 10:10:07 阅读更多 →

最新新闻

office ppt上面没有mathtype 插件,就会导致下面错误?

office ppt上面没有mathtype 插件,就会导致下面错误?

office ppt上面没有mathtype 插件,就会导致下面错误? 🎯 该报错和MathType插件缺失的关联结论 这个弹窗提示的错误,‌有可能是PPT里原本嵌入的MathType公式,在当前环境没有MathType插件时触发的,但它并不是MathType缺失的专属报错‌,还有很多其他场景也会弹出完全相同…

2026/10/11 9:36:44 阅读更多 →
论文初稿被批太水?师姐安利这几个AI论文写作软件

论文初稿被批太水?师姐安利这几个AI论文写作软件

写论文总是被说“太水”?选题难、逻辑乱、文献少、格式错,这些问题在学术路上几乎人人都遇到过。其实,关键不在于天赋,而在于方法——用对AI工具走对流程,效率和质量都能大幅提升。资深教授也普遍推荐:千笔…

2026/10/11 9:36:44 阅读更多 →
DeepSeek大模型本地部署与调优实战:从MoE架构到性能优化

DeepSeek大模型本地部署与调优实战:从MoE架构到性能优化

简介:这是一份聚焦DeepSeek大模型技术解析的入门宝典,面向自然语言处理研究人员、人工智能应用开发者与企业技术决策者,系统梳理了DeepSeek公司从成立到R1发布的完整脉络。文档不仅介绍R1高性能推理、完全开源和低成本三大特点,还…

2026/10/11 9:36:44 阅读更多 →
REA模型实战:用事件驱动建模解决订单库存财务对账难题

REA模型实战:用事件驱动建模解决订单库存财务对账难题

如果你维护过订单、库存、财务这三个模块,多半遇到过这种经典场面:同一个业务动作,在订单系统里是一条记录,在仓库那边变成一张出库单,传到财务又得手工生成一张记账凭证。数据从上游流到下游,口径已经在层…

2026/10/11 9:36:44 阅读更多 →
自建技能管理系统:从数据模型到状态机的完整实践

自建技能管理系统:从数据模型到状态机的完整实践

1. 为什么自建技能管理系统,而非直接用一个App最近在复盘自己这一年的学习路径时,我翻遍了手机里的打卡软件、笔记软件和备忘录,发现一个挺尴尬的事实:技能点散落得到处都是。今天在这个App里记了几条英语学习记录,明天…

2026/10/11 9:36:44 阅读更多 →
【单片机课设毕设项目】基于物联网的居室空气质量监测与自动通风补光系统设计 基于单片机的室内环境综合参数检测与手机端告警装置设计(030125)

【单片机课设毕设项目】基于物联网的居室空气质量监测与自动通风补光系统设计 基于单片机的室内环境综合参数检测与手机端告警装置设计(030125)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/11 9:35:44 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →