MoveToPointToolは、RAIに実装されているアームロボットを制御するためのTool。座標と把持動作の情報を/manipulator_move_toというService通信で送るもので、通信を受け取ったService側でロボットを動かす処理は別途作成が必要になる。
そのため、今回Service通信を受け取り、MoveIt2を使用して、該当座標へ動かすServiceノードを新たに作成した。
検証に当たり、新たに作成したToolで、カメラから得られた情報をVLMに送り、そこで把持対象物の位置を取得、物体位置から把持座標を計算する処理を行っている。
RAIに実装されているVLMによる物体認識機能で、画像とテキストから画像上の物体の位置をバウンディングボックス情報で出力する「Grounding DINO」というモデルが使用されている。
ROS 2 Serviceノードとして実装されており、検出対象物体名と画像を入力としてService通信を送ると、VLMによる認識結果が対象のバウンディングボックス情報として出力される。
今回使用したアームロボットのCOBOTTAは公式から提供されているライブラリ「denso_robot_ros2」を使用することで、ROS 2のMoveIt2を活用したロボット制御が可能となる。ただし、このパッケージではハンド制御は非対応であるため、Python APIでのハンド制御命令で対応を行った。RAI側から出力された座標情報を受け取ると、このライブラリを使用したプログラムが動的にロボットを制御処理するプログラムを作成している。
冒頭で紹介したロボットが把持を行っている動画は、上記の構成で行った検証を撮影したものである。
入力されたタスクを基にロボットが黒い消しゴムの把持をしたり、指定位置で把持を止めて離したり、別の色の消しゴムを把持したりという動作ができていることが分かる。はじめに入力されたタスクをRAIがどのように処理しているかを解説する。
入力されたタスクは“grab a black eraser.”で黒い消しゴムを把持するという内容だ。RAIは下記の順序で実行する。
その後に入力した命令についても同様にLLMがタスクを理解し、動的に必要な機能を起動している。
RAIを用いた実機検証により、実際に物体把持が可能であることを確認したが、この検証中に幾つかの課題が見られた。
命令の実行時に物体座標が不明な場合に、ランダムな座標に移動したり、存在しないToolを呼び出そうとしたりするなど、誤作動が発生することがあった。システムプロンプトの調整で改善が見られたが、完全には解決できていない。より高性能なLLMであるChatGPTのAPIを使用すると、より精度が改善される可能性が考えられる。
RAIのドキュメントは、サンプルコードが提供されているものの、Toolの作成やカスタマイズに関する詳細な説明が不足している。そのため、今回の検証で作成した新規Toolは既存コードからの処理を読み取り、試行錯誤での作成となった。ロードマップには開発者向けSDK(ソフトウェア開発キット)を提供予定との記載があり、今後のドキュメントの充実が期待される。
ChatGPTの登場を契機に、社会では生成AIの需要が高まり、ロボット制御などのビジネス分野にも広く活用されるようになってきた。
今回は、ROS 2のAIエージェントライブラリであるRAIの概要と生成AIを活用したアームロボット制御の事例を紹介した。RAIはリリースされたばかりで発展途上ではあるが、ROSを通じて自然言語によるロボット制御の可能性が分かってきた。RAIは頻繁に更新されているため、今後のさらなる成長が見込まれる。
生成AIは今後も発展を続け、ロボット開発をはじめ社会においてさらに大きな影響を与えるであろう。(連載完)
富士ソフト AI・ロボット開発 R&Dチーム
富士ソフトでAI・ロボット開発の調査研究を主務として、最新技術の調査・社内外へのセミナー等に対応し、AI・ロボット開発の最新技術の習得および普及のため活動している。
Copyright © ITmedia, Inc. All Rights Reserved.