3. Teledyne视觉软件平台与开发环境搭建
Teledyne DALSA 的机器视觉开发体系并不是单一软件,而是由相机固件、传输标准、SDK 与上层应用框架共同组成的分层结构。理解这套分层关系,是后续做机器人视觉定位与引导的前提。本节围绕 Sapera LT、Teledyne DALSA SDK、GigE Vision/GenICam 接口配置以及机器人通信环境准备展开,目标是搭建一个“相机能被枚举、图像能被采集、参数能被读写、机器人能收到坐标”的最小可用开发环境。
一、软件平台的分层关系
从下往上,第一层是相机与镜头等物理设备;第二层是传输与协议层,GigE Vision 定义了图像、控制命令和事件如何通过千兆以太网传输,GenICam 则定义了相机功能如何以统一的方式被描述和访问;第三层是 Sapera LT,它是 Teledyne DALSA 提供的底层采集与设备管理框架,负责设备发现、采集控制、缓冲区管理和显示;第四层是 Teledyne DALSA SDK,提供 C/C++、.NET 等语言的 API 与示例,供开发者编写自己的采集与处理程序;最上层才是机器人视觉引导应用,包括标定、位姿计算和通信。
二、Sapera LT 与 SDK 的安装要点
Sapera LT 是采集与设备管理的基础,安装时需要注意版本与操作系统、相机固件的匹配。安装完成后,系统会注册 Sapera 设备驱动和 GigE Vision 过滤器驱动,这是相机能被枚举的关键。Teledyne DALSA SDK 通常与 Sapera LT 配套安装,安装后可在安装目录下找到示例工程,例如采集、显示、参数读写等示例,建议先编译运行官方示例,确认相机能被识别并出图,再开始编写自己的程序。
安装后需要重点确认三件事:一是设备管理器中能看到相机对应的网络适配器与 GigE Vision 设备;二是 Sapera 自带的相机配置工具能枚举到相机并显示其 IP;三是示例程序能正常采集到图像。如果相机无法枚举,优先检查网卡驱动、防火墙和 IP 网段,而不是直接怀疑相机故障。
三、GigE Vision 与 GenICam 接口配置
GigE Vision 相机通过千兆以太网与主机通信,配置的核心是 IP 地址规划。相机的 IP 必须与主机网卡处于同一网段,例如主机网卡设为 192.168.1.10,掩码 255.255.255.0,相机设为 192.168.1.20。若相机出厂为 DHCP 或 LLA(链路本地地址),需要先用 Sapera 工具或厂商工具将其改为固定 IP,避免每次上电后地址变化导致程序连接失败。
GenICam 的作用是把相机的功能抽象成统一的“特征”(Feature),例如曝光时间、增益、触发模式、像素格式等。开发者不需要针对每个型号写不同的寄存器操作,而是通过 GenICam 特征名访问。常见的特征包括:ExposureTime、Gain、TriggerMode、TriggerSource、PixelFormat、Width、Height、AcquisitionFrameRate。在 Sapera LT 中,这些特征可以通过相机对象读写,也可以通过 GenICam 浏览器查看当前值和取值范围。
// 以 Sapera LT 风格示意:设置曝光与触发
camera.SetFeatureValue("ExposureTime", 8000); // 单位微秒
camera.SetFeatureValue("Gain", 6); // 单位 dB
camera.SetFeatureValue("TriggerMode", "On");
camera.SetFeatureValue("TriggerSource", "Software");
camera.SetFeatureValue("PixelFormat", "Mono8");
配置时要注意参数之间的约束关系。例如提高帧率会缩短最大曝光时间,增大分辨率会降低可达到的帧率,触发模式下自由运行帧率设置可能被忽略。建议先用 GenICam 浏览器逐项确认取值范围,再写入程序,避免运行时因参数越界而报错。
四、机器人通信环境准备
视觉系统最终要把定位结果发送给机器人。通信方式常见有三种:TCP Socket、UDP 以及现场总线(如 EtherNet/IP、PROFINET)。对于开发阶段,建议先用 TCP 或 UDP 打通链路,验证坐标能被机器人接收,再考虑接入现场总线。
通信环境准备包括:确认机器人与视觉主机的 IP 在同一网段;约定数据格式,例如以字符串发送 X,Y,Angle\n,或使用固定长度的二进制结构;约定坐标系与单位,例如毫米和度,并明确正方向定义;约定握手方式,例如视觉发送后机器人回 OK,或机器人主动请求。下面是一个简单的 TCP 服务端示例,用于向机器人发送定位结果:
# Python 示例:视觉侧 TCP 服务端发送坐标
import socket
HOST, PORT = "192.168.1.10", 6000
srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
srv.bind((HOST, PORT))
srv.listen(1)
print("等待机器人连接...")
conn, addr = srv.accept()
print("机器人已连接:", addr)
x, y, angle = 123.45, -67.89, 12.3 # 示例数据,单位 mm / 度
msg = f"{x:.2f},{y:.2f},{angle:.2f}\n"
conn.sendall(msg.encode("utf-8"))
print("已发送:", msg.strip())
conn.close()
机器人侧需要编写对应的客户端或通信程序,解析收到的字符串并转换为机器人坐标。调试时建议先用网络调试助手模拟机器人,确认视觉侧能稳定发送,再接入真实机器人。若通信失败,按“物理链路—IP 连通性—端口监听—数据格式”的顺序排查,而不是直接修改程序逻辑。
五、最小可用环境验收
完成上述配置后,可以用一个最小闭环来验收:相机被 Sapera 枚举并显示 IP;示例程序能连续采集图像;通过 GenICam 特征能修改曝光并观察到图像亮度变化;视觉程序能计算一个简单目标的位置;通过 TCP 把坐标发送到网络调试助手并看到正确格式。这个闭环打通后,后续的标定、手眼关系和引导逻辑才有稳定的运行基础。