ラズパイでロボット制御!

この記事は

学ロボ Advent Calendar 2023 の10日目
金沢工業大学 Advent Calendar 2023 の10日目
です.また,今日は私の誕生日です.(わーい)

双方,参考になる記事ばかりで,
金沢工業大学の方では昨日,国際ロボット展に一緒に行った同期の記事が上がっていました.

上記とは見劣りすると思いますが,少しですので読んでいただければ幸いです.

環境

項目
ラズパイ 4B 4GB
ROS ROS 2 humble
開発環境 Ubuntu22

ROS

とかのパソコン環境を使いたいけど,GPIOも使いたいってことが普通にあると思います.ロボコンではマイコンで読んだ値をパソコンに送ったりして使うのですが,小規模なものでは面倒です.mROSやjetsonを使えばよいのかもしれませんが,簡単にグラフィカルな環境を安価に手に入れるためにラズパイは最適です.起動メディアを持ち歩けば,ハードウェアを変えずに自前の環境で開発できます.

USBブート

2020年12月以降のブートローダが入っているラズパイは最初からUSBブートが出来るらしいですが,私のはそうでなかったので,
TFカードにRaspberryPi OSを入れてraspi-configからUSBブートを真にしときました.一応ブートローダも更新しときました.
起動後は諸所のセットアップ.詳しくはこちらに書かれてます.

モータを回す準備

差動二輪のロボットを研究用に作りたかったので,少なくとも二つのモータを回す必要があります.
といってもMDを一から作るなどの技量はないし,しっかりとした既製品を買うお金もないので,M3508C620を使いました. CANが使いたいので,こんな感じのハット基板を作りました.

ハット基板

コントローラはmcp2515で,spiから変換しています.ドライバはlinuxに書かれています.mcp251x.c

ロボットに組み込む

ロボットはこんな感じのものを作りました.ラズパイの右に載ってるのは電源基板です.

ロボット

モータの目標値を計画する必要があります.差動二輪の並進・角速度は以下の方程式で計算できるので,

運動学モデル
駆動輪の角速度に解いてやればよいです.
逆運動学モデル
こいつを位置のPIコントローラで追従させます.

動作

https://youtube.com/shorts/hrbsJN5baHw?feature=share
最初の動作としては上出来でしょう.(トレッド長すぎだろ…)
ジョイコンで操作しています.

IMU

をi2cから読んでみました.値がたまに飛んでますが,プルアップ抵抗の値変更とシールドケーブルにしたら直りました.
https://youtube.com/shorts/g2Cg93idGa0?feature=share

そこから

ハード・ソフト共にブラッシュアップし,このようになりました.(手動操縦ではありませんが)
https://youtube.com/shorts/xhwst5pH3FI?feature=share

まとめ

以上のように簡単なロボット制御ならラズパイだけで出来ます.
このハット基板以上にもPWM(4チャンネルくらい)使えたりします. また,EthernetコントローラがあるのでEtherCATスレーブと通信したり,USBで外付けROMを繋げたりも勿論できるので,結構,有用性は高いと思います. stm32とかでメイン基板を作っても値が張る場合が多いので経済的にも良さそうです.
デプロイ環境はubuntuでは重いので,RaspberryPi OS+ROSが良いと思います.
ロボット制御したいけどハードウェア頑張りたくないって人は良いかもしれません.