のび太くんでもわかる!ロボットの頭脳「OpenMind/OM1」とは?
今日の宿題は、未来のロボット技術についてだね。
OpenMind/OM1は、未来のロボットを作るための、いわば「頭脳と神経系」をまとめたソフトウェアのセットなんだ。ドラえもんの世界で言うなら、ドラえもんが持ってる「高性能AI」や、のび太くんが操作するロボットの「制御システム」を、簡単に作れるようにするための道具みたいなものだよ。
このソフトウェアは「モジュラー」って呼ばれていて、まるでレゴブロックを組み立てるように、必要な機能を組み合わせてロボットの「頭脳」をデザインできるんだ。
誰でも使える「AIの道具箱」
複雑なAIやロボットの動きを、簡単に組み合わせられるようにできているんだ。
「マルチエージェント」
複数のロボットが協力して、一つの仕事をこなせるようにできるんだ。例えば、複数のミニドラが協力して部屋を片付けるみたいなことだね。
「ROS2」
ロボット開発の世界で標準的に使われている「ROS2」という技術と相性が良いんだ。これを使えば、世界中のエンジニアが作った便利な部品を、自分のロボットにも組み込めるようになるんだよ。
のび太くん、君が将来、ロボットを作るソフトウェアエンジニアになったと想像してみて。
のび太
「ドラえもーん!僕、自分の部屋を自動で片付けてくれるロボットを作りたいんだ!」
ドラえもん
「のび太くん、それなら『OpenMind/OM1』を使ってみようよ!これを使えば、君の夢を叶えられるんだ。」
のび太
「ふうん、でも難しそうだなぁ...」
ドラえもん
「大丈夫!『OpenMind/OM1』は、君が作りたいロボットの機能を、レゴブロックみたいに組み立てていけるんだ。」
ドラえもん
「まずは、ロボットの『目』にあたるカメラを繋げて、次に『手』にあたるアームを制御する部分を繋げる。そして最後に、ゴミを見つけたら、それをゴミ箱に運ぶようにAIの頭脳を繋げるんだ。」
ドラえもん
「しかも、のび太くんが作ったロボットを、さらに他のロボットと一緒に動かしたいと思ったら、『マルチエージェント』機能を使えばいいんだよ。例えば、一つ目のロボットが『ゴミを見つける』役、二つ目のロボットが『ゴミを運ぶ』役、って役割を分担させて、協力して動かすことができるんだ!」
のび太
「すごい!これなら、僕でも自分のロボットチームを作れるかも!」
ドラえもん
「そうなんだ!『OpenMind/OM1』があれば、複雑なロボットシステムを、まるで一つのコントローラーで操作するみたいに、簡単に開発できるようになるんだよ。」
さあ、実際に『OpenMind/OM1』を動かしてみよう!
まず、君のパソコンに「ROS2」というソフトをインストールする必要があるんだ。 (ドラえもんのひみつ道具「もしもボックス」で、環境構築を自動でやってくれるといいんだけどね!)
# Ubuntu 22.04でのROS2 Humbleインストール例
sudo apt update
sudo apt install ros-humble-desktop
次に、『OpenMind/OM1』をインストールするよ。
# gitコマンドでOM1のソースコードをダウンロード
git clone https://github.com/OpenMind/OM1.git
# rosdepコマンドで必要なライブラリをインストール
cd OM1
rosdep install --from-paths src --ignore-src -r -y
# ビルドして、実行可能にする
colcon build --symlink-install
さあ、いよいよサンプルコードを動かしてみよう!
このサンプルコードは、「ロボットに『Hello, world!』と喋らせる」という、プログラミングの最初の課題みたいなものだよ。
# 'robot_talker.py'というファイルを作成
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
class RobotTalker(Node):
def __init__(self):
super().__init__('robot_talker')
self.publisher_ = self.create_publisher(String, 'robot_say', 10)
timer_period = 0.5
self.timer = self.create_timer(timer_period, self.timer_callback)
self.i = 0
def timer_callback(self):
msg = String()
msg.data = f'Hello, world! {self.i}'
self.publisher_.publish(msg)
self.get_logger().info(f'Publishing: "{msg.data}"')
self.i += 1
def main(args=None):
rclpy.init(args=args)
robot_talker = RobotTalker()
rclpy.spin(robot_talker)
robot_talker.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
このコードを動かすと、「ロボットが喋っている」というデータを、他のプログラムに送ることができるんだ。
のび太
「ドラえもん、このコードをどうやって動かすの?」
ドラえもん
「いい質問だね、のび太くん!さっき『colcon build』をした後、こんな風にコマンドを入力するんだ。」
# ロボットを喋らせるプログラムを起動
ros2 run om1_examples robot_talker
これで、君のパソコンの画面に、「Hello, world!」というメッセージが、ずっと表示され続けるはずだよ。
のび太
「すごい!これで僕のロボットも、僕の言うことを聞いてくれるようになるのかな!」
ドラえもん
「その通り!これはほんの始まりにすぎないけど、この技術を使えば、君が思い描く未来のロボットを、きっと作ることができるんだよ!」
OpenMind/OM1 GitHub Repository