当前位置: 首页 > news >正文

LUMI 大模型分拣机器人应用 和 Lumi视觉标定

相关的代码文件
Read file: utilfs/handToEyeCalibration.py
Read file: utilfs/handToEyeCalibration.py
Read file: conf/userCmdControl.json

手动标定原理详解

**眼在手外(Eye-to-Hand)**的标定方式。其核心原理如下:

1. 标定目标

计算相机相对于机器人基座标系的变换矩阵,即找到相机坐标系到机器人基座标系的变换关系。

2. 标定工具

使用棋盘格标定板作为标定工具:

  • 棋盘格尺寸:8×11个内角点
  • 每个方格边长:10mm
  • 通过检测棋盘格角点来建立相机坐标系与标定板坐标系的关系

3. 数据采集过程

        if findCorners(color_image,boardRowNums,boardCowNums):

程序通过以下步骤采集数据:

  1. 手动控制:用户按’k’键触发数据采集
  2. 机器人位姿记录:获取当前机器人TCP(工具中心点)的6DOF位姿 [x, y, z, rx, ry, rz]
  3. 图像采集:获取相机拍摄的棋盘格图像
  4. 角点检测:使用findCorners函数检测棋盘格角点
  5. 数据验证:只有成功检测到角点才保存数据

4. 标定算法原理

标定过程基于以下数学关系:

目标变换链

机器人基座 → 机器人末端 → 相机 → 标定板

数学表达式

T_base_target = T_base_gripper × T_gripper_camera × T_camera_target

其中:

  • T_base_gripper:机器人末端到基座的变换(从机器人位姿获得)
  • T_camera_target:标定板到相机的变换(从角点检测获得)
  • T_gripper_camera:相机到机器人末端的变换(待求解)

5. 核心算法步骤

5.1 相机内参标定
    def calibCamera(self,images,boardWidth,boardHeight,squareSize,criteria,ShowCorners=False):objp = np.zeros((boardWidth * boardHeight, 3), np.float32)objp[:, :2] = np.mgrid[0:boardWidth, 0:boardHeight].T.reshape(-1, 2)objp = objp * squareSize  # 18.1 mm
  • 建立标定板的世界坐标系
  • 使用OpenCV的calibrateCamera函数计算相机内参矩阵和畸变系数
5.2 外参计算
    def get_RT_from_chessboard(self,imagePoints,objectPoints,mtx,dist,Testing=False):R_target2camera_list = []T_target2camera_list = []for i,corners in enumerate(imagePoints):_, rvec, tvec = cv2.solvePnP(objectPoints[i], corners, mtx, distCoeffs=dist)
  • 对每张图像使用solvePnP计算标定板到相机的旋转和平移
5.3 手眼标定
        R_camera2base, T_camera2base = cv2.calibrateHandEye(R_gripper2base_list, T_gripper2base_list,R_target2camera_list, T_target2camera_list)

使用OpenCV的calibrateHandEye函数求解手眼变换矩阵,该函数基于以下约束:

R_gripper2base × R_camera2gripper = R_camera2base × R_target2camera

6. 标定精度评估

程序通过计算重投影误差来评估标定精度:

    def CalculateExtrinsicEyeToHandRms(self,worldPoses,RT_camera2base,R_target2camera_list,T_target2camera_list):# 计算每个位姿的RMS误差for i, (pose_calib, pose_actual) in enumerate(zip(poses, worldPoses)):xx = abs(pose_calib['X'] - pose_actual[0])yy = abs(pose_calib['Y'] - pose_actual[1])zz = abs(pose_calib['Z'] - pose_actual[2])dRms = sqrt(xx ** 2 + yy ** 2 + zz ** 2)

7. 使用流程

  1. 准备阶段:放置棋盘格标定板,确保相机和机器人都能看到
  2. 数据采集:按’k’键采集多组数据(建议15-20组),每次改变机器人位姿和标定板位置
  3. 开始标定:按’p’键执行标定算法
  4. 结果保存:标定结果保存到./conf/CalibParams.json

