ROS用の小型PCが欲しいので、Intel NUC11PAKi5にUbuntuとROSを入れてみる
無駄に各種センサーを買い集めるのが趣味なので、ベロダインやらLavoxやらHokuyoやらの未使用のLidarが部屋に転がっていて、もったいないお化けが出そうな状態が続いています。
この問題を解決するために、せめて移動ロボットに搭載可能な小型PCを組んで、ROSでこれらのセンサーをすぐに動かせるようにしておきたいと思います。
結論としては、この記事では、Intel NUC11PAKi5でUbuntu20.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」を使っていくことにします。
メモリと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 通販
とりあえず多けりゃ良いだろ精神で、対応規格のもので、入手可能なメモリ類を手配しました。
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がつぶれました。
Ubuntu 20.04LTS
Melodicが良いのは、参考にしたい論文が使っていたから、とかその程度の理由なので、新しいバージョンのROS noeticでも動いてくれれば問題ありません。
そこで、Ubuntu20.04LTSをインストールしてみましたが、18.04LTSと同様に、インストールは可能だが、グラフィックチップのドライバが見つからない、という問題が出ました。
そもそもインストール画面から解像度が合っていないので、画面が見切れてしまい、インストール作業にも難儀します。多少もがいてみましたが、解決方法が見つからないので諦めました。
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 | ラジコン・ドローン 通販
(続く)