Episode 15 ROSで差動駆動ロボットを作ってみた(その1)

ブログ
Vol.1

皆さんこんにちは、グレキチです。
今年も桜が咲く季節になりました。日中散歩するたびに、どこかしこで桜が咲いているのを見ると、何だか嬉しくなります😊
早咲きで有名な河津桜ですが、何と、新しく引っ越して来たこちらの地域にある、湖沿いにも植えられていたらしく、3月初旬にランニングでその湖を訪れた際に、早めに桜鑑賞が出来て、かなり得した気分になりました。

さて今回は、以前投稿したROSに関して、公式チュートリアルであらかた使い方が理解出来たので、いよいよ実践として、ROS(正確にはROS2)を使った初めてのロボット製作にチャレンジしたので、その紹介です。

製作したのは差動駆動ロボットで、昨年の11月から始めて、約4ヶ月間を費やしてようやく完成しました。
なお、今回のロボットの元ネタは、海外エンジニア(Josh Newans氏)がYoutubeに挙げている動画(下記添付リンク参照)に倣って取り組んだものです。

  元ネタへのリンク: Articulated Robotics (Youtubeリンク)

言いたいことが山々なので今後数回に分けて投稿しますが、初回となる今回は、差動駆動ロボットの概要、私の開発環境や使用した部品等について紹介します。

差動駆動ロボット概要

ベース構造

今回のロボットは、差動装置の原理を使って駆動輪を制御して動作する機構を持った、地面を走行できる車両型ロボットです。
差動装置とは、2つの部品間の動きの差を検出して、動力を振り分ける装置のことで、自動車などによく使われている技術(いわゆるデフが代表的)ですね。
自動車では通常一つの車軸(前輪軸もしくは後輪軸)に対して、差動機構で左右の車輪の動力を振り分けますが、今回のロボットでは、左右の車輪に各々モーターを設けて、左右輪を独立して制御できるような構造になってます。その方が、部品点数が少なくてロボットの動きを制御しやすいからだと思います。(その場で旋回できたり・・・)
駆動輪はこの機構ですが、このままだと車体が倒れてうまく動けないので、左右の駆動輪を各々三角形の頂点に見立てて考えると、3点目に当たる部分(今回は前側の中央一点に設定)にボールキャスターを設けています。
シャシーのベース構造は、簡単な3Dモデルにすると下図のような感じです。
(緑:ベースボディ、黒:ボールキャスター、青:駆動輪)

コントロール方法

<コントロール構成>
 リアルタイム制御のために、ros2_controlというフレームワークを使っています。メインプログラムとモーター制御プログラムを分けて取り扱うので、メインコントロールとモーターコントローラーも各々別部品を設定しています。メインコントロールユニット(以後MCU)にはRaspberry Pi 4B 、モーターコントローラーにはArduino互換品を採用しました。MCUでは、モーターコントローラーとの連携の他に、車載カメラ、Lidar(レーザー光による測量デバイス)を制御します。また、MCUと各ハードウェアの通信はUSB接続としています。詳しい部品構成については、別セクションで後述します。

<PCとの通信方式>
 開発時は有線LANで、実際にロボットを単体で動かす際は無線LANとしました。無線LAN用に、一般的にトラベルルーター(最近ではホテルルーターとも)と呼称されているWiFiルーターを調達しました。選定の条件としては、専用ネットワークが設定できること、常時USBで給電できること、小型軽量であることです。アンダーラインの条件が最も重要で、同一ネットワーク上に接続されていないとPCとロボットが通信できず、また、他の通信との棲み分けをする意味でも、それをより簡単に構築するのに、専用ネットワーク設定があると非常に便利だからです。

<ロボット操作>
 PS5のコントローラーが簡単に接続できたので、開発途中では多用してました。(※USB接続可能な、他のPSおよびXboxのものもでも可能と思われる)しかし、参考動画の後半で、ロボットに搭載したカメラ映像を見ながら操縦するという、何とも心踊る取り組みがあったので、それを実行するために、モニターを搭載できるコントローラー(ipega製)も調達しました。もちろん安物ですが。

以上がロボットの概要でした。
それでは次に、開発環境についてです。

開発環境

開発環境は、開発用PCおよびロボット搭載PCともに下記設定としました。

  開発OS: Ubuntu 24.04 LTS (Noble Numbat) ※arm64版
  ROS2 ver.: Jazzy Jalisco
  Gazebo ver. : Harmonic

※arm64版でのGazeboの設定方法について知りたい方は、以前投稿した下記ブログを参考にしてみて下さい。

元ネタの動画では、開発OSはUbuntu 20.04(Focal Fossa)、ROS2 versionはFoxy Fitzroyとなっているので、動画内容に完全に沿って進めるのであれば、同じにした方が良いです。
しかし、作者が動画作成した時点から既に数年経っていて、OSサポート期限なども加味すると、私が着手した時点でROS2 Foxyを使うのは得策ではないと判断したので、ROS2 Jazzyを使える環境を構築した次第です。しかし、そのせいで色々と障害が発生して、かなり大変でしたが😅

その発生した障害とどうやって解決したのかを、今後の投稿で主に扱うことにします。だって、皆さん、そこが一番知りたい所でしょ!?

はい、ということで次に進みます。次は、構成部品についてです。

ロボット構成部品

ロボットの主要構成部品は、下記一覧表の通りです。

主要部品の他に、各種配線ケーブル、ジョイント部品やバッテリー充電器なんかも必要です。なお、“コントロール方法”のところで説明した通り、ジョイスティックコントローラーは有ったら便利で面白くなりますが、無くても操縦できるros_teleopっていうプログラムがROSには用意されています。(何て親切なんだ!)

また、各々部品の価格は掲載していませんが、製作に掛かった総費用は、ざっくり計算するとトータルで約5万円でした。殆どが海外生産品を使っているため、注文する時期によっては為替の影響をかなり受けると思いますが、日本製部品を多く使っていたら、もっと費用はかさんでいたことでしょう。(トランプ関税は、関係ないか?😆)

まとめ

という事で、今回はロボット製作に関しての導入的な内容を紹介しました。製作期間の4ヶ月は、ほぼOSとROS2の互換性不具合を解決する取り組みに時間を使ったと思います。この間、OS初期化からのやり直しを3回ほどやりました😭
でもその分、 Linux、ROSや電子部品に関する知識も増えたので、非常に良い経験が出来たと自負してます。

そうして、やっと完成したものは下の写真の通りです。動く弁当箱といった感じですね。
(ガムテープは、ご愛嬌ということで🤣)

また、動かすとこんな感じです。

次回以降は、より具体的な製作内容に踏み込んだものを投稿予定です。

それでは、また次回をお楽しみに!!