基于ROS的机械臂手眼标定-常见错误排查

本系列教程作者:小鱼
公众号:鱼香ROS
QQ交流群:139707339
教学视频地址:小鱼的B站
完整文档地址:鱼香ROS官网
版权声明:如非允许禁止转载与商业用途。
公众号

基于ROS的机械臂手眼标定-常见错误排查

大家好,我是小智,之间开源了关于手眼标定的一个项目,但在使用过程中,可能会遇到一些问题,趁着五一放假,收集了一些常见的问题列一下,如果有其他问题可以提出。

开源地址

github: https://github.com/aiotrobot/handeye-calib
gitee: https://gitee.com/ohhuo/handeye-calib

机械臂位姿
手眼标定程序
相机中标定板位姿
末端与相机位姿关系

本教程一共包含五个部分:

  • 手眼标定-基础使用
  • 手眼标定-JAKA机械臂
  • 手眼标定-AUBO机械臂
  • 手眼标定-Aruco使用与相机标定
  • 手眼标定-注意事项

如果上述程序使用过程中遇到问题,可以参考:

  • 手眼标定-常见问题排查

如果你对手眼标定原理感兴趣,可以参考以下文章:

  • 机器人手眼标定原理介绍(含详细推导过程)使用Tsai-Lenz算法
  • 手眼标定算法TSAI_LENZ,眼在手外python代码实现
  • 手眼标定算法Tsai-Lenz代码实现(Python、C++、Matlab)

一、缺少库错误

1 缺少程序中所引用的坐标转换库transforms3d

Traceback (most recent call last):
  File "/home/nature/code/learn/handeye-calib/src/handeye-calib/src/handeye/base_hand_on_eye_calib.py", line 5, in <module>
    import transforms3d as tfs
ImportError: No module named transforms3d
[base_hand_on_eye_calib-2] process has died [pid 4313, exit code 1, cmd /home/nature/code/learn/handeye-calib/src/handeye-calib/src/handeye/base_hand_on_eye_calib.py __name:=base_hand_on_eye_calib __log:=/home/nature/.ros/log/3c7dc26a-abee-11eb-8f61-a0afbd1aaefa/base_hand_on_eye_calib-2.log].
log file: /home/nature/.ros/log/3c7dc26a-abee-11eb-8f61-a0afbd1aaefa/base_hand_on_eye_calib-2*.log

解决方法

pip install transforms3d

2 缺少格式化库

Traceback (most recent call last):
  File "/home/nature/code/learn/handeye-calib/src/handeye-calib/src/handeye/base_hand_on_eye_calib.py", line 10, in <module>
    from tabulate import tabulate
ImportError: No module named tabulate
[base_hand_on_eye_calib-2] process has died [pid 5223, exit code 1, cmd /home/nature/code/learn/handeye-calib/src/handeye-calib/src/handeye/base_hand_on_eye_calib.py __name:=base_hand_on_eye_calib __log:=/home/nature/.ros/log/770e569c-abee-11eb-8f61-a0afbd1aaefa/base_hand_on_eye_calib-2.log].
log file: /home/nature/.ros/log/770e569c-abee-11eb-8f61-a0afbd1aaefa/base_hand_on_eye_calib-2*.log

解决方法

pip install tabulate

二、OpenCv相关错误

1. OpenCv版本错误问题

手眼标定所采用的opencv版本必须是4.1以上的,为什么呢?因为低版本是没有手眼标定函数的。

Traceback (most recent call last):
  File "/home/nature/code/learn/handeye-calib/src/handeye-calib/src/handeye/base_hand_on_eye_calib.py", line 11, in <module>
    from handeye_calibration_backend_opencv import HandeyeCalibrationBackendOpenCV
  File "/home/nature/code/learn/handeye-calib/src/handeye-calib/src/handeye/handeye_calibration_backend_opencv.py", line 17, in <module>
    class HandeyeCalibrationBackendOpenCV(object):
  File "/home/nature/code/learn/handeye-calib/src/handeye-calib/src/handeye/handeye_calibration_backend_opencv.py", line 22, in HandeyeCalibrationBackendOpenCV
    'Tsai-Lenz': cv2.CALIB_HAND_EYE_TSAI,
AttributeError: 'module' object has no attribute 'CALIB_HAND_EYE_TSAI'
[base_hand_on_eye_calib-2] process has died [pid 5329, exit code 1, cmd /home/nature/code/learn/handeye-calib/src/handeye-calib/src/handeye/base_hand_on_eye_calib.py __name:=base_hand_on_eye_calib __log:=/home/nature/.ros/log/84e7ed28-abee-11eb-8f61-a0afbd1aaefa/base_hand_on_eye_calib-2.log].
log file: /home/nature/.ros/log/84e7ed28-abee-11eb-8f61-a0afbd1aaefa/base_hand_on_eye_calib-2*.log

解决方式

a.查看当前的opencv位置
nature@nature:~$ python
Python 2.7.17 (default, Feb 27 2021, 15:10:58) 
[GCC 7.5.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__file__
'/usr/lib/python2.7/dist-packages/cv2.x86_64-linux-gnu.so'
b.备份当前的opencv
sudo mv  /usr/lib/python2.7/dist-packages/cv2.x86_64-linux-gnu.so  /usr/lib/python2.7/dist-packages/cv2.x86_64-linux-gnu.so.back
c.重新安装opencv

记得指定好系统的版本

nature@nature:~$ pip install opencv-python==4.1.0.25
Collecting opencv-python==4.1.0.25
  Downloading https://files.pythonhosted.org/packages/77/30/36c3f0644fa9f42d92f079b972e990a5874c1fc2b2c0e9656eb88bb8d6dc/opencv_python-4.1.0.25-cp27-cp27mu-manylinux1_x86_64.whl (26.6MB)
    100% |████████████████████████████████| 26.6MB 50kB/s 
Collecting numpy>=1.11.1 (from opencv-python==4.1.0.25)
  Cache entry deserialization failed, entry ignored
  Downloading https://files.pythonhosted.org/packages/3a/5f/47e578b3ae79e2624e205445ab77a1848acdaa2929a00eeef6b16eaaeb20/numpy-1.16.6-cp27-cp27mu-manylinux1_x86_64.whl (17.0MB)
    100% |████████████████████████████████| 17.0MB 70kB/s 
Installing collected packages: numpy, opencv-python
Successfully installed numpy-1.16.6 opencv-python-4.1.0.25

三、运行时python版本错误

问题

运行时采用python2版本,如果你的终端默认python版本是python3,请做一下切换。

process[base_hand_on_eye_calib-2]: started with pid [4249]
  File "/home/nature/code/learn/handeye-calib/src/handeye-calib/src/handeye/base_hand_on_eye_calib.py", line 57
    print  str("\n"+tabulate(data,headers="firstrow") + "\n")
           ^
SyntaxError: invalid syntax
[base_hand_on_eye_calib-2] process has died [pid 4249, exit code 1, cmd /home/nature/code/learn/handeye-calib/src/handeye-calib/src/handeye/base_hand_on_eye_calib.py __name:=base_hand_on_eye_calib __log:=/home/nature/.ros/log/0c7bef56-abee-11eb-8f61-a0afbd1aaefa/base_hand_on_eye_calib-2.log].
log file: /home/nature/.ros/log/0c7bef56-abee-11eb-8f61-a0afbd1aaefa/base_hand_on_eye_calib-2*.log

解决方式

比如使用conda的环境的,可以使用conda deactivate 进行环境退出。

conda deactivate

你可能感兴趣的:(机械臂相关算法,ROS,handeye,手眼标定)