视觉应用手册
1. 前言
本手册面向工业自动化领域的设计、调试、运维及选型技术人员,系统梳理视觉应用的核心知识体系。内容兼顾理论基础与实操落地,覆盖技术原理、硬件选型、配置调试、故障排查及场景适配,既满足新手快速入门需求,也可为资深工程师提供精准参考。
2. 安全信息
由于视觉系统涉及机器人运动、电气连接等潜在风险,用户在使用之前必须仔细阅读、理解并遵守本手册的说明。集成商必须确保部署的视觉系统符合相应法律法规与行业标准,严格执行风险评估,并采取必要措施降低风险。同时,用户必须遵守集成商指定的安全规范。
AUBO 提醒用户
在部署、使用视觉系统时,必须注意设备与操作安全,视觉系统的使用者需对自身及现场安全负责。AUBO 不对因违规操作、未遵守安全规范导致的安全问题负责。
3. 硬件设备
3.1 2D 相机海康威视
3.1.1 设备介绍
海康威视(Hikrobot)2D 工业相机凭借高分辨率 CMOS 芯片和卓越的成像算法,在缺陷检测、定位引导及条码识别等领域表现出色。该系列设备支持 GigE、USB 3.0 等高速数据接口,具备优异的运行稳定性与环境适应性,可精准采集高速运动目标的图像细节,适用于各类工业自动化生产线,兼具性能与成本优势。
3.1.2 接线
海康威视 2D 相机的接线通常只有两个核心接口:一个是负责通讯的数据通讯接口(分为网口版和 USB 版),另一个是负责供电与信号交互的电源 I/O 口。
- 数据通信接口:与主控(ARCS 控制柜)接入同一网络保障通讯即可
- 电源与信号接口:通过专门的电源线接入直流电(通常为 12V 或 24V),确保相机在高负荷工作时不掉线。

3.1.3 连接
打开海康威视官方软件(VisionMaster,以下简称 vm),选择相机连接。

图像采集触发源选择 SOFTWARE,否则影响软件下发指令采集图像。

3.2 3D 相机梅卡曼德
3.2.1 设备介绍
本应用手册采用 Mech-Eye 工业级 3D 相机,具备精度高、速度快、抗环境光、成像质量高,可对各类材质物体生成高质量 3D 点云数据。满足远、中、近不同距离下对于抗环境光、高精度、大视野、高速度、小体积的需求。
相机本体:

M12 转 RJ45 网线

电源适配器

3.2.2 接线
相机端:连接电源适配器,M12 网线端接相机,RJ45 端接交换机或与工控机直连(相机 IP 需与工控机同一网段)。

