AbudoriLab.です。
本ブログの目次となります。
このページから興味ある記事に飛んでもらえるとうれしいです。
はじめに
ロボット製作にはソフトウェア・ハードウェア両方の知識とスキルが必要です。
ロボットといっても種類は様々で、身近なお掃除ロボットから工場で働く産業用のロボットまで幅広く存在します。
AbudoriLab.では費用がかからず手軽ながら基礎的なノウハウを習得できる屋内で動く三輪のロボットを製作しました。
技術としては基礎的ですが、ロボット製作が初めての方から高度なロボットを作り始める方でも楽しんでもらえると確信しています。
AbudoriLab.のブログで掲載する記事
ロボット製作に必要なソフトウェア・ハードウェア両方の記事を発信します。
ハードウェアの項目で紹介する内容は主に下記の通りです。
- 電子回路の設計や基板として入手する方法に関して
- ロボットの設計, 製造,組上げ方法に関して
ソフトウェアの項目で紹介する内容は主に下記の通りです。
- 設計したロボットをシミュレーション上で走らせる方法に関して
- ロボットを制御してコントローラーを用いて操作する方法に関して
- ロボットを動かて地図を作る方法に関して
- 地図を使って目的地までロボットを自律移動させる方法に関して
ハードウェア
ロボットの設計
AbudoriLab.ではロボット本体を設計するツールとしてFusion360を利用しています。
Fusion360の使い方や便利機能の紹介を三部構成で執筆しています。
入門編
簡単な形状をモデリングして本アプリの操作に慣れることを目指します。
- 前編 : Fusion360のインストールと環境設定方法の紹介
- 後編 : Fusion360でモデルを作るために必要な操作方法の紹介
「形状を描く」→「押し出す or くり抜く」→「面取りなどの細かい修正」を繰り返しながらFusion360の操作方法に慣れる教材を作成いたしました。
基本編
設計が終わると製作や組立工程が始まります。
設計したモデルの製作前に最低限必要な情報を基本編でまとめます。
- 前編: 設計モデルの製造やり直し回数を減らすためのパーツ干渉確認方法の紹介
設計が終わっていざ製作して組上げてみると、パーツ同士の干渉など設計ミスがちらほら見つかります。
その度にやり直してコストも時間も労力も浪費しなくて済むように、Fusion360には干渉チェックなどの便利な機能があります。
- 後編 : 外部発注や3Dプリンターの製作に必要な設計図作成方法の紹介
3Dプリンタや工作機械で製作するために必ず通る工程になります。
設計したモデルを図面に起こすことまでFusion360内で完結することができます。
設計したモデルは何度も改良したり、シミュレーターで活用することがあります。
知っておくと損しないFusion360の機能や使い方を紹介します。
- 前編 : 効率よくモデルの改良とバージョンを管理する方法の紹介
設計したモデルはアップデートを重ねてより良いものへと進化していくと思います。
Fusion360は作業履歴を遡ることやバージョン管理を可能とし効率良くアップデートさせることが出来ます。
電子回路設計
Lapinを制御するための基板を作成します。自律移動するコードを組んだとしても、最終的にはモータを回さないことにはロボットは進みません。そこで使用したい機能を実現する回路を設計します。Lapinで使用したい機能を実現する回路「Gekko」は別途公開するのでお楽しみに!
- 回路の設計
- KiCAD
- 基板の発注
ROSからArduino系のマイコンを制御し、ブラシ付きDCモータを任意の速度(rpm)でLinux上で制御できる基板を作成します。
ソフトウェア
シミュレーション
モデリングしたLapinをgazebo上でシミュレートします。機能の追加やアップグレードを実施したときに動作確認が必要にないます。その度に、lapinを動かすとなると検証回数に比例して煩わしさや時間がかかります。そこで実環境で実験する前に、簡易的なシミュレーション実験でエラーを見つけます。
- lapinのモデルをgazeboへインポート
- 自律移動をシミュレート
SLAMや自律移動の研究にシミュレータを役立てるため、自作のロボットモデルをgazeboに読み込む方法についてご紹介しています。
www.abudorilab.com自作のロボットモデルを使った自律移動のシミュレーション方法についてご紹介しています。
モータ制御
ロボットが走行するためには、モータを適切な速度で回せるように制御しなくてはなりません。カンタンな制御理論からモータを制御します。また、ROSでの自己位置推定で使用するオドメトリ の計算 と専用基板の"Gekko"との通信について説明いたします。
PIDを用いてDCモータを制御することができるようになりました。モータ制御とはなにをコントロールする?の観点で初心者だった筆者がまとめていてわかりやすい導入情報となっています。
マイコン(ESP32)を用いてDCモータ制御システムを構築しました。システムの概要とソースコードを公開したので解説記事になります。
地図作成
目的地までのルートを計算するに必要な地図を作成します。Lapinは地図ありで自律移動する設計となり地図が必要になります。SLAMについて概要をご紹介したROS2とLidarを使って地図を作成する方法をご紹介します。
- SLAMの概要説明
- lidarで地図作成
- 地図の保存
難しく数式などは使用せずに、SLAMの「自己位置の推定」と「地図の作成」について簡単な例を用いて紹介しています。
www.abudorilab.com自己位置と地図作成が相互依存する理由について紹介してます。
www.abudorilab.com SLAMの高精度化に重要なテクニックについて紹介してます。
www.abudorilab.comROS2やcartgrapherなどのオープンソフトウェアを利用して、シュミレータでロボットの自律移動を体験する方法をご紹介してます。
www.abudorilab.com実機のLidar(RPLidar)とcartographerを使用して、実際に地図を作成する方法をご紹介しています。
行動計画
行動計画法について紹介します。行動計画で目的地までの経路を計算し、それに沿ってLapinを移動させることができます。途中で予期せぬ障害物が現れた際は回避などの動作が必要となります。
- Navigation2の行動計画の概要説明
- global planningの説明
- local planningの説明
経路計画の最も基本的な手法である幅優先探索と深さ優先探索のアルゴリズムの概略を解説し、実際にプログラムを作成して両者の挙動を比較しました。
www.abudorilab.comダイクストラ法についてご紹介しています。経路計画の目的に応じて最良なルートを見つけることができる幅優先探索の上位互換となる手法です。
自己位置推定
Lapinに自身の現在地を認識させます。自己位置が認識できると"行動計画"で計算した経路に対して逸脱がないかを判断できたり、目的地に到着したかを認識できるようになります。SLAMの概要については地図作成の項目に上げるため、ここでは自己位置に特化した記事をご紹介します。
- Navigation2 mobe_baseの説明
- Navigaation2 amclの説明
その他
本筋とは少し逸れますが、ロボット製作中のお試しや遊びを通して得た情報もご紹介します。
性能を検証するため購入したJetson Nanoを例に開発にオススメする周辺部品一覧をまとめました。
OSをインストールして、早速ディープラーニングベースの物体認識手法YOLO v4でサンプル画像を試してみました。GPUあるなしでの演算速度など比較結果をまとめています。
ROS JPの勉強会(第45回 2022/2/20)でクローラの使用感について解説してきました。
Youtubeには残ると思うのですが、要点を短く、時間内に話せなかった内容まで解説しています。
深層学習手法を手軽に使えるTAO Toolkitの環境構築方法を解説する記事になります。
日本語の解説記事や文献が少ないためにやり方が分からず躓いている方も多いと思い、
実際に動かすことの出来た筆者が手順を追って紹介しています。
さいごに
まだリンクに貼れる記事はありませんが少しずつ記事を増やしていきます。書き手が書きたいことを優先にアップしていくため順番は順不同になることもあります。なるべく早く充実させていきます。書いてほしいことやコメントなどお待ちしてます。