Raspberry Pi ZeroでROS2をうごかす

次のステップに

マジョカアイリスのLCDRaspberry Pi Zeroから使うことができたので、次のステップはRaspberry Pi ZeroでROS2を動かすことにチャレンジ。

Raspberry Pi 3や4は、64bitのCPUを積んでいるので、aptでバイナリインストールができるのだけど、Raspberry Pi Zeroは旧式の32bit CPUのためその手が使えない。 普通は面倒なのとCPUのパフォーマンスの関係で、Raspberry Pi 4を使うのだけど、今回はなるべく手ごろな大きさ、お値段で実現したいこともあり、Raspberry Pi Zero上にROS2をソースからコンパイルして導入しようと思う。

ROS2からはMacWindowsマイコンとそのターゲットを広げていることもあり、Raspberry Pi Zeroでもいけるんじゃないかという期待もあり。

Raspberry Pi ZeroでのROS2構築

とはいえ、1から環境を構築するのは大変だと思って少し検索してみたところ、既にRaspberry Pi Zero向けのクロスコンパイル環境をdockerで構築してる人を発見。

github.com

これは、GCtronicというアメリカのメカトロ系の会社が開発してる、e-puck/e-puck2というローバーロボットの拡張キットでROS2対応する際の副産物の模様。

今回はこれを使わせてもらうことにした。

ロスコンパイルの大まかな手順

ロスコンパイルの大まかな手順は以下。

  1. Raspberry Pi Zeroに必要なパッケージを導入

  2. docker環境の構築  gitにdockerを構築するためのDockerfileとスクリプトがあるので、cloneして実行する。Macにインストール済のDockerがあったのでそれを使って構築。

  3. コンパイルに必要なRaspberry Pi ZeroのファイルをDocker上にもってくる  rsycとsshfsの2つの方法が書いてあるが、最初sshfsを試したところpermissionエラーでうまくいかなかったので、rsycを使用。

  4. ロスコンパイルの実行  cycloneDDSのコンパイル(というかリンク)でエラーになったので、いったんcycloneDDSを除外。fastddsは問題なくコンパイルできたので、まあいいか。  あと、Foxy向けにコンパイルすると実行時にエラーになったので、Dashingにすることで無事動作。Rasbperry Pi OS Liteはubuntuでいえば18.04なのでその関係か???

  5. コンパイルしたものをscpでRaspberry Pi Zeroにコピー

ちなみに、コンパイル時間は2013MIDのMacbook Airで2時間くらい。

この後、Jetson Nano上にインストールしているDashing環境でdemo_node_cppのtalkerを動作させて、Raspberry Pi Zero上でros2 topic listros2 topic echoで動作を確認。

いろいろはまることもあったので、詳細は後日Qiitaでまとめよう。

qiita.com

マジョカアイリス ハック その2

それからそれから

FFCケーブルアダプタが届いたので、ラズパイにつなぐべくQIコネクタのケーブルを22本接続。

f:id:azuzuzu:20210219203839p:plain
ケーブル接続

この時点で、FFCケーブルから各ピンの疎通をテスタで確認。

テスタは 熊五郎お兄さんのDIY - YouTube でおなじみの、熊五郎お兄さんご推薦のAstroAIのもの使ってます。

事故発生

ここで事故が発生。ケーブルを接続している時にあやまって、FFCケーブルの先端部分にハンダを落としてしましました。。。あわててハンダを吸い取ったのですが、、、

f:id:azuzuzu:20210219205412p:plain
剝がれてしまった・・・

端子部分がはがれてしまいました(ガックリ)。

ここであわててFFCケーブルを注文することに。aitendoでピッタリのものを注文できるのですが、結構お高い(500円くらい)です。

www.aitendo.com

ので、Amazonで探してみたところ、ちょっと長いですが150mmのものが20本で1000円であったのでそれを注文することに。

f:id:azuzuzu:20210219210952p:plain
サイズ比較

ラズパイ接続、その前に

さて、ラズパイに繋ごうとなると思いますが、もう1作業が必要でした。

まずは、どう接続するかを確認。

qiita.com

ここの接続をみたところ、

  • pin1, 3, 12, 21, 22をまとめてGNDに接続

  • pin13, 18, 19をまとめて3.3Vに接続

  • pin20(LEDの電源)に6V(緑基板は12v)で電流制限抵抗いれて20mAを供給

が必要だったので、ちょこっと基板を作成。

f:id:azuzuzu:20210219212444p:plain
電源用基板

抵抗は、50Ωの可変抵抗を入れておきました。

f:id:azuzuzu:20210219213342p:plain
配線完了

ドライバの設定と動作確認

Raspberry Pi Zero側のドライバは以下を使用させてもらいました。ありがたや。

github.com

Raspberry Pi Zeroで使ったイメージは、Raspberry Pi ImagerからRasbperry Pi OS Lite(32bit)を使いました。

f:id:azuzuzu:20210219215758p:plain
Raspberry Piのイメージ

使用したイメージのカーネルバージョン情報は以下。

$ uname -rv
5.4.83+ #1379 Mon Dec 14 13:06:05 GMT 2020

動作確認はfbtest使いました。

youtu.be

電源は安定化電源から6Vを入れてます。その時の安定化電源の表示は以下。

f:id:azuzuzu:20210219215118p:plain
安定化電源の表示

最後に

LEDに表示ができるところまでできたので、次はROSから使ってみようと思います。

マジョカアイリス ハック はじめます

マジョカアイリス ハック はじめます

今更ながら、マジョカアイリスハックをやってみようと思い、2台購入。

f:id:azuzuzu:20210207213612p:plain
マジョカアイリス

最初にマジョカアイリスがハックできることを知った時は、既にものが高騰し始めていたためスルーしたのだけど、今なら送料込みで1000円以下でAmazonで買えるようなので、思わずポチっとしてしました。

魔法×戦士 マジマジョピュアーズ! マジョカアイリス

魔法×戦士 マジマジョピュアーズ! マジョカアイリス

  • 発売日: 2018/10/27
  • メディア: おもちゃ&ホビー

ちなみに定価は1万円ほどするんですね。

www.takaratomy.co.jp

中の基板の名称から察するに、アメリカのおもちゃメーカであるCepia LLCが作成したWizard/Fairy-wandの部品を持ってきたのではないかとのこと。

やりたいこと

既に多くの方が、twitterやブログ、Githubなどでその成果をあげられています。

ESP32やSTM32、Raspberry piから使った報告があがっているので、これはROS2で使えるようにしたら、メッセージやステータス表示デバイスとして使えるんじゃないかと思い、ハックはじめました。ちなみに、最近でたところのRaspberry Pi Picoで動かしてる人も。

ROS/ROS2のサンプルでよくある、taker/listenerのlistnerとして動作し、送られてきた文字を列をディスプレイに表示して電光掲示場のように表示してあげるイメージです。ついでに状態や表示パラメータをサービスで取得・設定できるようにするとかして、実際に使えるものにできればと思っています。

まずは分解

外箱の刻印をみてロットを確認。

f:id:azuzuzu:20210207213957p:plain
ロット番号

スティックの筐体はできれば再利用できるように、きれいに分解できないかなと思いつつ作業をすすめましたが、結果としては超音波カッターで裁断する必要があったのは2か所のみで、他はねじを外せばよいだけでした。

f:id:azuzuzu:20210207214904p:plain
基板や液晶基板

f:id:azuzuzu:20210207214354p:plain
筐体

おもわず、

「きれいな側してるだろ。ウソみたいだろ。分解されてるんだぜ。それで。」

とか思っちゃいましたよ。

超音波カッターで裁断したのは、スティックの液晶基板が格納されている部分。二か所が半田ごてとかでプラスチックを溶かしてくっつけてる感じだったので、ここを超音波カッターでほじほじしました。

f:id:azuzuzu:20210207220105p:plain
裁断箇所

これで、液晶基板をカニの身のように、するっと取り出せました。

液晶基板との接続

液晶基板とはフレキシブルフラットケーブル (FFC) の22pinで接続することになるのですが、ここでまずは1山。

FFC 0.5mmピッチ22pinの変換基盤を探すとビンゴなのは、aitendoさんのになるかと思います。

www.aitendo.com

ただ、これ、コネクタと基板のハンダ付けをしないといけないのですが、うまくやらないとノイズがのる等でつまずく場合がある模様。

ここは安全にいきたいので、他のものがないかと調べたところ、

  1. ピン数の多い、秋月の40pin変換基盤をつかって一部のコネクタだけつかう方法
  2. 22pinのうち、21と22は使用されてないのでそこを削って20pinのものを使う方法

