何冊かRaspberry PIを利用したロボットの本を調べましたが、ほとんどがプログラムをループさせ、その中で各種イベント(走行の舵取り、センサーの検知)などを行わせています。
単純なロボットの場合、これでいいのですが、いくつもセンサーをもったり。アクチュエーターをいくつももつとプログラムがややこしくなることは目に見えています。
ROS2の意義
ROS2というロボットのプログラムを書く時に使うフレームワークがあります。
先人の知恵と共通のフレームワークを使うことはなにかと便利なことが多いものです。
ROSはすでにドローンを作る人に採用されている例があり、ROSについてわかりやすく書かれています。
何冊か本も買いましたが、こういう最初の存在意義について書いてあるものは少ないです。
ROS2の公式ドキュメントはこちら
全部英語で読破する必要はなく、ある程度重要なものは翻訳してくれている人がいます。
これらを参考にしながらRaspberry Piにインストールして使ってみることにしました。
ここからは、導入しながらあっちこっち調べた備忘録です。
ROS2はLinuxのUbuntuディストリビューションで動作するらしく、Raspberry Piでよく使われるRaspianではだめみたいです。
まぁ、普通のUbuntuであるならば、知らないわけじゃないのでインストールします。
Raspberry Pi ImageerでSDカードを作る
Raspberry Piを使ったことがある人ならば、ご存知のSDカード作るツールです。
念のためSDカードフォーマッターでフォーマットしておいたほうがいいかもしれません。
Ubuntu Server 64bit版を選びます。
最初のログイン
ログインプロンプトが出ても、sshの設定が走っていますので、しばらく待ってください。
id:ubuntu パスワード:ubuntuですぐにパスワードを変更するように警告が出て変更します。
WIFI
Wifiを繋がねばなりません。
/etc/netplan/99-custom.yaml を編集。
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
eth0:
dhcp4: true
optional: true
version: 2
wifis:
wlan0:
dhcp4: true
optional: true
access-points:
”SSIDの名前”:
password: "パスワード"
(英語キーボード定義で日本語キーボードを使っている時、:は;のシフト、”は:のシフト)
設定したら
sudo netplan apply
wifi-status
で反映して、確認。
ログインしてコマンドプロンプトを出して、
sudo apt update
sudo apt upgrade
次にIPアドレスではなく、コンピューター名でアクセスしたいのでAvahiをインストールします。AvahiはMacで使われているBonjourも参照できるようです。
sudo apt install avahi-daemon
次にGUIがないとめんどくさいので
sudo apt install ubuntu-desktop
リブートします。
キーボードが英語配列なので日本語キーボードを登録します。
アプリからsettingを動かし、keyboard(もしくはRegion&Language)を選びます。
おそらくEnglishしかないはずです。+ を押し、さらに点3つのところを押すといろいろな配列が出てきます。私はJapanese(OSDG)を追加しました。
追加してデスクトップの右上のENをクリックするとJpも選べます。
ROS2の導入が目的なので日本語化はしません。
ThunderbirdやLibreofficeを削除
絶対に使わないシステムなので削除します
sudo apt remove --purge libreoffice*
sudo apt remove --purge thunderbird*
sudo apt clean
sudo apt autoremove
SSH
sudo systemctl status ssh
で調べたら、sshはすでに起動しています。(あれ、起動していないこともあるぞ)Ctrl+Cでコマンドは終わります。
そういう時は
sudo apt install openssh-server
インストールすると起動します。
なのでmacのターミナルから、
ssh ubuntu@ubuntu.local
と入力したら繋がります。
もし、
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
とかいって怒られたら、
ssh-keygen -R ubuntu.local
(ubuntu.localはネットワーク名)なんてやって古いキーを消します。
VNC
VNCでリモートデスクトップしたい方は有名なこのスクリプトを走らせると導入できます。
ROS2インストール前
Installing ROS 2 via Ubuntu Packagesを参照しながら作業します。
が、さっぱりうまくインストールできません。
日本語のブログをお書きになられている方々は問題なくインストールできているようなんですが、私はさっぱり。
このサイトに書いてあるとおりにすると、インストールできました。コマンドラインが長いのでsshターミナルを使ってコピペしたほうが確実だと思います。
ros2 doctor
で All 4 checks passed と表示されるまでたどり着きました。
このサイトの方は親切にもRaspberry PI4用のSDカードイメージまで作ってくれていますが、ゴリゴリにカスタマイズされているので、便利と思うか、ややこしいと思うかは人それぞれかと思います。
本などにはDockerを使って環境構築している例もあるのですが、ただでさえ小さいRaspberry Pi上にDockerなんてオーバーヘッドを乗せるのは嫌です。環境ごとにSDカード用意したほうが簡単です。
長いし、記録を取るために数日かかったので、実行記録は別記事にします。