手眼标定过程记录

手眼标定过程记录手眼标定过程记录============================================================================================以下四个变量是最重要的数据rvecs_rb2gripper,tvecs_rb2gripperrvecs_cam,tvecs_cam1.首先排查机械臂末端到底座的旋转平移

大家好,又见面了,我是你们的朋友全栈君。

手眼标定过程记录

============================================================================================

以下四个变量是最重要的数据

rvecs_rb2gripper, tvecs_rb2gripper
rvecs_cam, tvecs_cam

1. 首先排查机械臂末端到底座的旋转平移是否正确

通过查看clopema_certh_ros
1.首先末端到底座的变换,listen的结果居然求逆了。

gripper_to_base.push_back(tr.inverse()) ;

2.然后标定板到相机的变换
最重要的rvecs和tvecs是通过下面的函数得到的,收集好所有帧的imagepoints一次性运算出所有外参

cv::calibrateCamera

而glawgow是通过对每一帧的imagepoints采用下面的函数获得每一次的外参矩阵的

solvePnPRansac

具体函数如下:

cv::calibrateCamera(objectPoints, imagePoints, imageSize, cameraMatrix, distCoeffs, rvecs, tvecs, flags|CV_CALIB_FIX_K4|CV_CALIB_FIX_K5);
solvePnPRansac(objectPoints, imagePoints, cameraMatrix, distCoeffs, rvecEx, tvecEx, false, 100, 1.0, 0.99, inliers);

2. 关于容器中使用Eigen的报错:

/usr/include/eigen3/Eigen/src/Core/DenseStorage.h:128: Eigen::internal::plain_array<T, Size, MatrixOrArrayOptions, 32>::plain_array() [with T = double; int Size = 16; int MatrixOrArrayOptions = 0]: Assertion `(reinterpret_cast<size_t>(eigen_unaligned_array_assert_workaround_gcc47(array)) & (31)) == 0 && "this assertion is explained here: " "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" " **** READ THIS WEB PAGE !!! ****"' failed.
Aborted

解决方法:

头文件里添加如下:

#include <Eigen/StdVector>
using namespace Eigen;
EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(Eigen::Affine3d)//解决vector中Eigen对齐的问题

参考

eigen官网


3. 关于tool0_controller报错的问题

2017/12/29
由于ur_modern_driver需要修改urdf,即用modern_driver进行ur驱动协助手眼标定的时候,在ur3.urdf.xacro中添加了tool0_controller

/home/cbc/catkin_ws/src/universal_robot/ur_description/urdf/ur3.urdf.xacro

一开始以为是tool0_controller的问题,导致rviz不能正常使用,经常闪退,ur3_moveit_config更是报错打不开。报错内容如下:

[ERROR] [1515404258.018207679]: Ignoring transform for child_frame_id "tool0_controller" from authority "unknown_publisher" because of a nan value in the transform (0.000000 26815622274503241629349378993175553962225540122973894056168551426931042827562994218784229639762337459109057520690886188494020583679371347120178163255083008.000000 26815622274206272770731577112262473438093890782345820683584369763133472687942565341004009969841415624372630858128332080466218773763999513725165301565227008.000000) (-nan -nan -nan -nan)

后经查询是因为loosing the connection to the realtime port,导致tf信息丢失,并且重新获得连接后,随机发布末端位姿信息,严重影响标定过程。

解决方法:

修改ur_modern_driver里的ur_communication.cpp和ur_realtime_communication.cpp,使得在每次重连(Reconnect)的时候清空buffer等等,主要添加以下:

bzero(buf, 2048);
FD_ZERO(&readfds);
FD_SET(sockfd_, &readfds);  

参考

ur_modern_driver——issues——Wrong/random joint positions published by the driver after loosing the connection to the realtime port


4. 关于TransformBroadcaster和TransformListener

之前一直搞不清Get the transform between two frames by frame ID,到底是哪个坐标系到哪个的变换,这方面官网没有介绍清楚,查找资料结合实验验证,不保证完全正确,总结如下:
发布transform:

tf::TransformStampedTFToMsg(transform, msg_trans);
StampedTransform (const tf::Transform &input, const ros::Time &timestamp,
                  const std::string &frame_id, const std::string &child_frame_id)

表示child_frame_id在frame_id下的位姿;

接收transform:

lookupTransform (const std::string &target_frame, const std::string &source_frame,
         const ros::Time &time,  StampedTransform &transform) const

表示source_frame相对于target_frame的位置和姿态.

参考:

关于坐标系变换的一篇比较详细的


5. 关于实时显示点云,fixed frame不存在的问题

roslaunch kinect2_bridge kinect2_bridge.launch
rviz

报错内容如下:

displayed Pointcloud2 using Rviz, "fixed frame(map)does not exist"

解决方法:

主要是launch的时候,要将publish_tf置为true,并将rviz中的fixed frame填为kinect2_link

roslaunch kinect2_bridge kinect2_bridge.launch publish_tf:=true

参考:

1kinect2 fixed frame does not exist
2kinect2_link Location on Device?


6. 每次标定的流程

启动node顺序

roslaunch calibration_glasgow  baxter_handeye_calibration.launch 
rosrun    calibration_glasgow  pub_robot_trans
rosrun    calibration_glasgow  call_handeye_calib

根据标定结果修改urdf

/home/cbc/catkin_ws/src/iai_robots/iai_kinect2_description/urdf/kinect2_camera.urdf.xacro

由于reconnect的问题,rviz时常崩溃

rviz

奇怪的事情

1.rviz显示点云以前都是没有颜色的,刚才突然就有颜色了
哈哈这是因为我自己每次都拍一张静态图,然后以PointXYZ的格式读入。。。

2.标定程序上周就没有改,为什么突然就准了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140639.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • android 读取本地数据库db文件(Android sqlite)

    android 读取本地数据库db文件(Android sqlite)我们知道Android中有四种数据存储方式:SharedPreference存储 contentprovider SQLite数据库存储 文件存储今天我们主要说本地数据库sqlite这种方式,实现读取一个本地数据库db文件的功能。为了方便说明,我举个例子来讲:我们创建一个本地数据库,里面包含两张表一个用户表user一个性别表gender要求:1.将用户表中用户查…

    2022年5月31日
    50
  • macOS安装yarn

    macOS安装yarnmacOS安装yarn最近在使用Jeecg框架,也需要yarn支持。1.通过HomeBrew安装brewinstallyarn2.升级yarnbrewupgradeyarn3.查看版本号yarn-v

    2022年5月9日
    54
  • 关于ADRC的一些粗鄙之语

    关于ADRC的一些粗鄙之语摘自:https://zhuanlan.zhihu.com/p/156228260关于ADRC的一些粗鄙之语隔壁unclewang机械工程Ph.D&控制算法小萌新across等写在之前其实作者本人开始研究adrc也不是特别久,与很多人一样,接触这个算法之后心态也经历过从一开始的“不明觉厉”、中途的“不以为然”到最后的辩证看待的演变过程。经历了一段时间的学习还有群里面大佬的熏陶之后,对于adrc总算是有了一些系统性的想法,这里就简要介绍一下自己的感悟吧。本文.

    2022年5月19日
    48
  • PLC编程入门基础技术知识

    PLC编程入门基础技术知识PLC编程入门基础技术知识第一章可编程控制器简介可编程序控制器,英文称ProgrammableController,简称PC。但由于PC容易和个人计算机(PersonalComputer)混淆,故人们仍习惯地用PLC作为可编程序控制器的缩写。它是一个以微处理器为核心的数字运算操作的电子系统装置,专为在工业现场应用而设计,它采用可编程序的存储器,用以在其内部存储执行逻辑运算、顺序控制、定时/计数和算术运算等操作指令,并通过数字式或模拟式的输入、输出接口,控制各种类型的机械或生产过程。PLC是微机技术与

    2022年9月8日
    0
  • android游戏开发引擎_android主题引擎

    android游戏开发引擎_android主题引擎随着Android系统的使用越来越广泛,了解一下Android平台下的游戏引擎就非常有必要。而同时因为基于Intelx86的移动设备越来越多,我也非常关注支持x86的移动游戏引擎。然而就目前为止游戏引擎的数量已经非常之多,每个引擎都有不同的特征、价格、成熟度等。通过一些调研之后,我发现有非常多的游戏引擎可用于开发运行在android移动设备端的游戏,其中有些还支持x86系统,另外还有些通过简单的

    2022年10月22日
    0
  • Socket无限SocketTimeoutException真凶–WLAN助手

    Socket无限SocketTimeoutException真凶–WLAN助手看到标题你可能不知道我说的是什么鬼东西,但是如果你有类似的经历的话,那么恭喜你,也恭喜我自己,终于解决这个问题了。用过小米、华为等手机的都知道,当我们连接上一个不能上网的WIFI时,系统都会友好的给出“此WLAN无法访问互联网,请更换网络/切换为移动数据网络”等类似的提示,今天我就说下本人在这里面遇到的坑。背景:有个Android项目需要连接硬件设备的WIFI,然后通过socket进行通信…

    2022年10月21日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号