で対応されてる例をみつけました。最初は40pinの秋月のものを使おうと思いましたが、

akizukidenshi.com

ちょっと多すぎる感があったので、Amazonで調べたところ24pinのものがあったので、それを使ってみることにしました。

数が多い場合は、差す位置とショートに気を付けないといけないですね。

ということで、今日はここまで。

Raspberry pi + Ubuntu18.04でGPIO 2020年11月版

Raspberry piUbuntu Server 18.04入れて、WiringPiを使ってGPIOを操作しようとしたのだけど、少しはまったのでメモっておく。

基本は、以下のQiitaの記事を参考に作業。

qiita.com

Qiitaにあるように、パッチをあててビルドしないといけない模様。

ただ、現在、WireingPi-Pythonをcloneすると、wiringPiが2.60になっており、上記のパッチが2.50をターゲットにしているので、うまく当たらない。

github.com

ので、Qittaが書かれたあたりのcommitを取ってきて、wiringpi 2.50でパッチをあてたコードに入れ替えてビルドすることでうまく動作してくれました。

手順的には、

$ git clone https://github.com/WiringPi/WiringPi-Python
$ cd WiringPi-Python
$ git checkout 3315e8ec750ee8535b3f4ab31c7007b5863b7e97

で、wiringpi 2.50でパッチをあてたコードをWiringPi-PythonのWiringPi配下に丸ごとコピーして、

$ sudo python3 setup.py install

でビルド&インストール。ただし、ログとみたところ、site-packageのwiringPiのバージョン名は2.46としてインストールされてる。動いたのでいいかなぁ。

ギガビット USB Ethernetアダプタを購入

MAC Book AirにいれたUbuntuから有線で接続する必要が急に発生したので、手持ちのUSB Ethernetアダプタを探したところ見つからず・・・。

ということで急遽購入することに。Amazonでみたところ、最近はギガビットイーサネットGbE)対応のものもあるようで、見た目で以下のものを購入。

Amazonの商品説明欄にはLinux互換(!?)と書かれてたので問題なく動くでしょう。

本日到着。

f:id:azuzuzu:20201101212632p:plain
外観

f:id:azuzuzu:20201101212516p:plain
箱の裏側

Ubuntu 18.04のインストールされてるMac Book Airに差して、

$ lsusb
Bus 002 Device 005: ID 0bda:8153 Realtek Semiconductor Corp.

0bda:8153で検索してみると、

RTL8153 Gigabit Ethernet Adapter

linux-hardware.org

とのこと。

今のところ問題なく動いてます。

以上

NanoPi NEO2でROS2

はじめに

NanoPi NEO2でROS2が動くとのことなので、やってみる。

元ネタはこちら

qiita.com

NanoPi NEO2は、512MB版だが秋月で購入可能。

akizukidenshi.com

NAS用ケースとか

akizukidenshi.com

ヒートシンクもあります。

akizukidenshi.com

Linuxのインストール

dashingを使いたいので、Ubuntuの18.04、Bionicのイメージが必要。NanoPiはArmbianを採用しているもよう。

www.armbian.com

既に上記ページはFocal(Ubuntuだと20.04)になっているので、ページの最後にあるArchived Versionsのリンク先に移動。

f:id:azuzuzu:20201026010117p:plain
現時点(2020/10/26)時点のアーカイブ

"Armbian_20.02.1_Nanopineo2_bionic_current_5.4.20.7z"をダウンロードしてSDに書き込んで使用。

ROS2のインストール

これは普通に、ROS2の公式の手順でインストール。

index.ros.org

"ros-dashing-ros-base"まで問題なくインストール完了。

動作確認

元ネタのブログと同様、デモのtalker-listenerを使って動作を確認。

以上

Raspberry pi Zero WにWio Terminalを繋いでディスプレイ表示する

はじめに

Seeedから発売されている、Wio TerminalRaspberry pi(以下、ラズパイ)のディスプレイになるとのことで、今回試してみました。

f:id:azuzuzu:20201025232044p:plain
Wio TerminalとラズパイZero

ラズパイとWio TerminalはUSBで接続します。

Seeedの公式Wikiの以下の記事

Raspberry Pi用HMIディスプレイを作る - Seeedウィキ(日本語版)

に方法はかかれてますので、基本はここの内容に従って作業をすればよいです。

ただこのサイト、

  • ChromeでもFirefoxでも少し表示がおかしい
  • 自動翻訳をつかったのか一部日本語がおかしい

