easy_aruco包代码逻辑梳理

这篇具有很好参考价值的文章主要介绍了easy_aruco包代码逻辑梳理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

easy_aruco包代码逻辑梳理

easy_aruco源码

OpenCV tutorial

请配合源码阅读该文章

ROS 节点的配置

  <node pkg="tf2_ros" type="static_transform_publisher" name="board_mid"
    args="0.1 0.0 0.0 0.0 0.0 0.0 1.0 board board_mid">
  </node>
  
  <node pkg="easy_aruco" type="easy_aruco_node" name="easy_aruco_node" output="screen" >
    <param name="object_type" value="charuco_board" />
    <param name="camera_namespace" value="/usb_cam" />
    <param name="dictionary" value="DICT_4X4_250"/>
    <param name="camera_frame" value="camera_frame"/>
    <param name="reference_frame" value="base_link"/>
    <param name="marker_size" value="0.03"/>
    <param name="square_size" value="0.04"/>
    <param name="square_number_x" value="5"/>
    <param name="square_number_y" value="7"/>
  </node>

这里面设置了easy_aruco_node的一些参数,例如类型、相机的命名空间、参照系等等,这里是他的用法,接下来进入逻辑的分析

easy_aruco_node.cpp

在easy_aruco/src下存在该文件,根据上面的launch文件的配置,设置了object_type,并且根据object_type选择合适的detector,完成选择后调用 detector->start(),该函数存在于 Detector.cpp中

Detector.cpp

包含三个函数

start()

1、根据launch文件,设置基本参数,包括 camera_namespacecamera_frame

2、创建broadcasterlistener,用于发布和订阅坐标变换(transformation)相关的消息

3、创建debugImagePublisherbase2boardPublisher用于发布调试图像信息(“/easy_aruco_node/debug_image”)以及位姿变换信息(“/easy_aruco_node/base2board_pose”)

4、获取相机信息并调用onCameraInfo()方法,完成对相机参数的传递,以及坐标变换关系的设置

5、调用/easy_aruco/src/ArucoMarker或CharucoBoardDetector.cpp的startImpl()方法,完成对检测器(Detector)的初始化

6、订阅图像话题,获取图像信息,并调用onImage()方法,准备进行标记检测与位姿估计

onCameraInfo()

注:以下智能指针的声明在/easy_aruco/include/Detector.h

1、传递相机参数,内参、畸变(默认为0)、尺寸,保存到 newParams

2、将本地变量 newParams 转换为 全局的智能指针 cameraParameters

3、获取referenceFramecameraFrame之间的转换关系,并将其保存到 cameraToReferenceTransform

4、将本地变量 cameraToReferenceTransform 转换为全局智能指针 cameraToReference

5、获取board_midboard之间的转换关系,将其保存在BoardToBoardmidTransform

​ 在实际应用时需要自己设置,如上面launch文件

6、将本地变量BoardToBoardmidTransform转换为全局智能指针 BoardToBoardmid

7、完成参数的获取与保存后停止订阅话题

onImage()

如果cameraParameterscameraToReference有一个为空,跳出,否则执行/easy_aruco/src/Arucomarker或CharucoBoardDetector.cpp的onImageImpl()

ArucoMarker或CharucoBoardDetector.cpp

startImpl()

获取标记尺寸(marker_size)、字典、并实例化detectorParams,用于存放检测后的信息

onImageImpl()

1、把从传感器中读到的ROS消息数据通过cv_bridge::toCvShare转换成openCV的格式并保存到img

2、调用aruco::detectMarkers(),传入之前的参数,进行标记检测

void cv::aruco::detectMarkers	(	InputArray 	image,
const Ptr< Dictionary > & 			dictionary,
OutputArrayOfArrays 				corners,
OutputArray 						ids,
const Ptr< DetectorParameters > & 	parameters = makePtr< DetectorParameters >(),
OutputArrayOfArrays 				rejectedImgPoints = noArray() 
)	

3、调用aruco::estimatePoseSingleMarkers或aruco::estimatePoseCharucoBoard进行位姿估计

bool cv::aruco::estimatePoseCharucoBoard	(	InputArray 	charucoCorners,
InputArray 										charucoIds,
const Ptr< CharucoBoard > & 					board,
InputArray 										cameraMatrix,
InputArray 										distCoeffs,
InputOutputArray 								rvec,
InputOutputArray 								tvec,
bool 											useExtrinsicGuess = false 
)	

4、发布tf消息

5、发布debug图像文章来源地址https://www.toymoban.com/news/detail-410391.html

