cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

ROS用の小型PCが欲しいので、Intel NUC11PAKi5にUbuntuとROSを入れてみる

無駄に各種センサーを買い集めるのが趣味なので、ベロダインやらLavoxやらHokuyoやらの未使用のLidarが部屋に転がっていて、もったいないお化けが出そうな状態が続いています。
この問題を解決するために、せめて移動ロボットに搭載可能な小型PCを組んで、ROSでこれらのセンサーをすぐに動かせるようにしておきたいと思います。
結論としては、この記事では、Intel NUC11PAKi5でUbuntu20.10とROS Noeticが上手く動いたよー、ということを紹介します。

f:id:cvl-robot:20210428182131j:plain
Intel NUC11PAKi5でUbuntu 20.10とROS Noeticが何とか動いたの図

Intel NUC11を購入

世の中の流れを考えれば、Ryzen 4650Gあたりを積んだベアボーンキットを買ってくるのが、きっと正解なのですが、運悪くAKIBAWatchのこの提灯記事を読んで適当にぽちってしまいました。
akiba-pc.watch.impress.co.jp

Intel NUC11PAKi5

ark.intel.com
買ってから気が付いたのですが、本当に欲しかったのは、「NUC11TNKi5」でした。
Intel NUCは、Intelの製品紹介のページに写真は無いし、似た名前の製品が多すぎるのよなー。
note.com
現在の半導体危機につき、買ってしまったものは仕方ないので、「NUC11PAKi5」を使っていくことにします。

IntelAMDどっちを買うべきか?

計算性能の差は気にしなくても大丈夫そうですが、GPUや消費電力を見れば、AMDRyzenを選択するべきです。
www.4gamer.net

メモリとM2SSDを購入

SODIMM DDR4-3200 32GByte×2
Amazon | Crucial 32GBシングルDDR4 3200 MT/s CL22 SODIMMメモリモデルCT32G4SFD832A | Crucial(クルーシャル) | メモリ 通販
NVMe M2 2280 Gen4 1TB
Amazon | CFD販売 SSD 1TB 内蔵 M.2-2280(MVMe) 接続 PCIe Gen4x4 CFD PG3VNDシリーズ CSSD-M2B1TPG3VND | CFD販売 | 内蔵SSD 通販
とりあえず多けりゃ良いだろ精神で、対応規格のもので、入手可能なメモリ類を手配しました。

f:id:cvl-robot:20210427180720j:plain
間違えて買ったPAKi5に、メモリを一杯積んで過剰投資を行うの図

Ubuntuをインストール

Ubuntuに入れるROSのバージョンは、Ubuntuのバージョンに強く拘束されていて、基本的にLTSパッケージにしかapt-getで入れられるような便利なインストール方法は対応していません。
そこで、希望のROSバージョンに合わせてUbuntuを入れていくという試行錯誤をしました。

Ubuntu 18.04LTS

まず、本当に使いたいのはROS Melodicなので、対応しているUbuntu18.04LTSをインストールしました。
結果は、Ubuntu本体のインストールは可能ですが、Intel Iris Xe GPUに対応したドライバがどうしても見つけられませんでした。
仕方ないので、ここからapt-get dist-upgradeしようとしたら、クラッシュしてOSがつぶれました。

f:id:cvl-robot:20210427182450j:plain
Ubuntu自体は入ってくれるが、なにやらエラーを一杯吐いているっぽいの図

Ubuntu 20.04LTS

Melodicが良いのは、参考にしたい論文が使っていたから、とかその程度の理由なので、新しいバージョンのROS noeticでも動いてくれれば問題ありません。
そこで、Ubuntu20.04LTSをインストールしてみましたが、18.04LTSと同様に、インストールは可能だが、グラフィックチップのドライバが見つからない、という問題が出ました。
そもそもインストール画面から解像度が合っていないので、画面が見切れてしまい、インストール作業にも難儀します。多少もがいてみましたが、解決方法が見つからないので諦めました。

Ubuntu 20.10

長期サポート版のLTSではないものの、リリースからそれなりに時間が経っていて、安定して動くことが期待できるだろう20.10を次にインストールしてみました。
すると、インストール画面から正しい解像度で動いてくれて、すんなりUbuntuのインストールは完了します。
有線ネットワークも無線WiFiも問題なく動いてくれます。
画面が表示されて、ネットワークにさえつながってくれれば、こっちの勝ちのはずなので喜んでいたら、新しい問題が見つかりました。ROS Noeticが入らないのです。

ROS Noeticをインストール

