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

本記事では、スリーアップテクノロジーさんにおいて取り組んだDENSO WAVE製のロボットアーム「VP-6242」の制御システム開発について、目的から使用した技術まで詳しくご紹介します!
今回の実習での僕のメインプロジェクト! それは、Googleの最新AI「Gemini Robotics ER 1.5」を使ったAIロボットシステムの開発です!
このテーマを選んだ理由
僕は大学でロボットを学んでいるので、「産業用ロボットに触ってみたい!」という強い憧れがありました。それに加えて、今まさに急成長している「最新のAIにも興味津々!」。この2つを組み合わせた開発ができるなんて、ワクワクしかありませんでした!
システムの仕組み
今回開発したのは、こんなシステムです。
- カメラが作業台の様子を撮影します。
- 「この物体を認識して!」と、画像とプロンプト(指示)をAIに送ります。
- AIが賢く物体を認識し、「見つけたよ!」と座標情報をJsonファイル形式で返してくれます。
- その情報を元に、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形式で返してくれます!
以下は実際に動かしてみたときの実行結果です!
2. B-cap通信によるロボット制御
ロボットを動かすために使ったのが、B-cap通信という技術です!
B-capって何?
B-capは、DENSO社のロボットを制御するための標準的な通信プロトコルです。Pythonから直接ロボットに指令を送ることができるので、柔軟な制御が可能になります!
どんなことができるの?
- ロボットの位置を取得したり、指定した位置へ移動させたりできます。
- ロボットのモーターをON/OFFしたり、速度を調整したりできます。
- ロボットの現在の姿勢(角度)を取得したり、目標姿勢を設定したりできます。
技術的なポイント
- 通信方式: TCP/IP通信を使用(IPアドレス: 192.168.127.13、ポート: 5007)
- ライブラリ: `pybcapclient`というPythonライブラリを使用
- 接続の流れ:
- B-capサービスを開始
- コントローラーに接続(`CaoProv.DENSO.VRC`)
- ロボットハンドルを取得
- 制御権を取得(`TakeArm`)
- モーターを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の面白さとスゴさを全身で体感できました。そして、あれほど苦労した産業用ロボットが、自分のプログラムで狙い通りに動いた瞬間! あの達成感は、絶対に忘れられません!大学の授業だけでは決して学べない、開発の難しさ、そしてそれを乗り越えた時の大きな喜び。すべてが僕の財産です。
最後になりましたが、お忙しい中、こんな僕にゼロから丁寧に指導してくださったスリーアップテクノロジーの三上様に、心から感謝しています!
この最高の経験をバネに、卒業研究も就職活動も全力で頑張ります!
本当にありがとうございました!