と見にくいのに注意。例えば、「sudoサービスlightdmの再起動」は「sudo service lightdm restart」というコマンドを翻訳してしまったと思われます。

Raspberry Pi Zero Wで動くか(手順的な面と性能的な面)がわからなかったので、実際にやってみました。

結論としては、それなりに動きました。

f:id:azuzuzu:20201025232226p:plain
Wio Terminalでのディスプレイ表示

見ての通り、解像度は320 x 240なのでやれることは限られてます。WiFiやBluetoohの切り替えとかにはつかるかもしれません。配置するウェジットを工夫すればちょっとしたことができかも?

f:id:azuzuzu:20201025232354p:plain
WiFi選択画面

設定でUSBの数だけWio Terminalを繋げるそうなので、Wikiではラズパイ(Zeroではない)の4つのUSBポートに4台つなげる例が書かれてます。が、あまり実用的には思えないですね。

本命は、WikiにもあるPyQtGraph等をつかって直接GUI表示する方法ですね。これは次に試してみようとおもっています。

さて、以降では、今回動作させるまでの手順+αをまとめます。Raspberry Pi Zero Wということで、セットアップ等は非常に時間がかかるので、VTuberの雑談配信やアニメをみながら作業するのがよいかと思います。(個人的嗜好)

今期アニメだと「戦翼のシグルドリーヴァ」が結構好き。

環境

以下に、今回使用した環境をまとめておきます。

項目 内容
H/W Raspberry pi Zero W
OS image Raspberry Pi OS (32-bit) with desktop and recommended software. Version: August 2020, 2020-08-20
SD容量 16GB
その他デバイス Wio terminal
USBケーブル Wio terminal付属のもの

大まかな手順

Wio Terminalの準備

Wio Terminalに、ディスプレイ表示用のファームウェアを書き込む必要があります。

ソースはgithubに公開されてるので、自分でもってきてArduino IDEで作成することができる一方、

github.com

Wikiからダウンロードできるuf2ファイルを使って、対応ファームを入れ替えることもできます。

Raspberry Pi用HMIディスプレイを作る - Seeedウィキ(日本語版)

PCにWio Terminalを繋いで、Wio Terminalのディスプレイに向かって左側面にある電源スイッチを、ONの位置から下に素早く2回引き下げます。すると、PC側にドライブとして認識されます。

そこにuf2ファイルをコピーすると、再起動してファイルを読み込んで起動します。mbedライクですね。

用意されてるuf2ファイルは2種類あって、Wio Terminalの画面右下にある青いスイッチでマウスを操作できるもの(USBDisplayAndMouseControl)と、マウスを使わないかわりリフレッシュレートが高いもの(NullFunctional)。今回はUSBDisplayAndMouseControlを使ってみました。

ラズパイ側の準備

まずはカーネルカーネルヘッダを更新。

$ sudo apt install raspberrypi-kernel-headers raspberrypi-kernel

その後、githubからドライバのソースを取得。作業はユーザのホームディレクトリ配下で行いました。

$ git clone https://github.com/Seeed-Studio/seeed-linux-usbdisp

その後、ビルドしてインストール、再起動。

$ cd ~/seeed-linux-usbdisp/drivers/linux-drive
$ make
$ sudo make install
$ sudo reboot

設定ファイルを、Xサーバの設定ディレクトリにコピー。

sudo cp ~/seeed-linux-usbdisp/drivers/linux-driver/xserver_conf/10-disp.conf /usr/share/X11/xorg.conf.d/

ウィンドウマネージャ(lightdm)を再起動。

$ sudo service lightdm restart

WikiではここでWio TerminalをUSBポートに接続とありますが、Raspberry pi Zだと繋いだとたん電力不足でリブートしていまいますので、ラズパイ起動時に接続しておくのが良いです。

以上になります。

その他メモ

HDMIへディスプレイ出力を戻したい

Wio terminalにディスプレイ表示を切り替えると、HDMIへには出力されなくなります。

HDMIに戻すには、

1) 設定ファイル名を変更して無効にし、

$ mv /usr/share/X11/xorg.conf.d/10-disp.conf /usr/share/X11/xorg.conf.d/10-disp.conf.disable

2) ディスプレイマネージャ(lightdm)を再起動します。

$ sudo service lightdm restart

切り替えに少し時間がかかります。