Jetson Nano Mouseを動かしてみよう

Jetson Nano Mouseのカメラを使ってライントレースをしてみよう

Jetson Nano Mouseを動かしてみよう

d-satoです。Jetson Nano Mouseを動かしてみようの連載の第4回です。前回はJetson Nano MouseをスマホVRのインターフェース経由で操作する方法を紹介しました。今回はJetson Nano Mouseのカメラを使ってライントレースをする方法を紹介します。

この連載については第1回の「Jetson Nano Mouseのセットアップ方法」の記事にて紹介していますのでそちらをご覧ください。

紹介するサンプルについて

今回紹介するサンプルはJetson Nano Mouseのカメラ映像を取得しながらライントレース用に画像処理をしながらロボットを自律移動させるものです。

カメラ映像の配信およびJetson Nano Mouseの自律移動にはROSパッケージを使用します。

※詳しくは本記事後半で説明します。

Jetson Nano Mouseはアールティの車輪型プラットフォームロボットのひとつです。すでに販売しているRaspberry Pi Mouseと足回り(モータやタイヤなどの走行に関わる駆動部およびそのフレーム)は共通部品で、ソフトウェアインターフェースに関しても概ね同じになるように設計されています。
そのため、Raspberry Pi Mouseのソフトウェアに関してもほぼそのままJetson Nano Mouseで活用することができます。Raspberry Pi Mouseを使っていて「ラズパイをJetsonに置き換えられたらなあ」と思ったときはJetson Nano Mouseを入手するとソフトウェアに大きく手を加えずにJetson Nano Mouseに移行できます。

このサンプルの実行に必要なもの

このサンプルの実行には以下のものと十分な実験スペースが必要です。

  1. セットアップ済みJetson Nano Mouse
  2. Jetson Nano Mouse用電源(バッテリでも電源変換ケーブルつきACアダプタでも可)
  3. 操作用ノートパソコン
  4. サンプルコース

Jetson Nanoは第1回の記事でセットアップしたOSに第2回前半の記事で紹介した方法でROSがインストールされた環境で動かすことを想定しています。
また今回紹介する例では別売のUSB接続の無線LANアダプタ(TP-Link社のTL-WN725N)を取り付けています。

使用するコースの準備

コースには白地に黒のラインであればどのような形状のものでも問題ありませんが、ループ形状のものをおすすめします。

サンプルのコース用のPDFデータを以下のページに公開しているので、「とりあえずやってみたい」という方はぜひご利用ください。
(フチ無し印刷が可能なプリンタ以外で印刷するとコースの線が途切れますが、多少途切れるぐらいであれば問題ありません。)


https://github.com/rt-net/jnmouse_ros_examples/wiki

走行させる床が黒に近い色の場合はラインのない白い部分を多めに取るようにすることをおすすめします。

使用するROSパッケージのインストール

次は使用するROSパッケージのインストールをします。

まずはGitHubから必要なGitリポジトリをダウンロードしてきます。

cd ~/catkin_ws/src
git clone https://github.com/rt-net/jnmouse_ros_examples.git
git clone https://github.com/rt-net/jetson_nano_csi_cam_ros.git
git clone https://github.com/rt-net/gscam.git

次に依存関係にあるソフトウェアをインストールします。

rosdep install -r -y -i --from-paths .

raspimouse_ros_2パッケージも必要ですのでまだインストールしていない場合は第2回前半の記事を参照してください。

Raspberry Pi MouseのROSサンプルをJetson Nano Mouseで使う方法
「Jetson Nano Mouseを動かしてみよう」の連載の第2回目です。今回はJetson Nano MouseをROS/ROS 2のインターフェース経由で操作する方法を紹介します。

ここまで必要なソフトウェアは全てダウンロードできているはずなので、catkin-toolsを使って~/catkin_ws/src以下のROSパッケージをビルドします。

cd ~/catkin_ws
catkin build
catkin source

以上でROSパッケージのインストールは完了です。

ROSサンプルの実行

ライントレース用ノードを起動

Jetson Nano上でライントレース用のノードを起動します。

端末を起動してSSHでJetson Nano Mouseにログインしておきます。
(先程までインストール作業をしていた端末でそのまま作業してもOKです)

ログイン後、以下のコマンドを実行してROSの設定を読み込んでおきます。

cd ~/catkin_ws
catkin source

次にロボットを自律移動させるためのプログラムを起動するのですが、
起動したらすぐに走り始めてしまうため、ここで本体のモータのスイッチをオフにします。

モータのスイッチがオフになっていることを確認した後に、先程ROSの設定を読み込んでおいた端末にて

roslaunch jnmouse_ros_examples line_following.launch

と実行します。

ライントレース用コースにロボットを設置

line_following.launchがエラーなく起動できることを確認したらコース上にロボットを設置します。

