aruco_ros 在相机图像中显示的坐标轴姿态与TF发布的姿态不一致 解决方法

aruco_ros 在相机图像中显示的坐标轴姿态与TF发布的姿态不一致 解决方法

运行环境

系统版本: Ubuntu 16.04
ROS版本: Kinetic

问题描述

在进行手眼标定过程中,为了快速便捷的获取标定板的位姿,考虑采用aruco_ros

使用下面的指令可以快速安装ROS版本的aruco

sudo apt install ros-kinetic-aruco*

运行aruco_ros,结果如图所示

aruco_ros 在相机图像中显示的坐标轴姿态与TF发布的姿态不一致 解决方法
左边为aruco显示的Marker实时位姿,右侧为在rviz中显示TF发布的Marker位姿。

从图中可以看出,两者都可以显示准确的position,但是左侧相机图像显示的坐标轴 orientation 与ROS TF反馈的数据不一致。

理想情况下,Marker的Z轴应当是指向纸面外部, 按图中Marker放置的位置,Marker的Z轴应当与相机坐标系的Z轴平行且反向,但是,在rviz显示的结果为,Marker指向纸面外部的是Y轴,与左侧相机图像显示的不一致。

虽然直接使用这个位姿进行手眼标定 并不会影响标定结果。但是考虑到后面需要使用Marker进行位姿验证,希望可以让arcuo_ros 显示的坐标轴 与TF发布的姿态能够一致。

解决方案

根据官方大佬给出的解释,给出下面的解决方案

首先,卸载掉之前安装的 aruco_ros

sudo apt remove ros-kinetic-aruco*

然后,在Github下载arcuo_ros 源代码

https://github.com/pal-robotics/aruco_ros/tree/kinetic-devel

将源代码包放到一个ROS的工作空间下,定位到下面的路径

…/aruco_ros/src/

打开文件aruco_ros_utils.cpp,按照下图修改代码
aruco_ros 在相机图像中显示的坐标轴姿态与TF发布的姿态不一致 解决方法

即,将源代码中的旋转矩阵修改为单位矩阵,然后使用 catkin_make 重新编译

再次运行,可以看到aruco在相机图像中显示的坐标轴位姿已经与TF发布的位姿一致
aruco_ros 在相机图像中显示的坐标轴姿态与TF发布的姿态不一致 解决方法

上一篇:Mnist数字识别卷积实现


下一篇:树莓派4B安装centos7.9.2009及JDK