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.cppstartImpl()方法,完成对检测器(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.cpponImageImpl()

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图像

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
easy_install 是 Python 的一个扩展管理工具,用于方便地安装和管理第三方扩展。它是 Python 中的一种标准安装工具,使得安装扩展变得简单易用。 要使用 easy_install 安装扩展,首先需要确保已经正确安装了 Python 环境。步骤如下: 1. 首先,从官方网站(https://www.python.org/downloads/)下载并安装最新版本的 Python。 2. 确保安装时选择了“Add Python to PATH”选项,使得 Python 可以全局访问。 3. 打开终端或命令提示符窗口,输入命令“easy_install”来验证是否成功安装了 easy_install。如果出现相关信息,则说明已经成功安装。 一旦确认安装成功,就可以开始使用 easy_install 来安装扩展。步骤如下: 1. 打开终端或命令提示符窗口,输入命令“easy_install 名”来安装指定的扩展。例如:要安装名为“requests”的扩展,可以输入“easy_install requests”。 2. easy_install 会自动从 Python Package Index(简称 PyPI)中下载和安装指定的扩展。 3. 安装完成后,可以通过导入扩展的方式在 Python 中使用它们。例如,在 Python 脚本中加入“import requests”即可使用 requests 扩展提供的功能。 需要注意的是,easy_install 只能安装 Python 2.x 版本的扩展。对于 Python 3.x 版本,推荐使用 pip 工具来代替 easy_install 进行扩展管理。 总的来说,easy_install 是一种简单易用的扩展安装工具,可以帮助用户方便地安装和管理第三方扩展。通过遵循一定的步骤,即可轻松使用 easy_install 来安装自己需要的扩展

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Smile Hun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值