ROS2をラズパイへインストール

ロボット

何冊かRaspberry PIを利用したロボットの本を調べましたが、ほとんどがプログラムをループさせ、その中で各種イベント(走行の舵取り、センサーの検知)などを行わせています。
単純なロボットの場合、これでいいのですが、いくつもセンサーをもったり。アクチュエーターをいくつももつとプログラムがややこしくなることは目に見えています。

ROS2の意義

ROS2というロボットのプログラムを書く時に使うフレームワークがあります。
先人の知恵と共通のフレームワークを使うことはなにかと便利なことが多いものです。
ROSはすでにドローンを作る人に採用されている例があり、ROSについてわかりやすく書かれています。

ROSとドローンの関係について

何冊か本も買いましたが、こういう最初の存在意義について書いてあるものは少ないです。

ROS2の公式ドキュメントはこちら

全部英語で読破する必要はなく、ある程度重要なものは翻訳してくれている人がいます。

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カード用意したほうが簡単です。

長いし、記録を取るために数日かかったので、実行記録は別記事にします。