はじめに
この記事は、からあげ帝国アドベントカレンダー4日目の記事です。
4日目にして初Qiita投稿ぽいので、からあげ帝国についての情報を貼っておきます。
からあげ先生を中心としたコミュニティです。 (食べ物のから揚げが好きな人が集まっているわけではないです。多分。でもからあげにレモンをかけることをほのめかすと怖いです。)
何をしたか
以下の本で紹介されているAIルンバ (CNNを使用した画像認識で自動走行するルンバ)をROSで動かせるようにしました。
作ってみたものの動く様子は以下です。
ソフトウェアは以下で公開しています。
流れ
以下の流れで最終的にロボットをCNNで動かします。
- 環境の用意
- データ収集
- モデル作成
- 予測&ロボットの動作
環境の用意
ROS2を使用します。カメラ付きの移動ロボットまたは何かしたのシミュレーション環境を用意してください。今回はTurlebot3のシミュレーション環境の前提で説明します。
cd ~/ros2_ws/src
git clone https://github.com/koichirokato/motion_by_cnn
cd ~/ros2_ws
colcon build --symlink-install --packages-select motion_by_cnn
データ収集
今回はTurtleBot3のHomeという環境を使います。
Gazeboの立ち上げ
ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py
操作用ノードの立ち上げ
ros2 run turtlebot3_teleop teleop_keyboard
画像収集用ノードの立ち上げ
ros2 run motion_by_cnn save_images.py --ros-args -r /image:=/camera/image_raw
画像収集用ノードは、ロボットのカメラからのデータを2秒ずつ画像ファイルとして保存します。上限はソースコード内で100枚としています。
適当にロボットを操作してデータを集めましょう。
モデル作成(学習)
集めたデータをgo,stopでラベリングしましょう。画像データをそれぞれのフォルダに割り振ります。
ロボットが進めそうな場合はgoとします。
ラベリング済みの画像データをもとに、まさにからあげ先生の書籍にある通りにCNNの分類器を作成しました。
書籍内では以下のようにじゃんけんの判断でもCNNが使われていました。
書籍を購入していない方向けですと、以下のような画像分類のモデルを作成します。
予測&ロボットの動作
分類器の作成が完了したのちに、
model.h5ファイルと、labels.txtファイルをROSノードを実行するディレクトリにおいて以下を実行すると最初に見せた動画のようにカメラ画像のウィンドウが立ち上がってロボットが動き始めます。
Gazeboの立ち上げ
ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py
画像認識&ロボットの動作用ノードの立ち上げ
ros2 run motion_by_cnn move_by_cnn.py --ros-args -r /image:=/camera/image_raw
最後に
終わりです。ルンバはもっていないですが実機でも動かしてみたいですね。
参考