
今回は現在製作しているロボットに今後、実装していきたい機能についてまとめてみたいと思います。ロボット製作を始めて1か月ほど経ちましたが、現在完成度は約50%程度というところまで来ました。
ハードウェアの組み立てやサーボモーターを駆動することによる姿勢制御など、低レイヤーの部分はほぼ構築でき、これから自律制御のための上位アプリケーション実装に取り組んでいきたいと思っています。
そこで、一度ここまでで実装した機能と、これから実装していきたい機能を整理してみたいと思い記事にしてみました。
\ Raspberry Piを使ったアプリ開発を学びたい人には自宅で学べるUdemyがおすすめ! /
講座単位で購入できます!
Raspberry Pi(ラズベリーパイ)とは
Raspberry Pi(ラズベリーパイ)はイギリスのラズベリーパイ財団が教育用に開発したボードコンピュータです。
最新のRaspberry Pi 4では、ARMアーキテクチャを採用したBroadcom製の高性能SoC BCM2711を搭載しており、1.5GHzで動作するARM Cortex-A72が4コアとマイコンボードの中では非常に高速な処理能力を持っています。また、ユーザーがアクセス可能な40ピンのGPIOも搭載しており、外部ハードウェアを制御することが可能です。
詳細なスペック等は以下の記事で解説していますので、あわせてご覧ください。

これまで実装した機能
このブログに何度も登場しているRaspberry Piベースのスパイダーロボット、PiCrawlerですが、これまで少しずつ必要な機能を実装してきました。機能ごとにまとめた記事を書いています。
ロボットPiCrawlerについて
SunFounderのスパイダーロボット、PiCrawlerのキット内容、組み立て、サンプルで動作させている様子を下記の記事にまとめてあります。

距離センサーによる障害物までの距離検出
超音波センサーHC-SR04を使って障害物までの距離を計測し、回避する動作をPythonでプログラミングしました。

TensorFlow Liteによる物体検出
ロボットに搭載されているRaspberry Piでディープラーニングを使った推論処理をリアルタイムに実行し、Raspberry Piのカメラモジュールに写った物体を識別することができました。

以上のように少しずつできることが増えてきました。
今後実装していきたい機能
そんなPiCrawlerですが、まだまだ自律制御で動かすまでにはたくさんの機能必要です。現在、実装を考えている機能は以下の通りです。
マルチコア並列処理
これまで個別にサーボモーターの制御や画像処理を進めてきましたが、今後これらを同時に実行する場合は、マルチスレッドで実装することになります。一般的なマイコンでは各スレッドに優先順位を設定し、その優先度に基づいて一つのコアでスレッドをスイッチしながら処理が実行されることが多いかと思います。
ですので、優先度の高いモーションコントロール(サーボモーター制御)中は画像処理や通信処理は、高優先スレッドの処理が終了するのを待たなければなりません。
逆に、もしモーションコントロール中に他のスレッドが割り込んで来ると、ロボットが転んでしまったりすることも考えられます。
このように、ロボットで一度に複数のことをしようと思うと、ハードウェアの制約を考慮した上で、プログラムを構築する必要があります。
しかしRaspberry Pi 3、4は非常に高性能で4コアのSoCが搭載されています。このマルチコアを使えば、モーションコントロールとディープラーニングを使った画像処理を別々のコアに割り当て、ハート的に並列実行できるため、大幅なパフォーマンス向上が狙えます。
参考になりそうな書籍として、Interfaceの2021年11月号にPythonの並列処理について特集がありました。

目標追従機能(フィードバック制御)
TensorFlow Liteを実装したことにより、カメラに写っている物体をディープラーニングを使って判別することができるようになりました。実際にその情報を制御系にフィードバックし、ロボットの動作をコントロールするという機能を追加していきたいと思います。
まだ構想段階ですが、例えば人間を判定したら、人間の写っている位置が常にカメラの中央に来るように、ロボットの方向を修正するというような制御をPID制御器を用いて実現できないかと考えています。
PID制御は、指令値と、センサーなどから取得した現在の状態との偏差とその積分、微分によって制御量を決定するというものです。詳細はwikiなどに詳しく解説がありますので、ご覧ください。
制御系のシステムをやっている方であれば、よく使われる手法だと思います。このようにフィードバック制御を用いることで、自動的に目標を追従するような動きをさせたいと思います。
SLAM 自己位置推定
ロボットの自立走行を実現するためには、走行ロボットがどこにいて、どの方向を向いているのかを知る必要があります。この自己位置推定と周辺マップデータを作成するのがSLAMです。ロボットと周辺物体との距離を計測するセンサーを使用して、ロボットが自ら地図を作り、そのデータを基に自分の位置を推定します。
SLAMを実装するにあたっては、まだまだ調査不足ですがセンサーやカメラ等、追加のハードウェアが必要になりそうな感じです。
SLAMに関しては私の手元にある書籍では、トランジスタ技術の2021年12月号に特集が載っていました。Raspberry Piを使った例ではありませんが、多少は参考になるかと思います。

書籍の入手先
まとめ
現時点での、今後ロボットに実装していきたい機能をまとめてみました。マルチコアとフィードバック制御は問題なくいけそうですが、SLAMはかなりハードルが高いかなと思います。
この辺りも、今後情報収集が進んだらまた記事にしたいと思います。
また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。

スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。

それでは、また次の記事でお会いしましょう。
\ Raspberry Piを使ったアプリ開発を学びたい人には自宅で学べるUdemyがおすすめ! /
講座単位で購入できます!