【RK摄像头使用指南】

RK摄像头使用指南

任务目的

使用RK开发板识别摄像头中的apriltag标签位置姿态。在机械臂程序中通过lebai_sdk使用信号量读取RK开发板的识别结果。

前置知识

路由器及网络配置、Linux使用、AprilTag测距原理、Lua编程、lebai sdk开发

配置RK开发板

摄像头安装

将摄像头固定到手臂末端,将USB线沿手臂固定好并将USB插头接入RK开发板。

网络配置

需要准备好一个路由器,并登录路由器的后台管理系统,确保其正常工作。

准备3根网线,一根有网的网线接入路由器wan口,另一根网线路由器和RK板连接,最后一根分别接入手臂控制箱与路由器。

在路由器的后台管理系统中分别找到手臂控制箱和RK开发板的 IP地址,文档后续假设手臂控制箱的IP为 192.168.22.200 ,RK开发板的IP为 192.168.22.201 /ui/plugin,需要根据实际情况进行修改。

摄像头配置

安装插件

在浏览器中打开RK开发板的控制系统 http://192.168.22.201/ui/plugin

点击左上角的安装插件,选中cameracamera_calibraterapriltag共3个插件,点击"确定"安装插件。安装完成后,点击右侧开关,操作使能打开这3个插件

配置摄像头插件

点击camera插件的"前往插件"按钮,填写摄像头的序号index、画面的宽度width、画面的高度height,画面翻转,填写完成后点击"save"保存参数

配置视觉标定插件

准备标定板,放在摄像头显示范围内。

点击camera_calibrater插件的"前往插件"按钮,填写网络配置时获取到的手臂控制箱的IP、相机位置选择眼在手上、标定板的角点行数、标定板的角点列数、相邻角点之间的间隔长度,格子长度填写完成后点击"save"保存参数

进行视觉标定

通过示教手臂到不同位置,待摄像头画面稳定不晃动后,点击"记录点位"按钮。

持续上述步骤,直到记录的点位数量足够多,点位数量越多,结果越精准,通常需要6~20个点位。

点位采集完成后,点击标定按钮,待下方出现标定结果记录点位变为0,即为标定完成。

配置apriltag插件

点击apriltag插件的"前往插件"按钮,填写标签类型tag_family、标签尺寸tag_size、信号量signal,填写完成后点击"save"保存参数。

完成配置

恭喜,至此已完成对RK开发板的配置。

配置手臂

在浏览器中打开手臂的控制系统 http://192.168.22.200/dashboard/

点击"场景" "导入",将上方的apriltag.zip导入进去,即可得到如图所示3个场景。

配置RK开发板参数

打开名为apriltag的场景,即上图第1个。

第1步修改变量way为signal,使用进行通信,第2步将RK开发板的IP地址赋值给camera_ip变量,第3步将配置RK开发板的apriltag插件时设置的信号量signal赋值给sid变量。

第四步可以将run_test置为true后,点击右上角的运行,会打印出找到的所有标签,并打印耗费的时间。测试完后务必将run_test置为false,后续场景中均需要以此场景为基础 调用该场景里的函数。

csharp 复制代码
import cv2
import apriltag
import numpy as np

# 初始化摄像头
cap = cv2.VideoCapture(0)

# 初始化AprilTag检测器
detector = apriltag.Detector()

while True:
    ret, frame = cap.read()
    if not ret:
        break

    # 转换为灰度图像
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 检测AprilTag
    tags = detector.detect(gray)

    for tag in tags:
        # 获取标签的中心位置
        center = tag.center
        print(f"Tag ID: {tag.tag_id}, Center: {center}")

        # 获取标签的姿态
        pose = tag.pose
        print(f"Pose: {pose}")

    # 显示图像
    cv2.imshow('frame', frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

示教获取抓取点与标签的相对位置

打开名为apriltag-offset的场景,即上图第3个。

配置tag_id为目标标签的ID。

点击右上角的运行,会打印出识别到的所有标签的位置信息,然后工具中心点TCP会移动到标签上方200mm的位置,并自动进入示教模式,将手臂拖拽到理想的抓取位后,按下手臂肩部灯板的按钮,会打印出位置信息,首先检验一下good_pose和verify是否相差2mm以内,确认数据无误后复制offset的值

csharp 复制代码
-- 初始化lebai_sdk
local lebai = require("lebai_sdk")

-- 读取信号量
local tag_position = lebai.read_signal("tag_position")
local tag_pose = lebai.read_signal("tag_pose")

-- 根据标签位置和姿态控制机械臂
-- 示例:移动机械臂到标签位置
lebai.move_to(tag_position)

运行抓取示例

打开名为"抓标签"的场景,即上图第2个,该场景为使用示例,可自由更改使用。

将上一步得到的offset赋值给cell2tag,配置tag_id为目标标签的ID。

将手臂示教到一个合适的位置后,点击右上角的运行,会运动到抓取点进行抓取,并返回到起始位置。

相关推荐
侯小啾3 小时前
VMware-ubuntu网络配置
网络·ubuntu·智能路由器·vmware·虚拟机
ARoger_miu579 小时前
11月13号作业
网络·智能路由器
Yurko139 小时前
【计网】基于三层交换机的多 VLAN 局域网组建
网络·学习·计算机网络·智能路由器
njxiejing2 天前
基于Packet Tracer的路由器的基本配置(地址、密码,远程登录)
网络·智能路由器
xxtzaaa3 天前
手游端游IP被限制无法多开如何解决
网络协议·tcp/ip·智能路由器
xiaoxiongip6664 天前
假设两个设备在不同网段,网关怎么设置才能通呢
网络·爬虫·python·https·智能路由器
渡我白衣4 天前
字符串的陷阱与艺术——std::string全解析
网络·c++·人工智能·自然语言处理·智能路由器·信息与通信·caffe
报错小能手5 天前
计算机网络自顶向下方法33——网络层 路由器工作原理 输入端口处理和基于目的地转发 交换 输出端口处理
网络·计算机网络·智能路由器
Yurko135 天前
【计网】基于三层交换机和 RIP 协议的局域网组建
网络·学习·计算机网络·智能路由器
xixixi777776 天前
内部网关协议——OSPF 协议(开放最短路径优先)(链路状态路由协议)
网络·智能路由器