最新AI「Gemini Robotics」を使ったロボットアーム開発に挑戦!

メインプロジェクト!AIロボット開発にチャレンジ!

皆さん、こんにちは!

大阪国際工科専門職大学 情報工学科 ロボット開発コース 3回生の宮田匠です。


趣味はゲーム、音楽鑑賞、オタ活で、大学では日々ロボット関連の技術を学んでいます。休日は趣味に没頭してリフレッシュしつつ、勉強とのメリハリをつける生活を心がけています!

インターンシップの様子

本記事では、スリーアップテクノロジーさんにおいて取り組んだDENSO WAVE製のロボットアーム「VP-6242」の制御システム開発について、目的から使用した技術まで詳しくご紹介します!

今回の実習での僕のメインプロジェクト! それは、Googleの最新AI「Gemini Robotics ER 1.5」を使ったAIロボットシステムの開発です!

このテーマを選んだ理由

僕は大学でロボットを学んでいるので、「産業用ロボットに触ってみたい!」という強い憧れがありました。それに加えて、今まさに急成長している「最新のAIにも興味津々!」。この2つを組み合わせた開発ができるなんて、ワクワクしかありませんでした!

システムの仕組み

今回開発したのは、こんなシステムです。

  1. カメラが作業台の様子を撮影します。
  2. 「この物体を認識して!」と、画像プロンプト(指示)をAIに送ります。
  3. AIが賢く物体を認識し、「見つけたよ!」と座標情報をJsonファイル形式で返してくれます。
  4. その情報を元に、PCがデンソーロボットへ「掴んで!」「運んで!」と指令を送ります。

以下はシステム構成図です!

システム構成図
システム構成図

使用されている技術

このシステムを実現するために、2つの重要な技術を使いました!

1. Gemini Robotics ER 1.5の画像認識

今回の開発の核となるのが、Google Gemini Robotics ER 1.5という、ロボット制御に特化したAI画像認識技術です!

どんなことができるの?

  • カメラで撮影した画像を送るだけで、AIが自動的に物体を認識してくれます。
  • ユーザーが「野球ボールをカゴに入れて」と指示すると、AIが画像の中から「野球ボール」と「カゴ」を自動的に見つけてくれます。
  • 見つけた物体の位置情報(座標)を、JSON形式で返してくれます。

技術的なポイント:

  • モデル名は「gemini-robotics-er-1.5-preview」という、ロボット制御専用のAIモデルを使用。
  • 画像とプロンプト(指示文)を一緒に送ることで、自然言語で指示できる。
  • 座標は0~1000の範囲で正規化されて返ってくるので、どんなサイズの画像でも対応可能。
  • Temperature(ランダム性)を0.5に設定することで、安定した認識結果を得られる。

実際の使い方

カメラで撮影した画像をJPEG形式に変換し、ユーザーの指示(例:「野球ボールをカゴに入れて」)と一緒にAPIに送信します。すると、AIが画像内のすべての物体を検出し、指示に基づいて「ピック対象」と「プレース先」を自動的に選んで、座標情報をJSON形式で返してくれます!
以下は実際に動かしてみたときの実行結果です!

Gemini実行結果のスクリーンショット

Gemini APIの実行結果

2. B-cap通信によるロボット制御

ロボットを動かすために使ったのが、B-cap通信という技術です!

B-capって何?

B-capは、DENSO社のロボットを制御するための標準的な通信プロトコルです。Pythonから直接ロボットに指令を送ることができるので、柔軟な制御が可能になります!

どんなことができるの?

  • ロボットの位置を取得したり、指定した位置へ移動させたりできます。
  • ロボットのモーターをON/OFFしたり、速度を調整したりできます。
  • ロボットの現在の姿勢(角度)を取得したり、目標姿勢を設定したりできます。

技術的なポイント

  • 通信方式: TCP/IP通信を使用(IPアドレス: 192.168.127.13、ポート: 5007)
  • ライブラリ: `pybcapclient`というPythonライブラリを使用
  • 接続の流れ:
    1. B-capサービスを開始
    2. コントローラーに接続(`CaoProv.DENSO.VRC`)
    3. ロボットハンドルを取得
    4. 制御権を取得(`TakeArm`)
    5. モーターをONにして、実際の制御を開始

実際の使い方:


# ロボットに接続
bcap_client = bcapclient.BCAPClient("192.168.127.13", 5007, 2000)
bcap_client.service_start("")
controller_handle = bcap_client.controller_connect("", "CaoProv.DENSO.VRC", "localhost", "")
robot_handle = bcap_client.controller_getrobot(controller_handle, "Arm", "")

# 制御権を取得してモーターをON
bcap_client.robot_execute(robot_handle, "TakeArm", [0, 0])
bcap_client.robot_execute(robot_handle, "Motor", [1, 0])

# ロボットを指定位置へ移動
bcap_client.robot_move(robot_handle, 1, [x, y, z, rx, ry, rz], "P")

この2つの技術を組み合わせることで、AIが認識した物体の位置情報を、B-cap通信でロボットに送り、ロボットが自動的に物体を掴んで運ぶという、まさに未来のようなシステムが実現できました!

実際に動いているときの動画です!(この動画の編集や文字の字幕などもすべてAIで行いました。AIの進化すごい、、、)

開発のウラ側:工夫と苦労!

開発期間は4週間! もちろん簡単な道のりではありませんでした。

特に苦労したこと:

  • 初めて触るDENSOロボットの仕様理解
  • 正確な認識に必要なカメラの基礎知識
  • AIに意図を伝えるプロンプト(指示)の調整
  • 使いやすいGUI(画面)の作成
  • PCの設定など、環境構築にも苦戦

乗り越えるために工夫した点:

  • 安全第一!ロボットが変な動きをしないよう、動作範囲をしっかり設定しました。
  • 使いやすく!UIからロボットの細かな設定を変更できるようにしました。
  • 音声認識でロボットに指令を出す機能も実装しました!

開発ツールも、最初は「Gemini CLI」を使い、利用制限が来てからはWeb版Geminiを使い、最後は最新の「Composer 1」に乗り換えるなど、まさに試行錯誤の連続でした。

実習を終えて:最高の達成感と学び!

この4週間は、本当にあっという間でした!

なにより、AIの面白さとスゴさを全身で体感できました。そして、あれほど苦労した産業用ロボットが、自分のプログラムで狙い通りに動いた瞬間! あの達成感は、絶対に忘れられません!大学の授業だけでは決して学べない、開発の難しさ、そしてそれを乗り越えた時の大きな喜び。すべてが僕の財産です。

最後になりましたが、お忙しい中、こんな僕にゼロから丁寧に指導してくださったスリーアップテクノロジーの三上様に、心から感謝しています!

この最高の経験をバネに、卒業研究も就職活動も全力で頑張ります!

本当にありがとうございました!