8. 关键优势

  • 手动控制:用户可以精确控制数据采集时机
  • 实时验证:每次采集都验证角点检测是否成功
  • 灵活性强:可以随时调整标定板位置和机器人姿态
  • 精度可控:通过RMS误差评估标定质量

这种手动标定方法虽然需要人工干预,但能够获得高质量的标定数据,特别适用于对精度要求较高的工业应用场景。

LUMI 大模型分拣机器人应用

项目简介

本项目基于视觉大模型与机器人集成,面向多站点分拣、自动标定、智能检测与抓取等场景。支持多站点任务调度、手眼标定、视觉识别与抓取、AGV联动等功能。


目录结构

  • multi_station_demo.py 多站点分拣主控脚本
  • visualDetect_ali.py 视觉识别与抓取主流程
  • visualValidCalib.py 标定结果验证与像素-世界坐标映射
  • AutoCalibProccess.py 手动手眼标定采集与计算
  • utilfs/ 机器人与工具函数库
  • conf/ 配置文件(机器人参数、标定参数、站点配置等)
  • requirements.txt 依赖环境
  • JAKA_SDK_LINUX/ JAKA机器人SDK(需配置环境变量)
  • images/ 检测结果与采集图片保存目录

环境配置

  1. 依赖安装

    pip install -r requirements.txt
    
    • 依赖主要包括:opencv-python, numpy, matplotlib, dashscope 等。
  2. Orbbec相机SDK

    • 推荐使用 pyorbbecsdk 或本项目自带的 OrbbecSDK 目录。
    • 确保相机驱动和SDK已正确安装。
  3. JAKA机器人SDK

    • JAKA_SDK_LINUX 路径加入环境变量:
      export LD_LIBRARY_PATH=/path/to/JAKA_SDK_LINUX:$LD_LIBRARY_PATH
      

配置文件说明

