主要機能の紹介
概要
インテリジェント・ビジョン制御ロボットアームシステムは、先進的なコンピュータビジョン技術と高度なロボットアーム制御アルゴリズムを統合し、ビジョン誘導による把持を一貫して実現するシステムです。
ビジョン検出システム
YOLO11 検出エンジン
技術的特長:
- モデル構成:YOLO11n 量子化モデル、RDK X5 プラットフォーム向けに最適化
- 検出対象:3 クラス検出(オレンジ、緑、赤の図形)
- 入力サイズ:320 × 320 ピクセル
- 検出精度:信頼度しきい値 0.7、IoU しきい値 0.45
- 処理速度:約 30fps のリアルタイム検出
検出の流れ:
- 画像の前処理:BGR から NV12 形式への変換、サイズのスケーリング
- モデル推論:BPU による高速推論、マルチスケール特徴抽出
- 後処理:非最大値抑制(NMS)、座標の逆量子化
- 結果の出力:バウンディングボックス、信頼度、クラス情報
VLM 検出モード(オプション)
技術的特長:
- モデル:Qwen2-VL-72B-Instruct
- API:SiliconFlow API サービス
- 機能:自然言語による指示に基づく物体検出
- 用途:複雑なシーンにおける意味的な検出
設定要件:VLM 検出機能を使用するには、SiliconFlow の API キーを設定する必要があります。詳しくは SiliconFlow API キー取得ガイド を参照してください。
使用例:
# プロンプトの例
"画像内の赤い円形の物体と緑の四角形の物体を検出してください"
"画像内で最も大きい物体を見つけて位置を示してください"
計測システム
座標系
- 原点:画像の中心
- 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.9 638, 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株式会社までお問い合わせください。
ドキュメント