到了这里,关于easy_aruco包代码逻辑梳理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Android】Touch 事件分发逻辑梳理和避坑逻辑(上层设置了setOnTouchListener的事件监听但是没有起作用的原因)

    在项目中发现我明明在最上层的 activity 中的一个 DrawerLayout 对象设置了如下代码: 该代码的作用的在点击的时候显示一下 TopBar 一个自定义的UI组件。 但是发现点击超级白板(你可以理解为一个画板组件)部分上述代码就没有触发。这是怎么回事呢? 首先针对Touch事件的分发机

    2024年02月11日
    浏览(37)
  • stable diffusion推理过程代码梳理

    最近在看stable diffusion,想梳理一下代码流程,以便之后查阅 从txt2img.py开始看 1.首先是对文本进行编码 (1)调用的是 stable-diffusion/ldm/models/diffusion/ddpm.py的get_learned_conditioning函数 (2) 第555行表示使用CLIP的文本编码器对输入的文本进行编码,调用的是stable-diffusion/ldm/modules

    2024年02月11日
    浏览(41)
  • idea 插件 Easy Code 自定义 MybatisPlus 模板一键快速生成所需代码

    之前无意中了解到了 idea 中的 Easy Code 插件,说是能快速生成 entity 、mapper、service、controller 等文件,避免很多简单重复性的创建工作,大大提高 MySQL 增删改查的开发效率。 正好今天要做对 MySQL 的增删改查,想着试试这个插件,没想到,特别好用,但也需要自己定制,所以就

    2023年04月20日
    浏览(55)
  • 【微信小程序】 权限接口梳理以及代码实现

    ​ 官方权限说明   部分接口需要经过用户授权统一才能调用。我们把这些接口按使用范围分成多个scope,用户选择对scope进行授权,当授权给一个scope之后,其对应的所有接口都可以直接使用。 此类接口调用时: 如果用户未接受或拒绝过此权限,会弹窗询问用户,用户点击

    2024年02月04日
    浏览(38)
  • yolov8代码梳理 训练自己的数据 最终版

    最开始为了检测不规则的麻包袋,所以采用了目标检测。yolov3,fasterrcnn,ssd。这种矩形框还是可以用。后面检测的物体变成了规则的纸箱,我们还用目标检测发现,没有旋转角度,因为箱子的摆放不是正的。只能通过opencv的minarea去找到最小矩形框去寻找角度。但是opencv的方

    2024年02月12日
    浏览(50)
  • 长文梳理Muduo库核心代码及优秀编程细节剖析

    代码地址: https://github.com/yyg192/Cpp11-Muduo-MultiReactor  Muduo库是陈硕个人开发的Tcp网络编程库,支持Reactor模型。本人前段时间出于个人学习目的用c++11重构了Muduo库中核心的Multi-Reactor架构。这篇博文对Muduo库中的Multi-reactor架构代码进行逻辑梳理,同时认真剖析了作者每一处精妙

    2024年02月12日
    浏览(41)
  • OpenHarmony本地代码和接口覆盖率可视化操作梳理

    目录 一. 修改gn文件,编译执行测试套 1. 修改业务侧BUILD.gn文件,增加编译选项 2.设置lcov统计“branch coverage”的方法 3. 编译测试版本+目标用例 4. 在windows下搭建执行环境,执行测试用例 5. 查看测试生成gcda文件 二. 使用本地代码覆盖率脚本 7. 修改python脚本中的路径 8. 执行脚

    2023年04月26日
    浏览(37)
  • 合肥工业大学机器视觉期末复习 课件梳理(穿插作业中的伪代码)

    第一部分:低层次视觉 1、滤波器 2、梯度—边缘;梯度—能量(线裁剪) 3、模板匹配;二值图像分析 4、纹理 第二部分:中层次视觉 5、霍夫变换 6、分割 7、局部不变特征——检测、描述和匹配 8、立体 第三部分:高层次的视觉 9、实例识别 10、监督分类的对象检测 11、支持向

    2024年02月02日
    浏览(54)
  • 手写数学公式识别领域最新论文CAN代码梳理,以及用自己的数据集训练

    Counting-Aware Network(CAN)-手写数学公式识别网络是好未来与白翔团队一起发布的一篇2022年的被ECCV收录的论文,该论文旨在缓解目前大部分基于注意力机制的手写数学公式识别算法在处理较长或者空间结构较复杂的数学公式时,容易出现的注意力不准确的情况。该论文通过将符号

    2024年02月07日
    浏览(45)
  • OpenCV学习——ArUco模块

            ArUco模块是OpenCV的contrib拓展库中一个模块,需要安装OpenCV的 contrib拓展库 才能正常使用。         ArUco 标记是由 宽黑色边框 和 确定其标识符(id)的内部二进制矩阵 组成的正方形标记,如图1所示。通俗地说,ArUco标记其实就是一种编码,就和我们日常生活中

    2024年02月17日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包