主要機能の紹介
概要
インテリジェントビジョン ロボットアーム制御システムは、先進的なコンピュータービジョン技術と精密なロボットアーム制御アルゴリズムを統合し、ビジョンガイドによる把持を一貫して行うシステムを実現しています。
🎯 ビジョン検出システム
YOLO11検出エンジン
技術的特長:
- モデルアーキテクチャ: RDK X5プラットフォーム向けに最適化されたYOLO11n量子化モデル
- 検出対象: 3クラス検出(オレンジ色・緑色・赤色の形状)
- 入力サイズ: 320×320ピクセル
- 検出精度: 信頼度しきい値0.7、IoUしきい値0.45
- 処理速度: 約30fpsのリアルタイム検出
検出の流れ:
- 画像の前処理: BGRからNV12形式への変換、リサイズ
- モデル推論: BPUアクセラレーション推論、マルチスケール特徴抽出
- 後処理: 非最大値抑制、座標の逆量子化
- 結果出力: バウンディングボックス、信頼度、クラス情報
VLM検出モード(オプション)
技術的特長:
- モデル: Qwen2-VL-72B-Instruct
- API: SiliconFlow APIサービス
- 機能: 自然言語の記述による物体検出
- 用途: 複雑なシーンでのセマンティック検出
設定要件: VLM検出機能を使用するにはSiliconFlowのAPIキーの設定が必要です。詳しい取得方法は SiliconFlow API_KEYの取得 を参照してください。
使用シーン:
# 示例提示词
"检测图像中的红色圆形物体和绿色方形物体"
"找出图像中最大的物体并标注位置"
測定システム
座標系
- 原点: 画像の中心
- X軸: 水平方向、右が正
- Y軸: 垂直方向、上が正
- 象限: I(右上)、II(左上)、III(左下)、IV(右下)
測定機能
- 位置測定: 画像中心に対する物体中心の座標
- 距離測定: 物体から中心点までの直線距離
- サイズ測定: 物体のバウンディングボックスの幅と高さ
- 象限識別: 物体が位置する象限の表示
可視化表示
- 座標軸の描画(白い十字線)
- 物体のバウンディングボックス(色付きの矩形)
- 距離の連結線(黄色の直線)
- 測定データの表示(テキスト表示)
🦾 ロボットアーム制御システム
ハードウェア仕様
ロボットアームのパラメーター:
- 自由度: 4DOF(4関節)
- 制御方式: サーボ駆動、シリアル通信
- 通信プロトコル: 115200ボーレート、/dev/ttyS1
- 作業範囲:
- X軸: 50-180mm
- Y軸: -80-80mm
- Z軸: -50-140mm
逆運動学アルゴリズム
アルゴリズムの実装 (user_arm.py):
def get_coordinate(self, x1, y1, z1):
# 几何参数
a = 109 # 大臂长度
b = 126 # 小臂长度
# 空间距离计算
c = math.sqrt(x*x + y*y + z*z)
# 关节角度计算
theta1 = math.acos((a*a + c*c - b*b) / (2*a*c))
theta2 = math.atan(z / math.sqrt(x*x + y*y))
# 角度转换和限制
alpha = 83 - math.atan(y/x) * (180/math.pi)
beta = 95 - (90 - beta1)
gamma = 141 - (180 - (beta1 + (theta1 + theta2)))
return (alpha, theta, beta, gamma)
運動制御
補間アルゴリズム
直線補間: 2点間に滑らかな軌道を生成します
# 轨迹点数计算
num_points = int((abs(delta_x) + abs(delta_y)) / 9.0)
num_points = max(8, min(num_points, 25))
# 插值计算
for i in range(num_points + 1):
t = i / num_points
x = start_x + t * (end_x - start_x)
y = start_y + t * (end_y - start_y)
z = start_z + t * (end_z - start_z)
安全機構
- リミットチェック: 目標位置が作業範囲内にあるかを厳密に検証
- スムーズ制御: 補間アルゴリズムにより安定した動作を確保
- リアルタイム監視: 現在位置を記録し、相対移動に対応
- エラー処理: 範囲外の操作は自動的に拒否し、エラー情報を返す
制御動作
基本動作
- 把持:
catch_sth()- グリッパーを閉じる - 解放:
release_sth()- グリッパーを開く - 初期化:
arm_init_action()- 初期位置に戻る
複合動作
- 物体の把持 (
arm_catch_sth):
抬升 → 移动到目标上方 → 下降 → 抓取 → 抬升 → 回到初始位置
- 通常配置 (
arm_normal_put_sth):
抬升 → 移动到目标上方 → 下降 → 释放 → 抬升 → 回到初始位置
- 積み重ね配置 (
arm_stack_put_sth):
抬升到堆叠高度 → 移动到目标 → 释放 → 抬升 → 回到初始位置
🔗 ビジョンとロボットアームの統合
座標変換システム
画像座標からロボットアーム座標への変換:
def calculate_arm_pos(self, x, y):
if x <= 0:
position_x = (0.821 * y + 114.2) - 10
position_y = (0.3638 * x - 15.049) - 6
else:
position_x = 0.821 * y + 114.2
position_y = 0.3638 * x - 15.049
return position_x, position_y
キャリブレーションパラメーター:
- X軸変換係数: [0.000004, 0.9879, -2.9465]
- Y軸変換係数: [0.0005, 0.9638, 228.29]
作業フロー
自動把持の流れ
- ビジョン検出: 対象物体の位置を認識
- 座標変換: 画像座標をロボットアーム座標に変換
- 経路計画: 安全な把持経路を生成
- 把持の実行: ロボットアームを制御して把持動作を完了
- 状態フィードバック: 実行結果を返す
精度の制御
- ビジョン精度: ピクセル単位の位置決め精度
- ロボットアーム精度: ミリ単位の制御精度
- 繰り返し精度: ±2mm
📊 性能指標
システム性能
- 検出遅延: <33ms (30fps)
- 制御応答: <100ms
- システムスループット: 把持頻度 >20回/分
- メモリ使用量: <500MB
精度指標
- 検出精度: 信頼度 >90%
- 位置決め精度: ±5ピクセル
- 把持成功率: >85%
🛠️ 設定パラメーター
検出設定
detection:
class_names: ["orange", "green", "red"]
colors:
- [0, 165, 255] # 橙色
- [0, 255, 0] # 绿色
- [0, 0, 255] # 红色
font_scale: 1.0
line_thickness: 2
測定設定
measurement:
enable_coordinate_system: true
enable_distance_measurement: true
enable_dimension_measurement: true
axis_color: [255, 255, 255]
measurement_color: [255, 255, 0]
ロボットアーム設定
arm:
serial_port: "/dev/ttyS1"
baudrate: 115200
workspace_limits:
x_range: [-200, 200]
y_range: [100, 400]
z_range: [30, 150]
🔧 デバッグと最適化
性能監視
- FPSカウンターでリアルタイムのフレームレートを表示
- メモリ使用量の監視
- CPU使用率の統計
- ネットワーク遅延の測定
デバッグツール
- リアルタイムのログ出力
- 可視化デバッグインターフェース
- APIテストクライアント
- 性能分析ツール
最適化のヒント
- ハードウェアの最適化: SSDストレージ、有線ネットワーク接続を使用
- アルゴリズムの最適化: 検出しきい値の調整、補間パラメーターの最適化
- システムの最適化: 不要なサービスを停止し、プロセスの優先度を上げる
お問い合わせ
資料のダウンロード・技術サポートについては、HumansX株式会社までお問い合わせください。
ドキュメント