conf/userCmdControl.json

  • cameraParams:相机对齐、同步、图片保存路径
  • objects:分拣目标与放置目标名称
  • operationMode:操作模式(both/grasp_only/put_only/grasp_priority
  • robotParams:机器人初始位姿、抓取/放置偏移、抬升高度等
  • calibrateParams:标定板参数、机器人IP、标定图片保存路径
  • genNearPointParams:像素点深度搜索参数
  • systemConfig:机器人、AGV、外部轴等系统IP与端口
  • stations:多站点配置(站点名、AGV标记、机器人/外部轴初始位、站点操作模式)

conf/CalibParams-lumi-hand.json

  • 相机内参、畸变、旋转、平移矩阵(标定结果)

主要功能与脚本

1. 多站点分拣任务(multi_station_demo.py

  • 支持多站点自动调度,AGV移动、机器人抓取/放置、视觉检测一体化。
  • 站点配置、操作模式均可在 userCmdControl.json 中灵活设定。
  • 运行方式:
    python multi_station_demo.py
    

2. 视觉检测与抓取(visualDetect_ali.py

  • 支持自动/手动两种模式,自动识别目标物体与放置点,自动完成抓取与放置动作。
  • 支持命令行参数:
    • --auto 自动执行(不等待人工确认)
    • --camera-sn 指定相机序列号
    • --list-cameras 列出所有可用相机
  • 运行方式:
    python visualDetect_ali.py --auto
    

3. 手动手眼标定(AutoCalibProccess.py

  • k 采集一组图片与机器人位姿,按 p 执行标定计算,按 q 退出。
  • 标定结果保存在 conf/CalibParams-lumi-hand.json

4. 标定结果验证(visualValidCalib.py

  • 实时显示相机画面,点击像素点可输出其世界坐标,辅助验证标定精度。

典型流程

  1. 手眼标定
    运行 AutoCalibProccess.py,采集标定图片与位姿,生成标定参数。

  2. 标定验证
    运行 visualValidCalib.py,点击画面验证像素-世界坐标映射。

  3. 配置参数
    编辑 conf/userCmdControl.json,设定机器人、相机、站点、目标物体等参数。

  4. 主要分拣任务运行
    运行 multi_station_demo.pyvisualDetect_ali.py,实现多站点分拣或单站点视觉抓取。


注意事项

  • 需提前配置好机器人、相机、AGV等硬件网络与SDK环境。
  • 标定参数需与实际相机/机器人安装位置一致。
  • 运行前请确保 conf/ 下配置文件参数正确,且图片保存目录存在。

参考/扩展

  • 阿里大模型账号注册
  • dashscope_api_key获取
  • Orbbec相机配置

如需更详细的接口说明、二次开发指导,请参考各脚本源码及注释。

Requirements.txt

This file is autogenerated by pip-compile with Python 3.10

by the following command:

pip-compile requirements.in

–index-url https://pypi.tuna.tsinghua.edu.cn/simple

aiohttp3.9.5
# via dashscope
aiosignal
1.3.1
# via aiohttp
async-timeout4.0.3
# via aiohttp
attrs
23.2.0
# via aiohttp
certifi2023.11.17
# via requests
charset-normalizer
2.0.4
# via requests
contourpy1.2.1
# via matplotlib
cycler
0.12.1
# via matplotlib
dashscope1.19.0
# via -r requirements.in
fonttools
4.51.0
# via matplotlib
frozenlist1.4.1
# via
# aiohttp
# aiosignal
getch
1.0
# via -r requirements.in
idna3.10
# via
# requests
# yarl
kiwisolver
1.4.5
# via matplotlib
matplotlib3.8.4
# via -r requirements.in
multidict
6.0.5
# via
# aiohttp
# yarl
numpy1.26.4
# via
# -r requirements.in
# contourpy
# matplotlib
# opencv-python
opencv-python
4.9.0.80
# via -r requirements.in
packaging24.0
# via matplotlib
pillow
10.3.0
# via matplotlib
pyparsing3.1.2
# via matplotlib
python-dateutil
2.9.0.post0
# via matplotlib
requests2.31.0
# via dashscope
six
1.16.0
# via python-dateutil
urllib32.2.1
# via requests
yarl
1.9.4
# via aiohttp

{
“robot_ip”: “192.168.10.90”,
“ext_base_url”: “http://192.168.10.100”,
“agv_ip”: “192.168.10.10”,
“agv_port”: 31001,
“comments”: “系统配置文件,包含机器人、外部轴和AGV的连接信息”
}

http://www.dtcms.com/a/536675.html

相关文章:

  • 开源项目分享:Gitee热榜项目 2025-10-27 日榜
  • [Dify 实战] 封闭插件开发到发布:本地编写、Remote调试与上线全流程(Python)
  • ARM《5》_系统移植(在开发板上运行linux程序)
  • 长沙网络营销公司排名郑州seo外包
  • 仿淘宝电商网站开发报价安徽网站开发培训价格
  • 关于Mysql的学习二(函数,约束与多表查询)
  • Milvus向量数据库介绍
  • 基于AI框架LangGraph对比Workflow模式与Agent模式
  • 哪个网站建设好网站建设的原则有哪些方面
  • 怎样给网站找空间做备案海南省住房和城乡建设部网站
  • 介绍如何借助淘宝/天猫的 API 接口,实现订单系统的自动同步
  • 错误处理最佳实践
  • 磁盘格式化和LVM挂载
  • 泛微Ecology9实现流程界面隐藏按钮
  • Viewport:网页设计中的关键元素及其优化策略
  • 网站建设功能报山东城乡建设厅网站首页
  • wordpress 页脚加链接外贸网站优化哪家好
  • 如何检索跟踪文献
  • 【u-boot】u-boot网络系统剖析
  • 生物突触功能总结
  • 搭建AI智能翻译器:快速部署Dify,接入AiOnly平台GPT-5模型
  • 树莓派的OpenCV的人脸识别开锁
  • ifnull 和 isnull 的用法 以及其平替方法
  • ROS2系列 (0) : Linux 常用命令
  • 做网站编码如何制作微信链接
  • Nacos配置中心动态刷新全解析:从基础配置到源码级调优(一)
  • 《HTTP 实战:常用调试工具与抓包技巧》
  • Shell编程基本介绍
  • 龙港 网站建设青海建设网站价格低
  • 建设软件资源网站大学生网站开发总结报告