Raspberry Pi Catと書籍「Raspberry Piで学ぶ ROSロボット入門」でROS入門

こんにちは、satoです。

Raspberry Pi Catは2018年12月4日の記事で紹介したとおり、Raspberry Pi Mouseをスケールアップした二輪(+補助輪)の車輪型ロボットです。一部のパラメータを変更するだけでRaspberry Pi Mouse用に開発したソフトウェアをRaspberry Pi Catの制御に流用することもできます。
今回はRaspberry Pi MouseのパッケージをRaspberry Pi Cat用に書き換える際にどのような変更を加えればよいのかを説明していきます。具体的には、書籍「Raspberry Piで学ぶ ROSロボット入門」を読みながら、Raspberry Pi Catを制御するパッケージを作成する際、どのパラメータを変更すればよいのかを解説していきます。

Raspberry Pi CatとMouseの違い

変更方法を理解するにはRaspberry Pi CatとMouseの違いを理解する必要があるので、まず、Raspberry Pi CatとMouseの違いについて説明します。
基本的なデバイスファイルの操作は同じなのですが、移動速度計算に必要なホイール径とトレッドがRaspberry Pi MouseとRaspberry Pi Catでは異なるため、モータへの指令値も異なります。モータ指令値を計算するにあたり、いくつか数式が出てきて、難しいように感じる方もいるかと思いますが、「指令値が違うんだな」ということさえわかっていただければ問題ありません。

両機体の簡易的な図面は以下の通りです。

ホイール径とトレッドはそれぞれ以下の通りです。

  • Raspberry Pi Mouse
    • ホイール径: 48[mm]
    • トレッド: 93.5[mm]
  • Raspberry Pi Cat
    • ホイール径: 152.4[mm]
    • トレッド: 279.18[mm]

これらのパラメータを用いてロボットの動きを大まかに算出します。書籍内では計算がしやすい近似値を用いてコードが記述されています。Raspberry Pi Catも同様に以下のように計算が比較的簡単な値に近似します。

  • Raspberry Pi Mouse (「Raspberry Piで学ぶ ROSロボット入門」のP.279参照)
    • ホイール径: 45[mm]
    • トレッド: 90[mm]
  • Raspberry Pi Cat
    • ホイール径: 152[mm]
    • トレッド: 279[mm]

このパラメータを用い、ロボットに与えられる速度指令と角速度指令から左右のモータを制御する指令値を、書籍と同様に計算してみます。Raspberry Pi CatもRaspberry Pi Mouseも400[ppr]でモータを回転させることができます。
左右のモータへの制御信号を[Hz]で入力したときに、ロボットが直進するスピードを[m/s]とします。Raspberry Pi Catでは、

と表すことができます。
次に、右のモータへの制御信号を[Hz]、左のモータへ[Hz]としたとき、ロボットが旋回するときの角速度を[rad/s]とします。Raspberry Pi Catでは、

と表すことができます。
厳密にはRaspberry Pi CatはRaspberry Pi Mouseとは異なり、補助輪がついています。そのため、旋回時の走り出しが補助輪の向きに左右されます。今回は大まかに算出できれば十分なので、補助輪から受ける影響は無視できるものとして扱います。

それぞれの式を整理すると次の2つの式にまとめることができます。


これらのパラメータを用いて、各種の指令値を計算します。この記事では、ここの計算結果を「モータ指令値計算のためのパラメータ」と呼ぶことにします。

書籍「Raspberry Piで学ぶ ROSロボット入門」用コード

変更箇所

変更箇所は2種類あります。1つ目がパッケージ名、2つ目がモータ指令値計算のためのパラメータです。
それぞれの変更箇所について説明します。なお、それぞれの変更箇所はGitHub上で確認できます。

パッケージ名

変更箇所: https://github.com/rt-net/raspicat_basic/commit/d8c5eaf3093f17874bfd1934055cd66e3f11943d

書籍を読みながらコードを書くと、pimouse_rosという名称のROSパッケージを作成し、Raspberry Pi Mouseを制御します。今回紹介する方法ではパッケージをraspicat_basicという名称で作成し、Raspberry Pi Catを制御できるようにします。
例えば、第6章ではパッケージを作成しますが、その際に、書籍では
catkin_create_pkg pimouse_ros std_msgs rospy
と入力してパッケージを作成します。それを今回は
catkin_create_pkg raspicat_basic std_msgs rospy
と実行してRaspberry Pi Catのパッケージを作成します。

なお、書籍の第5章から始まる「ROSツアー」では、raspimouse_rosパッケージを用いてROSの仕組みに触れています。この5章で扱う内容に限り、raspimouse_rosパッケージを用いて操作を行っても問題ありません。非常停止スイッチが押されていない限り、デフォルトでモータのトルクがオンになるようになっているので、「モータのオンオフに合わせて車輪にブレーキがかかったり自由な 状態になったり」する様子は確認できませんが、そのほかのコマンドについてはRaspberry Pi Mouseと概ね同じように確認できます。そのほかセンサやブザーについては商品に同梱されているダウンロードカードからダウンロードできるマニュアルに記載されていますので併せてご確認ください。

モータ指令値計算のためのパラメータ

変更箇所: https://github.com/rt-net/raspicat_basic/commit/aba93778b75032ed4466de39b67f967845c43456

Raspberry Pi CatとMouseの違いで説明したようにモータ指令値を計算し、実際にデバイスファイルに書き込む値を決定するようコードを書き換えます。
さらに、同じ速度で走るとしてもモータ指令値はRaspberry Pi Mouseとは異なるので、テストコードの実行結果も異なります。
pimouse_rosパッケージはTravisCI上で計算内容のテストまで行っているので、そのテストのためのコードについても書き換える必要があります。テストコードの中身については書籍にて詳しく解説されていますので、書籍をご覧ください。

まとめ

Raspberry Pi CatとMouseの違いと書籍「Raspberry Piで学ぶ ROSロボット入門」用コードを例にRaspberry Pi MouseのパッケージをRaspberry Pi Cat用に書き換える方法を紹介しました。

Raspberry Pi Catは受注生産品で好評販売中です。Raspberry Pi MouseでROSを勉強したあと、ロボットを様々な場所で動かしてみたくなったときに簡単に移行できる候補としてぜひお買い求めください!

Raspberry Pi Cat