🚗

JetBot + Zao SDK を活用した自動運転と遠隔監視の実現(実践編1)

2024/03/25に公開

はじめに 🌟

Zao SDK スターターキット上で、PyTorch を利用してラジコンカーの自動運転と Zao Cloud View からの遠隔監視でラジコンカーの自動運転停止・再開を実現する方法を3部構成で紹介していきます。

本記事は3部構成の一部です。

  1. 準備編
  2. 実践編1 (本記事)
  3. 実践編2

1: 自動運転用教師データの収集 🚀

それではいよいよ自動運転の実現に取り組みます。
Zao SDK スターターキット上から、「準備編」の記事で作成した Docker イメージを実行して、JupyterNote を起動します。

最初に、ラジコンカーが走行するコースに関する「教師データ」を作成しましょう。
このデータには、MIPI カメラが捉えた画像と、ラジコンカーがどの方向に進むべきかを示す X 軸と Y 軸の座標が含まれます。
コースは道路パターンを使ったものや、地面に黒いビニールテープを貼ったライントレーサーなどのようなコースで問題ありません。

ブラウザ上の notebook/road_following/data_collection.ipynb を選択して、開いたファイル内の手順に沿って順に Shift + Enter キーを押下して、実行していきます。

5 番目のセルを実行すると、MIPI カメラからの映像が下図のようにブラウザ上に表示されます。
この段階でラジコンカーをコース上に設置し、MIPI カメラが捉えた画像内でどの方向に進むべきかをマウスで指示します。
左側の画面内で進むべき地点をクリックすると、クリックした地点に緑色の円が表示された画像が右側の画面に表示されます。その画像が自動的に保存され、同時に画面下のカウンターが 1 つ増えます。

ラジコンカーをコース上で様々な位置や方向に移動させ、多様な画像データを収集します。また、ラジコンカーがコース左右両方にずれた場合のデータも記録します。この操作を繰り返して、150 枚程度の画像データを作成しましょう。

データ収集が完了したら、camera.stop のセルを実行してカメラを停止させます。

2: モデルのトレーニング 🚴

Jetson Nano でのトレーニングも可能ですが、処理にはかなりの時間がかかります。もし GPU を搭載した PC をお持ちであれば、そちらでトレーニングを実行することをお勧めします。

ブラウザ上の notebook/road_following/train_model.ipynb を開きます。
ファイル内の手順に沿って、順に Shift + Enter キーを押下して、操作を進めます。

ここではまず、データをトレーニング用データセットとテスト用データセットに分割し、トレーニング用データを使用してモデルのトレーニングを行います。

最後のセルを実行するとトレーニングの進捗も確認できます。このセルでは、ニューラルネットワークが出力した値と実際の正解ラベルとの差異(loss)が表示されます。
トレーニングの目的はこの loss 値を最小限に抑えることです。そのため、十分に小さな loss 値が得られるまで設定された回数(エポック)のトレーニングを続けます。


「教師データ」の量によって異なりますが、Jetson Nano では 30 分から 1 時間程度かかることがあります。GPU 搭載の PC であればその 1/10 程度の時間で完了します。

処理が完了すると、best_steering_model_xy.pth が完成します。GPU を搭載した PC で学習させた場合はこのデータを Jetson Nano にコピーします。

3: 自動運転の実行 🚜

ブラウザ上の notebook/road_following/live_demo.ipynb を開きます。
ファイル内の手順に沿って、順に Shift + Enter キーを押下して実行していきます。
8 番目のセルでスピードやステアリングのパラメータを調整できます。
自動運転がスムーズに行われない場合は、ここでこれらのパラメータを適切に調整してください。

手順に沿って実行を進めて 11 番目のセルを実行すると、JetBot が自動運転モードに入ります。この段階で Zao Cloud View を通じて JetBot の動作を確認することができます

終わりに

この記事では、JetBot を使って自動運転機能を実現する方法について説明しました。
Zao SDK と JetBot を連携させて、遠隔からの監視、操作の実現については「実践編2」の記事で説明します。

Discussion