カメラの撮影範囲内にコースが入るとその座標が端末上に出力されます。

ここで問題なく座標が出力されていてエラー等その他のメッセージが表示されていないことを確認してください。以下のようなメッセージが出ている場合は取得した映像からコースをうまく検出できていません。

ここでrqtを使って配信されている画像を確認することもできます。

PCでrqtを起動してJetson Nano Mouseと通信する際はPCとJetson Nano間で通信ができるようにROS_MASTER_URIの設定が必要です。詳しくは第2回前半の記事を参照してください。

ライントレース開始

コース上およびコースの周辺に障害物がないことを確認したらモータのスイッチをオンにして走行を開始します。

ラインを見失った際はコースから外れる場合がありますのでいつでもモータのスイッチをオフにできるようにロボットから目を離さないようにしてください。またバッテリを使わずにACアダプタから電源を供給する際には巻き込みに注意してください。

使用するROSサンプルの説明

今回使用するサンプルについて少し説明します。
大きく分けてロボット本体を制御用のノードと自律移動させるための指令を出す用ノードに分けることができます。

line_follower.launchを読むと全体の構成が見えてくると思いますので、このlaunchファイルについて少し紹介します。

<?xml version="1.0"?>
<launch>
  <!-- robot control nodes -->
  <arg name="initial_motor_power" default="off" />
  <node pkg="raspimouse_ros_2" name="motors" type="motors" required="true"
    output="screen" args="$(arg initial_motor_power)" />
  <node pkg="raspimouse_ros_2" name="buzzer" type="buzzer.py" required="true" />
  <node pkg="raspimouse_ros_2" name="leds" type="leds" required="true" />
  <node pkg="raspimouse_ros_2" name="buttons" type="buttons" required="true" />

  <!-- camera node -->
  <include file="$(find jetson_nano_csi_cam)/launch/jetson_csi_cam.launch" />

  <!-- line following node -->
  <node pkg="jnmouse_ros_examples" name="line_following" type="line_following.py" required="true" output="screen" />
</launch>

以下の部分でモータ等ロボットの各インターフェイスを起動しています。
ロボット本体のブザーやボタン等は使用しませんが、自律移動させるためのプログラムを改造すれば「ボタンを押したらスタート」など変更を加えられます(詳しくは後述します)。
カメラに関してはjetson_csi_cam.launchを読み込むようにしています。

  <!-- robot control nodes -->
  <arg name="initial_motor_power" default="off" />
  <node pkg="raspimouse_ros_2" name="motors" type="motors" required="true"
    output="screen" args="$(arg initial_motor_power)" />
  <node pkg="raspimouse_ros_2" name="buzzer" type="buzzer.py" required="true" />
  <node pkg="raspimouse_ros_2" name="leds" type="leds" required="true" />
  <node pkg="raspimouse_ros_2" name="buttons" type="buttons" required="true" />

  <!-- camera node -->
  <include file="$(find jetson_nano_csi_cam)/launch/jetson_csi_cam.launch" />

以下の部分で自律移動させるためのノードを起動しています。
このノードが画像受信し、その画像を処理してラインを検出し、移動指令を出しています。
ここで起動しているline_following.pyを改造すれば、「ボタンを押したらスタート」「ラインを見失ったら止まってブザーを鳴らす」などを実現することもできます。
直進・左右の旋回以外の複雑な動作をしないのでこれで問題ありませんが、広角カメラの映像に少し歪みがあり、環境によってはラインを検出しにくい場合もあります。

  <!-- line following node -->
  <node pkg="jnmouse_ros_examples" name="line_following" type="line_following.py" required="true" output="screen" />

まとめ

Jetson Nano Mouseに搭載されたカメラを使ってライントレースをする例を紹介しました。
今回の例では楕円状のコースを走行し、スタートとストップはモータのスイッチを使って切り替えました。
ライントレースのためのプログラムを改造すれば「ボタンを押したらスタート」「ラインを見失ったら止まってブザーを鳴らす」なども実現ができます。
広角カメラの映像に少し歪みがあり、環境によってはラインを検出しにくい場合もあります。ライントレースをするぐらいであれば問題はありませんが、
複雑な画像処理をする際にはカメラから配信される映像の歪みを補正しておいたほうがよさそうです。

次回は歪み補正をしながらライントレースする方法を紹介する予定です。

ぜひご購入をご検討ください!

Jetson Nano Mouse [RT-JetsonNanoMouse] - ¥77,000.- : アールティロボットショップ, ロボットキット、部品は専門スタッフがいるアールティへ!
アールティロボットショップ Jetson Nano Mouse - ◆お知らせ◆ こちらの製品は受注生産となります。 2台以上ご希望の場合はご相談ください。 また、Jetson Nanoの市場在庫が僅少となっておりますので、Jetson N...
タイトルとURLをコピーしました