昔のバージョンのROSだと、ちょっとリポジトリの登録をごにょごにょするだけで、LTSじゃなくても簡単にインストールできた記憶が有ったので、今回もそのつもりでいたのですが、どうにもこうにもお手軽な方法では入ってくれそうもありません。
失敗報告を書いている人もいますね。
qiita.com

ただ、幸いなことにROSはオープンソースなので、自分でコンパイルすることができます。ひたすら面倒くさいですが、動くはずです。ということで、やってみました。結論から言うと、入るし動きます。
まず、参考にするべきページはこちらです。
wiki.ros.org
指示に従って、

$ sudo apt update
$ sudo apt remove rosdep rospkg rosinstall vcstools
$ sudo apt autoremove

$ sudo apt-get install python3-rosdep python3-rosinstall-generator python3-vcstool build-essential
$ sudo rosdep init
$ rosdep update
$ mkdir ~/ros_catkin_ws
$ cd ~/ros_catkin_ws

ここまでは、すんなりいくかと思います。(ただ、自分は途中で失敗して試行錯誤して、消したり入れなおしたりしているので、本当にすんなりいくかの自信はないです・・・)
つぎに、マニュアルではdesktopパッケージを入れるように指示していますが、これだとpclやらgazeboやらが入ってくれません。そこで、desktopパッケージの代わりにdesktop_fullパッケージを入れるように書き換えます。

$ rosinstall_generator desktop_full --rosdistro noetic --deps --tar > noetic-desktop_full.rosinstall
$ mkdir ./src
$ vcs import --input noetic-desktop_full.rosinstall ./src

次に、依存関係のあるライブラリをインストールするのですが、ubuntuのバージョンをfocal(20.04LTS)に偽装するために、--os=ubuntu:focalを付けます。

$ rosdep install --from-paths ./src --ignore-packages-from-source --rosdistro noetic --os=ubuntu:focal -y

ここで、上手く入ってくれれば良いのですが、先に入っているライブラリやらなんやらで上手く動かないことが有るようです。少なくとも、最初に試した時はダメでした。
そんな時は、apt removeでros関係のライブラリを片っ端からアンインストールして、最初から再インストールすると上手く行くようです、知らんけど。
historyをとってあるので、あとで時間が有ったら整理して確認します。

適当に入れたライブラリ群。多分、間違いや無駄が多いです。あくまで、参考まで。

409 sudo apt install gazebo
412 sudo apt reinstall python3-rospkg
417 sudo apt reinstall python3-ros
419 sudo apt reinstall python3-catkin-pkg
422 sudo apt reinstall python3-pkg-resources
425 sudo apt install libgazebo-dev
436 sudo apt reinstall libgazebo11
439 sudo apt reinstall python3-catkin
441 sudo apt reinstall python3-rospkg
447 sudo apt install libdart-all-dev
450 sudo apt install libdart-external-odelcpsolver-dev

ROSをビルドします。ros_catkin_ws/install_isolatedがROSのインストール先になります。

$ ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release

次のコマンドを実行するか、~/.bashrcの一番最後の行に追加しておきます。

$ source ~/ros_catkin_ws/install_isolated/setup.bash

rosdepで見かけ上、依存ライブラリのインストールが上手く行っていても実際に進めてみると、いくつか引っかかるライブラリが出てくるかもしれません。
ただ、そのほとんどは、sudo apt install [library-name]-devをその都度してやれば、そのうち先に進めます。

普通のcatkin_wsを作って、velodyneのドライバーをインストール

471 mkdir catkin_ws
473 cd catkin_ws/
487 mkdir src
489 cd src
490 git clone https://github.com/ros-drivers/velodyne
491 ls
492 cd ..
493 catkin_make
494 sudo apt search pcap
495 sudo apt install libpcap-dev
496 catkin_make

次のコマンドを実行するか、~/.bashrcの一番最後の行に追加しておきます。

source ~/catkin_ws/devel/setup.bash

今日の本題

本格クロカン4駆ラジコンのロッククローラが欲しい。
アキシャルSCX10IIIが最強とのことなのですが、コロナのせいでラジコンが人気過ぎて在庫が見つかりません。

駆動モータはESC内蔵のこれがよさそう。1200KVと1800KVでどのくらい実質的にトルクが違うのか、気になるところ。
amzn.to

サーボモータはピンキリだけど、DCブラシレスにこだわってみよう。
Amazon | Savox Sb-2270sg High Voltage Brushless Digital Servo (.12s/13130ml-in) Sb2270sg | ラジコン・ドローン 通販


(続く)