aruco二维码降落中的坐标系变换

二维码降落中的坐标系

变换矩阵的说明
以下面这个变换矩阵为例,一个变换矩阵可以有两种理解方式,可以理解为机体坐标系在世界坐标系下的位姿,最右边的写法可以体现这个含义,也可以说是从机体系到世界系的变换矩阵,最左边的写法可以体现这个含义,因为变换矩阵右边乘的是变换前的坐标系坐标,左边得到的是变换后的坐标系坐标,所以写为Twb正好顺序一致,念的时候也是先念b再念w。
 

输入图片说明


二维码降落中的坐标系变换
 

输入图片说明



 

基于无人机对的世界系位姿和aruco二维码检测结果即aruco二维码在相机系中的位姿,可以最终解算出aruco二维码在世界系中的位姿。

Tbc的计算过程

Tbc的含义,可以理解为相机坐标系在机体系下的位姿即旋转和平移。是从相机系到机体系的变换矩阵,注意是相机系到机体系不是机体系到相机系。
确定Rbc和tbc
对于坐标系间的旋转角度是90度的倍数时,可以直接观察坐标轴的对应关系或者取坐标轴的特定坐标值的方式快速确定坐标系间的旋转矩阵。默认基于左乘,位置为列向量。
 

输入图片说明


tbc 这里默认(0 , 0 , 0) ,顺序依次对应x y z

输入图片说明

代码实现关键Eigen

变换矩阵用Eigen::Isometry3d类型
旋转矩阵用Eigen::Matrix3d类型
平移向量用Eigen::Vector3d类型
四元数用Eigen::Quaterniond类型

https://blog.csdn.net/u011092188/article/details/77430988

输入图片说明

以下代码示例取自aruco_land_demo.cpp

Eigen::Isometry3d Twa,Tca,Tbc,Twb,Twc;  //变换矩阵

Eigen::Matrix3d rotation_matrix_bc,rotation_matrix_wb,rotation_matrix_ca;;

Eigen::Vector3d t_bc,t_wb,t_ca;

Eigen::Quaterniond q_wb,q_ca;

Vector3d类型和Matrix3d类型的直接赋值

    t_bc <<  0, 0, 0;
    rotation_matrix_bc << 0, -1, 0,
                         -1 , 0, 0,
                          0, 0, -1;

四元数转旋转矩阵

rotation_matrix_ca = q_ca.toRotationMatrix();

基于旋转矩阵和平移向量给变换矩阵赋值

            Tca.linear() = rotation_matrix_ca;
            Tca.translation() = t_ca;

取出变换矩阵里的平移向量

Vector3d t_wa = Twa.translation();

访问平移向量的某一项

Vector3d t_wa;
t_wa[0];
t_wa.x();

变换矩阵相乘

Twa = Twb * Tbc * Tca;
启用摄像头对aruco二维码进行读取通常是在计算机视觉领域,特别是在机器人导航、增强现实(AR)应用以及定位系统常用的技术。Aruco(一种开源套件)提供了一种包含多种不同大小和形状的二维码,称为“码块”(Markers),它们设计用于在图像快速识别。 以下是基本步骤: 1. **安装库**:首先,你需要在你的项目引入Aruco库,如Python的`opencv-python`和`pyaruco`,或者其他支持Aruco的库。 ```python pip install opencv-python pyaruco ``` 2. **初始化相机**:使用OpenCV的`VideoCapture`函数打开设备,比如摄像头或者视频文件。 ```python import cv2 cap = cv2.VideoCapture(0) ``` 3. **读取帧并检测二维码**:在每一帧上运行Aruco的`aruco.detectMarkers()`函数,它会查找并标记出二维码。 ```python import pyaruco dictionary = pyaruco.getPredefinedDictionary(pyaruco.DICT_4X4_50) parameters = pyaruco.DetectorParameters_create() while True: ret, frame = cap.read() corners, ids, rejectedImgPoints = aruco.detectMarkers(frame, dictionary, parameters=parameters) # ...处理找到的二维码信息 ``` 4. **解析数据**:如果找到了二维码,你可以进一步解析`ids`数组来获取对应二维码的信息,例如ID编码。 5. **显示结果**:最后,在原始帧上画出检测到的二维码角点,可以使用OpenCV的`drawDetectedMarkers()`功能。 6. **关闭资源**:读取完所有帧后,记得释放摄像头资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值