工控机端:RJ45 网线连接交换机(工控机 IP 需与相机同一网段)
3.3 遨博自研相机
3.3.1 设备介绍
硬件基础介绍 遨博自研相机由相机本体、镜头、光源、相机电源线、光源电源线、网线及外壳组成。下表详细列出了各关键组件的核心参数,便于快速了解硬件规格。
| 产品 | 性能 | 规格 |
|---|---|---|
| 镜头 | 参数 | 固定焦距, 手动光圈, 六百万像素, FA 镜头 |
| 焦距 | 12 mm | |
| F 数 | F2.8 ~ F16 | |
| 像面尺寸 | Φ9 mm(1/1.8") | |
| 畸变 | -0.005% | |
| 最近摄距 | 0.1 m | |
| 视场角 | D(8.96mm):40.94° H(7.38mm):34.14° V(4.92mm):23.17° | |
| 相机 | 传感器类型 | CMOS,卷帘快门 |
| 像元尺寸 | 2.4 μm × 2.4 μm | |
| 靶面尺寸 | 1/1.8" | |
| 分辨率 | 3072 × 2048 | |
| 最大帧率 | 19.1 fps @3072 × 2048 Mono 8 | |
| 黑白/彩色 | 黑白 | |
| 典型功耗 | 2.4 W @12 VDC | |
| 供电 | 9 ~ 24 VDC | |
| IP 防护等级 | IP40(正确安装镜头以及线缆的情况下) | |
| 重量 | 约 100 g | |
| 光源 | 产品类型 | 环形光源 |
| LED 类型 | SMD | |
| 色温 | 6000-6500k | |
| 输入电压 | DC 24V max |
下图为视觉模块,视觉模块由镜头、相机、光源组成。

相机:

光源:

3.3.2 接线
检查电源线两端接头无松动和破损,确认无误后开始接线。

将小车关机,打开车后舱门,从车后取下接线端子排。

接线端子左侧三孔为 24V,右侧三孔为 0V。将蓝色 24V 和黑色 0V 接入端子并用一字螺丝刀紧固。

将端子排插回原位。

将光源供电线公母头对接。

将相机电源线与相机电源航插头对插。

用网线连接相机和小车后方右侧网口,将相机端网线的固定螺丝拧紧防止脱落。

4. 相机通讯
4.1 通讯原理
目前机械臂和视觉设备(相机)支持以下两种通讯方式:
机械臂与相机通过 TCP/IP 直接通信:通过在程序树添加 Lua 脚本触发相机拍照并获取数据,获取的数据类型有两种含义:
- 绝对坐标:机械臂直接获取需要的目标点位。
- 相对坐标:机械臂获取需要偏移的距离。
通过 PLC 中转通信:相机与 PLC 连接由 PLC 触发拍照,拍照完成后,PLC 与机械臂通过 Modbus、Profinet 等工业通讯协议, 将视觉检测得到的偏移量发送给机械臂,机械臂根据该相对位置完成 X 、Y、Z 轴的偏移。
4.2 视觉界面通讯
在 ARCS 主页,单击左侧导航栏“配置 > 相机”。
相机品牌
下拉列表展示目前所支持的相机品牌。
驱动选择
选择当前相机品牌已支持的驱动,分为 2D 和 3D 驱动。
网络配置
设置相机(服务端)通信的 IP 地址以及端口号。

4.3 Lua 脚本通讯
Lua 脚本是 ARCS 系统中实现设备间通讯的核心方式,支持灵活定制各类通讯逻辑,可实现与相机、PLC、视觉系统等第三方设备的数据交互。以下是三种最常用的通讯场景的实现模板:
TCP/IP Socket 通讯:适用于机器人直接与相机、视觉系统等支持 TCP/IP 协议的设备进行直连通讯,可实现触发拍照、获取识别结果等功能。
通讯脚本模板
lua-- 示例相机使用TCP/IP方式进行通讯,进行拍照接收和发送数据 -- 导入 LuaSocket 模块 local socket = require("socket") -- 设置超时时间(单位:秒) local timeout_seconds = 5 -- 封装成函数,传参 server_ip、server_port、message function send_and_receive(server_ip, server_port, message) -- 创建 TCP 客户端 socket local client = socket.tcp() -- 创建 TCP 套接字 client:settimeout(timeout_seconds) -- 设置超时时间,防止阻塞 -- 尝试连接服务器 local success, err = client:connect(server_ip, server_port) if not success then textmsg("连接服务器失败: " .. tostring(err)) return nil -- 连接失败则直接退出脚本 end textmsg("已连接到服务器: " .. server_ip .. ":" .. server_port) -- 要发送的消息内容,查看对应相机的通讯协议 local bytes, send_err = client:send(message .. "\n") -- 添加换行符以便服务器识别为一整行 if not bytes then textmsg("发送失败: " .. tostring(send_err)) client:close() textmsg("已断开与服务器的连接。") return nil else textmsg("发送成功: " .. message) end -- 接收服务器返回的数据(按行读取) local response, recv_err = client:receive("*a") -- *a读取全部数据,*l读取单行数据 if response then textmsg("收到服务器回复: " .. response) -- 可根据内容进行判断 if response == "OK" then textmsg("服务器确认收到信息。") else textmsg("服务器返回未知信息。") end else textmsg("接收失败: " .. tostring(recv_err)) end -- 关闭连接 client:close() textmsg("已断开与服务器的连接。") return response -- 返回服务器回复 end -- 设置服务器 IP 和端口 local server_ip = "192.168.1.100" local server_port = 8080 -- 要发送的消息内容,查看对应相机的通讯协议 local message = "Hello Server" local response = send_and_receive(server_ip, server_port, message) if response then -- 可以根据返回内容继续处理 endModbus 主站通讯:适用于机器人作为主站主动读写 PLC 寄存器的场景,可实现向 PLC 发送控制指令、获取传感器数据等功能,支持浮点数等复杂数据类型的传输。
Modbus主站读写寄存器浮点数
lua--示例modbodbus主站读写浮点数 function writeModbusFloat(value, lowSignalName, highSignalName) local word = math.float2words(value) local low_word = word[1] local high_word = word[2] modbusSetOutputSignal(highSignalName, high_word) modbusSetOutputSignal(lowSignalName, low_word) end function readModbusFloat(lowSignalName, highSignalName) return math.words2float(modbusGetSignalStatus(lowSignalName), modbusGetSignalStatus(highSignalName)) end --示例modbus主站读取寄存器地址Modbus_0,Modbus_14的值,并赋值给变量P1,注意浮点数的读写需要占用两个寄存器地址 P1 = readModbusFloat("Modbus_0", "Modbus_1") --示例modbus主站寄寄存器地址Modbus_0,Modbus_1写入-3.14,注意浮点数的读写需要占用两个寄存器地址 writeModbusFloat(-3.14, "Modbus_0", "Modbus_1")Modbus 从站通讯:适用于机器人作为从站被动接收 PLC 下发的指令和数据的场景,可实现与产线 PLC 的协同控制,支持浮点数等复杂数据类型的接收与发送。
从站读写通用寄存器浮点数示例
lua--从站通用寄存器读写浮点数 function writeModbusFloat(value, low, high) local word= math.float2words(value) local high_word=word[1] local low_word=word[2] setInt16Register(high, high_word) setInt16Register(low, low_word) end function readModbusFloat(low, high) return math.words2float(getInt16Register(high), getInt16Register(low)) end --示例从站往通用寄存器地址300,301写入-3.14,注意浮点数的读写需要占用两个通用寄存器地址 writeModbusFloat(-3.14, 0, 1) --示例从站读取通用寄存器地址300,301的值,注意浮点数的读写需要占用两个通用寄存器地址 P1=readModbusFloat(0, 1)
5. 手眼标定
5.1 手眼标定原理
手眼标定是视觉引导机器人应用的核心基础,其本质是求解相机坐标系与机器人坐标系之间的坐标转换关系,建立图像像素坐标与机器人实际物理坐标的映射矩阵,从而实现相机识别结果到机器人运动指令的转换。
核心数学原理 手眼标定的数学模型可以表示为经典的 AX = XB 方程求解问题:
A:机器人不同位姿之间的变换矩阵。
B:相机不同位姿之间的变换矩阵。
X:待求解的手眼转换矩阵(即相机坐标系到机器人基坐标系的转换关系)。
通过采集多组(通常 ≥ 9 组)机器人位姿与对应相机图像数据,使用非线性优化算法求解上述方程,即可得到高精度的转换矩阵。标定精度与采集点位数量、点位分布均匀性、机器人运动步长直接相关。
常见标定模式 根据相机安装位置的不同,手眼标定分为两种主流模式:
标定模式 安装方式 适用场景 特点 Eye-to-Hand (眼在手外) 相机固定安装在工作台/支架上,不随机器人运动 定位引导、工件识别、缺陷检测 标定流程简单,视野固定,适合静态工作场景 Eye-in-Hand (眼在手上) 相机安装在机器人末端法兰盘,随机器人同步运动 高精度抓取、复杂路径引导、3D视觉检测 标定精度高,可获得动态视野,适合灵活工作场景 本手册中的 2D/3D 相机标定均采用 Eye-to-Hand 模式,相机固定安装,通过采集 N 个示教点的对应关系求解转换矩阵。
5.2 2D 相机标定
2D 相机标定通常采用 N 点( 9 点)标定法;例如图示:

vm 中添加标定流程,获取图形 > 高精度匹配 > N 点标定。
高精度匹配中添加物体模板。

N 点标定中选择 9 点标定,填写偏移值和选择首次移动方向。

在 ARCS 软件中使用步进模式,选择工具坐标系下示教,每次示教步长为 20 mm。同时 vm 操作执行标定流程 9 次,依次记录点位信息。

完成标定流程,生成标定文件并保存。

5.3 3D 相机标定
单击 Mech-vision 主页相机标定。

确认满足以下条件后点击确认检查:
确认机器人底座已牢固安装。
确认相机支架及相机已牢固安装。
确认标定板已牢固安装于机器人末端(ETH)。
确认机器人绝对精度满足使用要求。
确认已进行预热暖机。

开始新的标定。

选择品牌机器人的手眼标定,搜索 AUBO 并选择目标机器人型号。


并依次选择眼在手、手动标定、标定板多个随机位姿。
眼在手:

手动标定:

标定板多个随机位姿:

连接目标相机。

选择使用的标定板型号,并按软件引导检查标定板位置、图像。


添加图像并记录法兰位姿(至少 20 个点位),记录点位时勾选旋转矢量。

记录足够路点后计算外参并保存标定结果,结束标定。


5.4 遨博自研相机标定
本手册采用规格为 9 × 6 格,边长 5mm 的棋盘格标定板子。
注意
使用时需检查棋盘格无脏污、破损。不可使用其他规格的棋盘格进行相机标定。

调节焦距与曝光度
取下相机外壳两侧共 4 颗螺丝。
注意
取螺丝时用手托住相机外壳,防止跌落。

打开 steering 软件,选择 “应用 > 高级 > 一般 > 相机”


按照下图输入相机参数,完成后单击右上角【保存】单击【测试】,查看相机能否正常拍摄。


相机安装于机械臂末端,法兰坐标系 X+、Y- 方向。调整机械臂姿态,使相机垂直于标定板正上方,标定板处于相机视野中心,相机镜头中心点距离标定板 20cm 左右。

调节焦距:
在相机测试界面点击拍照记录按钮可更新相机拍摄的内容,将光源贴近镜头,稍微拧松相机上侧旋钮,并左右旋转焦距环调整焦距,直至拍摄的图像清晰,随后拧紧旋钮。


调节光圈
将光源贴近镜头,稍微拧松相机下侧旋钮,并左右旋转光圈环调整光圈,直至拍摄的图像不过暗也不过曝,随后拧紧旋钮。

装回相机外壳,给机械臂上电。相机镜头中心点垂直于标定板,距离 20cm 左右。调整标定板,使标定板位于相机视野中心位置。

开始相机标定
单击相机标定按钮。

单击重新标定。

通过预览图像再次确认标定板是否位于相机视野中央确认无误后,点击设置拍照点,记录当前机械臂位姿。

6. 视觉应用
6.1 视觉定位
6.1.1 视觉定位原理与流程
视觉定位功能依托视觉节点,提供零代码配置的 Socket 通信解决方案。用户可通过图形化界面完成全流程配置,系统自动生成底层 Socket 脚本,无需编写或接触任何代码。
- 系统架构:节点触发(相机配置)> 后端驱动 > socket 通信 > 视觉系统 > 图像采集、处理 > 输出结果 > 编程应用。
- 核心组件:
- 视觉节点:相机配置的选择与触发识别流程。
- 相机配置模块:相机通信参数管理。
- 通信驱动:任务执行逻辑控制。
6.1.2 相机模板设置与参数调整
- 在 ARCS 软件中依次单击“配置 > 一般 > 相机”,下拉列表展示目前所支持的相机品牌。
- 选择当前相机品牌已支持的驱动,分为 2D 和 3D 驱动。
- 设置相机(服务端)通信的 IP 地址以及端口号。
6.1.3 定位结果获取与应用
在 ARCS 软件中依次单击“编程 > 模板 > 视觉”,下拉列表展示所有有效配置的相机,分为偏移驱动相机和绝对驱动相机。
变量类型
- 偏移驱动相机仅可获取偏移变量。
- 绝对驱动相机可获取偏移变量,路点变量。
触发配置
通过指定字符串控制相机,可触发单次执行拍照流程。
变量存储
Socket 通信数据存储变量。

6.2 视觉抓取
6.2.2 2D 视觉抓取
通信管理添加服务端网络信息,完成 socket 通讯,接收与发送字符串。

在工作流程中添加标定转换节点,加载标定文件。

通过 vm 编写图像采集与数据处理流程,并针对预处理环节及返回数据的不同类型(如绝对位置、相对位置),编写对应的识别流程。

定义触发 vm 识别流程的字符串,用于采集图像、分析数据。

ARCS 编程部分添加视觉节点,完成相机选择、触发配置以及数据存储变量的定义;编写程序树完成最终视觉抓取(或其他动作)的脚本逻辑,例如下图。

6.2.3 3D 视觉抓取
移动机械臂使相机可以拍摄到被抓取范围,设置该点位为拍照点,视觉定位节点选择路点变量,并输入对应抓取物的代码。

判断是否识别到抓取物,若识别到了,则通过变量位置移动到物体上方,否则跳出循环进行下一步工作。

直线运动至适合抓取位置,通常是设置工具坐标系 Z+ 使夹爪垂直抓取后 Z- 返回抓取点再移动至放置点(避免异常移动导致碰撞)。

6.3 脚本编程
脚本编程是视觉应用自定义开发的核心能力,除了基础的通讯功能外,还可以实现视觉结果处理、运动控制、逻辑判断等复杂业务逻辑。
零代码视觉定位配置
ARCS 系统提供了可视化的视觉定位配置能力,无需手动编写代码即可完成基础的视觉通讯功能:
系统架构:节点触发(相机配置)> 后端驱动 > Socket 通信 > 视觉系统 > 图像采集处理 > 输出结果 > 编程应用。
核心组件:
视觉节点:负责触发相机识别流程。
相机配置模块:管理相机通信参数。 。
通信驱动:控制任务执行逻辑。
配置流程:
- 在 ARCS 软件中依次单击“配置 > 一般 > 相机”,选择对应品牌相机的驱动(区分 2D / 3D 驱动)。
- 设置相机服务端的 IP 地址和端口号。
- 在编程界面选择“模板 > 视觉”,添加对应相机的视觉节点。
- 配置触发字符串和结果存储变量,系统会自动生成底层通讯脚本。
视觉偏移控制脚本
固定点位偏移方案:适用于单一点位的视觉补偿场景,以拍照点位为基准叠加偏移量。
固定点位偏移
lua-- 获取基准拍照点位 local take_photo_pose = get_waypoint_pose("take_photo") -- 视觉识别得到的偏移量(单位:米) local offset_x = 0.02 local offset_y = -0.01 local offset_z = 0 -- 计算目标点位 local target_pose = { take_photo_pose[1] + offset_x, take_photo_pose[2] + offset_y, take_photo_pose[3] + offset_z, take_photo_pose[4], take_photo_pose[5], take_photo_pose[6] } -- 移动到目标位置 movej(target_pose, 100, 50)坐标系偏移方案:适用于多个关联点位的整体偏移场景,偏移坐标系后所有关联路点自动同步偏移。
坐标系偏移方案
lua-- 获取参考坐标系位姿 local ref_coord = get_user_frame("ref_coord") -- 坐标系整体偏移(X+200mm,Z-200mm) ref_coord[1] = ref_coord[1] + 0.2 ref_coord[3] = ref_coord[3] - 0.2 -- 更新坐标系 set_user_frame("ref_coord", ref_coord) -- 后续使用该坐标系的路点自动应用偏移 movej("work_point_1", 100, 50) movej("work_point_2", 100, 50)
7. 常见问题
- 问题:vm 连不上相机怎么处理? 解决方案:vm 连不上相机主要原因是连接线连接不稳定或 IP 与电脑不在一个网段,建议重新插拔连接线或将相机 IP 地址与电脑 IP 地址调整至同一网段。调整 IP 后,建议重启相机和电脑,再尝试连接。
- 问题:工控机需与相机在统一内网环境下通讯失败如何处理? 解决方案:设备之间应具备三层网络互通能力,例如
172.17.1.4与172.16.1.2可正常进行 ping 测试。若按照示例方式为梅卡相机分配 IP 地址,但其与目标设备不处于同一网段,则无法建立正常通信连接。 - 问题:为什么深箱、料框内部抓取时识别率低,只能识别到上层物品? 解决方案:Mech-eye 相机配置深度未完全覆盖料框,应将深度范围设置略大于料框深度。
- 问题:配置正确,工控机也识别到物体,但是为什么 ARCS 端报识别超时? 解决方案:需要确认工控机、交换机、相机、ARCS 控制柜与交换机连接通讯带宽均达到至少 1000M,且线缆连接未松动。
- 问题:如何减少不规则摆放物体识别错误概率? 解决方案:提高Mech-vision内置信度配置,减少误识别数量至完全正确。
