search
LoginSignup
0

More than 1 year has passed since last update.

FreeBSD Advent Calendar 2020 Day 24

posted at

updated at

FreeBSD タンクの紹介

FreeBSDタンクとは

pitank.jpg

FreeBSDタンクとは、FreeBSD で動く RaspberryPi(Zero)で何が動くかのデモをひとまとめにしてキャタピラをつけて逆によくわからなくなってしまった感のある動くオブジェです。

FreeBSD WorkshopやFreeBSD勉強会の懇親会、AsiaBSDCan やOSCのNetBSDブースの片隅などで展示していたので、ちょこっと見たという人もいたと思います。

RaspberryPi を使ったすごい展示物が集まるRaspberryPiのユーザーイベント RaspberryJam などでも場違いにちょこっと展示し、目の肥えたちびっ子から「クソボロロボットじゃん」と言われるなど活動は多岐にわたります。

しかし「FreeBSD環境で何が動くか」の説明のためのデモなのに、何が動いてるのか今ひとつその場での説明が適当で、どっかにまとめて説明とかも書いてなかったので、この機会に紹介しておこうと思います。

基本動作

  • 走行(前後、左右、回転)
  • カメラ撮影
  • twitter投稿
  • Webでの操作

構成ハードウェア

以下のようなものを適当に寄せ集めました。

その場の思いつきで適当に増築しているので、全体にグラグラしています。

ソフトウェア

FreeBSDタンクのソフトウェア処理としては

  • Web操作(python Flaskサーバー)
  • 走行(GPIOによるモーター制御)
  • 旗振り(ソフトウェア PWM操作)
  • カメラ撮影(raspistill コマンド)
  • twitter投稿(pythonスクリプト)
  • 距離センサー(I2C接続)

Web操作

FreeBSDタンクの操作は基本的にサーバーが WebAPI を待ち受け、APIを受信したらコマンドを実行するという形で行うようになってます。
WebAPI受信サーバーは、この手の作例でよく使われている python の Flaskを使用しています(ports は www/py-flask)。
実際にFreeBSDタンクで使用してるスクリプトは以下に置いてあります。
https://github.com/s-mitu/RaspberryPi/tree/master/FreeBSD/picontrol


http://(FreeBSDタンクアドレス):5000/

にアクセスすると、走行操作用ボタンと、カメラ撮影画像、FreeBSD タンクのTwitter タイムライン(後述)などが表示されます。

console1.jpg

おわかりいただけただろうか...

走行

走行のためのモーター制御は、RaspberryPi Zero に接続した Explorer Hat Proで行っています。RaspberryPi側からは GPIO のON/OFFで制御しています。モーターは右履帯用と左履帯用の2つを制御しているので、前進/後進以外に左右回転や超信地旋回(その場での回転)なども行えます。

FreeBSDタンクでは、WebAPIでコマンド受信すると、GPIOの ON/OFF を行い走行や停止を実行します。

カメラ撮影

camera.jpg

32bit環境だと、上の手順でRaspberryPi公式のカメラモジュールV1での撮影ができます。ただカメラ V2 の撮影はうまく動きませんでした。またPi3/4などの 64bit でも上記の手順は使えません。

FreeBSDタンクでは周期的にカメラ撮影を行い、/tmp以下(tmpfs)に画像を保存していて、WebAPIで取得できるようになっています。
画像を取得し続ける簡単なスクリプトはこちら。 https://github.com/s-mitu/RaspberryPi/tree/master/FreeBSD/camera-loop

旗振り

サーボのソフトウェアPWM制御(ユーザーランドプログラムでGPIOのON/OFF繰り返し)で適当な旗振りを行います。本当に「動いてる」ってだけであまりちゃんとした角度での動きになっていません。ユーザーランドプログラムで無理やりやってるのとPiZeroの処理が遅いのと、ソフトの作りが適当のとで、サーボの傾きがバラバラです。
servo.jpg

一応Cプログラムです。
https://github.com/s-mitu/RaspberryPi/tree/master/FreeBSD/pwm

Twitter 投稿

起動直後やシャットダウン、また走行に関するWebAPI受信時にTwitterに投稿します。
起動直後には内部時刻とIPアドレスを投稿するので、sshで接続するのに便利です。また前進や回転などの走行コマンド受信時にもつぶやいてくれます。

以下のpythonスクリプトのtankannounce.pyで FreeBSDTankアカウント

スクリーンショット_2020-12-24_22-14-41.png

距離センサー

タンク背後に雑に設置したI2C接続の距離センサーで距離を取得します。

FreeBSDタンクではループで距離測定してテキストファイルに保存し、WebAPIでその値を取得できるようにしています。
ただI2Cに関してはカメラモジュールを使うと使えなくなるので、現在は機能していません。

distance.jpg

バトル

FreeBSD tank とネコの壮絶バトル動画です。

Youtube vscat.jpg

最後に

ボロっちくてもなんか動くものができるのは楽しいものです。もしまたどっかの勉強会やカンファレンスで見かけたら、生暖かい目で見守ってやってください。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0