NanoPi-NEO2でROS2を動かしてみた
はじめに
初めてAdvent Calenderを書きます。
ROSを使ったことはあるけれど、そろそろROS2にも触れておきたいな...という気分になってきたので、ROS2に挑戦してみました。
NanoPi-NEO2とは
FriendlyElecが販売しているシングルボードコンピュータです。40mm x 40mmという非常にコンパクトな基板サイズながら、64bitクアッドコアのARM Cortex-A53のCPUを搭載しています。ただし、HDMIコネクタ、WiFi、Bluetoothは付いていません。
なぜHDMIもWiFiも付いていないボードをわざわざ使うのかというと、次のような理由からです。
- 64bitコアであること
ROS2は多様なプラットフォームで動作するらしいですが、Dashing Diademataので最もサポートの厚いプラットフォームはUbuntu Bionic(18.04)64bitのようです。NanoPi-NEO2は、ArmbianというARMボード向けのDebian、UbuntuベースのOSを使用することで、この環境を作ることができます。 - 技適の問題を回避できること
最近のシングルボードコンピュータはWiFiやBluetoothを搭載していることがよくありますが、国内で技適マークのない無線機器を使用すると電波法違反になる場合があります。その点、もともとWiFi非搭載なことはむしろ利点です。(11月20日から総務省に届け出をすることで、技適なしの無線機器でも使用することができるようになりました。詳細についてはこちら。) - コンパクトなこと
上にも書きましたが、40mm x 40mm(コネクタ含まず)という驚きの小ささです。これでいてUSB機器を接続できるので、ちょっと凝ったこともできるんじゃないでしょうか。 - 入手性が良いこと
秋月電子で購入できます。(ただし、秋月電子で取り扱われているものはRAM 512MBモデルです。1GBモデルはAliExpress等の海外通販サイトで販売されています。)
NanoPi-NEO2のセットアップ
メーカーのWikiが参考になります。ただし、今回使用するOSはUbuntuCoreではなくArmbianです。
用意するもの
- NanoPi-NEO2(1GBモデルがおすすめ)
- NanoPi-NEOシリーズ用ヒートシンク(かなり発熱するためほぼ必須)
- マイクロSDカード(Class10以上、8GB以上)
- USB ACアダプタ(2A以上)
- LANケーブル
SDカードの作成
- NanoPi-NEO2用のArmbian Bionicのイメージをダウンロードして解凍します。
- BalenaEtcher等のソフトでOSイメージをMicro SDカードに書き込みます。
アカウント作成
- NanoPi-NEO2をLANケーブルでご家庭のネットワークに接続します。
- USB ACアダプタに繋いで電源を入れます。起動すると基板上の緑色のランプが点滅します。
- NanoPi-NEO2のIPアドレスを検索します。Linux PCなら以下のようなコマンドでネットワーク上のIPアドレスの一覧を取得可能です。
$ nmap -sP 192.168.xxx.xxx/24
- IPアドレスが分かったら、sshでログインします。初回パスワードは1234になっています。
$ ssh [email protected]
- 自動でアカウント作成が始まります。現在のrootパスワード(1234)を入力して、新しいrootパスワード(適当に決めてください)を入力します。
- 次に、新しいアカウントのユーザ名とパスワードを入力します。
- その後、Full Nameなどの個人情報の入力を促されますが、空欄でも問題ないようです。
- アカウントができたら、ログアウトして新アカウントでログインし直します。
アップデート
- アップデートしておきましょう。
$ sudo apt update
$ sudo apt upgrade
ROS2のインストールと実行
用意するもの
- ROS2インストール済みのLinux PC
Dashing Diademataのインストール
- 通常のPCと同様に、公式の手順でインストールすることができます。
-
Installing ROS2 via Debian Packages に従ってインストールすればOKです。
- ただし、
$ sudo apt install ros-dashing-desktop
の実行には非常に時間がかかるので、ros-dashing-desktop
の代わりにros-dashing-ros-base
をインストールすることをお勧めします。
デモの実行
-
ros-dashing-ros-base
をインストールした場合、デモが入っていないので、以下のコマンドでインストールします。
$ sudo apt install ros-dashing-demo-nodes-cpp ros-dashing-demo-nodes-py
- インストールできたら、1つ目のターミナルからtalkerノードを起動します。
$ ros2 run demo_nodes_cpp talker
- 次に、2つ目のターミナルを立ち上げて新たにsshでログインし、listenerノードを起動します。
$ ros2 run demo_nodes_py listener
RealSenseのテスト
$ sudo apt install ros-dashing-desktop
の実行には非常に時間がかかるので、ros-dashing-desktop
の代わりにros-dashing-ros-base
をインストールすることをお勧めします。ros-dashing-ros-base
をインストールした場合、デモが入っていないので、以下のコマンドでインストールします。$ sudo apt install ros-dashing-demo-nodes-cpp ros-dashing-demo-nodes-py
$ ros2 run demo_nodes_cpp talker
$ ros2 run demo_nodes_py listener
せっかくなのでIntelの深度カメラ、RealSense D435iを動かしてみました。
ros2_intel_realsenseのインストール
- RealSense用のROS2パッケージ ros2_intel_realsense があるので手順に従ってインストールします。
- 必要なROS2パッケージのインストール
$ sudo apt-get install ros-dashing-cv-bridge ros-dashing-librealsense2 ros-dashing-message-filters ros-dashing-image-transport
- ROS2以外の必要なもののインストール
$ sudo apt-get install -y libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev
$ sudo apt-get install -y libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev
- 2019年11月時点ではバージョン2.0.4のバイナリが提供されており、aptでインストールすることができました。しかし、このバージョンではYAMLファイルからパラメータを指定することができないため、今回はソースからビルドすることにします。
- まずワークスペースを作って、
git
でros2_intel_realsenseのソースコードをクローンします。
$ mkdir -p ~/ros2_ws/src
$ cd ~/ros2_ws/src
$ git clone https://github.com/intel/ros2_intel_realsense.git
-
colcon build
でワークスペースをビルドします。デフォルトでは並列にビルドされるようになっていますが、今回は処理能力不足のためか途中でフリーズしてしまったので、--executor sequential
をつけて1個ずつビルドするようにしました。
$ cd ~/ros2_ws
$ source /opt/ros/dashing/setup.bash
$ colcon build --executor sequential
パラメータ
- パラメータを記述するYAMLファイルを作ります。
ファイル名は適当に
realsense_parameters.yaml
としておきます。 - NanoPi-NEO2の性能では、RealSenseの標準の解像度だとエラーになりやすいため、解像度を落として起動した方が安定します。
RealSenseCameraNode:
ros__parameters:
enable_pointcloud: false
enable_aligned_pointcloud: false
enable_depth: true
enable_aligned_depth: true
enable_infra1: false
enable_infra2: false
enable_fisheye: false
depth_width: 480
depth_height: 270
depth_fps: 6
color_width: 424
color_height: 240
color_fps: 6
RealSenseの起動
- 以下のようなコマンドでパラメータを渡しながらRealSenseノードを起動できます。
$ ros2 run realsense_ros2_camera realsense_ros2_camera __params:=realsense_parameters.yaml
その他
ネットワーク設定
-
IPアドレスの固定化
- 参考:Use NetworkManager to configure network settings
- ネットワークの設定にはNetwork Manager (nmcli) を使用します。
$ sudo nmcli connection show # Check Connection Name
$ sudo nmcli connection modify 'Wired connection 1' \
connection.autoconnect yes ipv4.method manual \
ipv4.address 192.168.xxx.xxx/24 ipv4.gateway 192.168.xxx.1 ipv4.dns 8.8.8.8
$ sudo reboot
WiFi USBアダプタを取り付けることで、WiFiを使用することもできます。WiFiの設定方法はここでは割愛します。
スワップ領域拡大
- メモリ容量が不足していると
colcon build
が通らなかったり(特に512MBモデルでは)しますが、スワップ領域を拡大することで解決することがあります。
- 参考:linux スワップ(swap)領域の作成
音声出力
- NanoPi-NEO2にイヤホンジャックはついていませんが、Audioピンが出ているためジャックDIP化キットなどで配線すれば音声を出力することができます。
- 以下のコマンドでArmbianの設定ツールを呼び出し、System -> Hardware -> analog-codecをチェックして音声出力を有効化します。
$ sudo armbian-config
- 次のコマンドでデバイス一覧を確認します。こんな感じになると思います。
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Codec [H3 Audio Codec], device 0: CDC PCM Codec-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
- 以下のコマンドで、接続したスピーカーやイヤホンから音がでれば成功です。
$ aplay /usr/share/sounds/alsa/Front_Center.wav
USBコネクタの追加
- デフォルトではUSBコネクタが1つしかついていないのですが、実はポート2つ分のピンが別に付いているので、USBコネクタDIP化キットなどに配線すれば複数のUSB機器を使用することができます。
おわりに
IPアドレスの固定化
- 参考:Use NetworkManager to configure network settings
- ネットワークの設定にはNetwork Manager (nmcli) を使用します。
$ sudo nmcli connection show # Check Connection Name
$ sudo nmcli connection modify 'Wired connection 1' \
connection.autoconnect yes ipv4.method manual \
ipv4.address 192.168.xxx.xxx/24 ipv4.gateway 192.168.xxx.1 ipv4.dns 8.8.8.8
$ sudo reboot
WiFi USBアダプタを取り付けることで、WiFiを使用することもできます。WiFiの設定方法はここでは割愛します。
colcon build
が通らなかったり(特に512MBモデルでは)しますが、スワップ領域を拡大することで解決することがあります。 $ sudo armbian-config
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Codec [H3 Audio Codec], device 0: CDC PCM Codec-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
$ aplay /usr/share/sounds/alsa/Front_Center.wav
そんなわけで、NanoPi-NEO2でROS2を動かすことができました。NanoPi-NEO2自体は2年ほど前のものですが、こういうボードでもROS2を動かせると分かったので、いろいろと夢が広がります。まだまだROS2について分からないところはたくさんありますが、今後も勉強していきたいと思います。
Author And Source
この問題について(NanoPi-NEO2でROS2を動かしてみた), 我々は、より多くの情報をここで見つけました https://qiita.com/Spritaro/items/e13e2ae475452039f843著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .