Raspberry Pi 3B+(Raspbian buster)にROS kinetic をインストールしてturtlesimを動かすまで辿り着けませんでした

# 目的
Raspberry Pi 3B+（Raspbian buster）にROS kinetic をインストールしてturtlesimを動すまで辿り着けませんでした。備忘録です。

>※ Raspbian busterにROS kinetic をインストールするために必要なboostライブラリのインストールに失敗して挫折しました。
※ 代わりに、Raspbian stretchでROS kinetic インストールしましたがturtlesimパッケージ取得方法が分からず挫折しました。
※ 代わりに、[Raspberry Pi 3B+(Ubuntu Mate 16.04LTS)にROS kinetic をインストールしてturtlesimを動かす](https://qiita.com/seigot/items/ce88174c1123400fc2a4)と正常に動きそちらを使うことにしました。


# 準備

▪️RaspberryPi 3B+を用意します。
[Raspberry Pi 3 Model B+ スターターセット](https://www.amazon.co.jp/dp/B07R7M7N3P/ref=cm_sw_r_tw_dp_U_x_IPSkDb168Y4VE)

▪️Raspberry Pi 3B+(Raspbian buster)を準備します

> [Raspberry Pi 3 Model B+の初回セットアップ（購入から起動まで）](https://qiita.com/Higemal/items/c817b96c3806f23b35f6)
> [raspbian/images 日本ミラーサイト](http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/)

公式サイトだとダウンロードに時間が掛かるためミラーサイトからデータ取得します。

▪️Raspberry Pi 3B+(Raspbian buster)にROS kinetic をインストールします。 

> [Installing ROS Kinetic on the Raspberry Pi](http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Kinetic%20on%20the%20Raspberry%20Pi)
> [Raspberry Pi 3 にROS kinetic をインストールしてみました。](https://qiita.com/dyson8910/items/3aadcc13601fa6e501e1)

公式サイトのRaspbian busterを利用する場合はROS wiki記載の通り boost 1.58 ライブラリをインストールする必要があります。
> [Boostライブラリのビルド方法] (https://boostjp.github.io/howtobuild.html)
> [Installing ROS Kinetic on the Raspberry Pi](http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Kinetic%20on%20the%20Raspberry%20Pi)
> On Raspbian Buster the compilation may fail with "'boost/tr1/unordered_set.hpp' file not found". This is because rospack version used in Kinetic is dependent on boost 1.58. To fix this error try installing boost 1.58 manually.

しかしながら、RaspberryPi3B++busterだと、./b2 install の実行後インストール完了せず諦めました。（詳細は後述※１）

--
そもそもRaspbian busterはRaspiberryPi4用のimageかもしれないと思い、
Raspbian stretchで同手順を実施しました。

するとstretch + ROS kineticインストール完了しましたが、
その後のturtlesimパッケージインストールできませんでした。（詳細は後述※２）

sourcelist更新すれば良いかもしれませんが方法が分からず挫折しました。

> 
[turtlesim](http://wiki.ros.org/turtlesim)
> To install and start the turtlesim:
> sudo apt-get install ros-$(rosversion -d)-turtlesim

```
$ sudo apt-get install ros-kinetic-turtlesim
Reading Package Lists... Done
Building Dependency Tree... Done
E: Couldn't find package ros-kinetic-turtlesim
```

# テスト

確認用としてROSの基本パッケージの１つであるturtlesimを動かすまで辿り着けませんでした。

```
roscore起動
$ roscore
turtlesim_node起動
$ rosrun turtlesim turtlesim_node
turtle_teleop_key node起動
$ rosrun turtlesim turtle_teleop_key
```

他サイトを探しても同様のROS kinetic環境でturtlesimを動かしている記事が見つからず、[Raspberry Pi 3B+(Ubuntu Mate 16.04LTS)にROS kinetic をインストールしてturtlesimを動かす](https://qiita.com/seigot/items/ce88174c1123400fc2a4)ことで環境構築を進めることにしました。

# 参考
[Raspberry Pi 3 Model B+の初回セットアップ（購入から起動まで）](https://qiita.com/Higemal/items/c817b96c3806f23b35f6)
[raspbian/images 日本ミラーサイト](http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/)
[MacでRaspberryPi入門](https://qiita.com/shippokun/items/9070fc58f69d8c063e44)
[Installing ROS Kinetic on the Raspberry Pi](http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Kinetic%20on%20the%20Raspberry%20Pi)
[Raspberry Pi 3 にROS kinetic をインストールしてみました。](https://qiita.com/dyson8910/items/3aadcc13601fa6e501e1)
[ROS KineticをRaspberry Pi 3にインストールしてセンサノードに仕立てる](https://qiita.com/atotto/items/9cf58a847de062f9ab2a)
[Installing ROS Kinetic on the Raspberry Pi](http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Kinetic%20on%20the%20Raspberry%20Pi)
[Boostライブラリのビルド方法](https://boostjp.github.io/howtobuild.html)
[Boost Downloads](https://www.boost.org/users/download/#live)
[fatal error: 'boost/tr1/unordered_set.hpp' file not found](https://github.com/ros/catkin/issues/893)
[Get Boost 1.58](https://www.boost.org/doc/libs/1_58_0/more/getting_started/unix-variants.html#get-boost)
[turtlesim Package Summary](http://wiki.ros.org/turtlesim)
[ROS Kinetic on Raspbian Stretch for Raspberry PI 3](http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Kinetic%20on%20the%20Raspberry%20Pi)
[Raspberry Pi 3B+(Ubuntu Mate 16.04LTS)にROS kinetic をインストールしてturtlesimを動かす](https://qiita.com/seigot/items/ce88174c1123400fc2a4)

# ※１RaspberryPi3B++busterだと、./b2 install の実行後インストール完了せず諦めました。

BoostライブラリインストールしないとROSインストール時に下記エラーが出ます。

```
$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic
ros_catkin_ws/src/rospack/include/rospack/rospack.h:108:10: fatal error: boost/tr1/unordered_set.hpp: そのようなファイルやディレクトリはありません
 #include <boost/tr1/unordered_set.hpp>
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

```

下記の通りboostライブラリをインストールする必要があります。
インストール手順を記載します

> [Installing ROS Kinetic on the Raspberry Pi](http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Kinetic%20on%20the%20Raspberry%20Pi)
> On Raspbian Buster the compilation may fail with "'boost/tr1/unordered_set.hpp' file not found". This is because rospack version used in Kinetic is dependent on boost 1.58. To fix this error try installing boost 1.58 manually.

```
$ wget http://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.tar.bz2
$ tar --bzip2 -xf boost_1_58_0.tar.bz2
$ cd boost_1_58_0
$ ./bootstrap.sh --prefix=$HOME/boost_1_58_0

> Select your configuration options and invoke ./bootstrap.sh again without the --help option. Unless you have write permission in your system's /usr/local/ directory, you'll probably want to at least use
> $ ./bootstrap.sh --prefix=path/to/installation/prefix
$ ./b2 install
```

```
$ (download boost_1_70_0.tar.gz)
$ tar zxvf boost_1_70_0.tar.gz
$ cd boost_1_70_0
$ ./bootstrap.sh
$ ./b2 install -j2 --prefix=$HOME/boost_1_70_0
> ./b2 install -j2 --prefix=(インストールしたいディレクトリ)
> /usr以下を使用すると環境を壊すことになりかねないので、通常は$HOME/localや$HOME/boost_1_51_0といったディレクトリを用意するのが良いでしょう。
```

./b2 install が完了せず挫折しました。（メモリスワップ領域枯渇？）

# ※2 その後のturtlesimパッケージインストールできませんでした。

Raspbian stretchにROSを下記の通りインストールする。

[How to Install ROS Kinetic on Raspberry Pi 3 running Raspbian Stretch Lite](https://www.intorobotics.com/how-to-install-ros-kinetic-on-raspberry-pi-3-running-raspbian-stretch-lite/)

```rb:ros-kinetic-install-on-rasp-stretch.sh
sudo apt-get install dirmngr
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential cmake --fix-missing --allow-unauthenticated

sudo rosdep init
rosdep update

mkdir -p ~/ros_catkin_ws
cd ~/ros_catkin_ws

rosinstall_generator ros_comm --rosdistro kinetic --deps --wet-only --tar > kinetic-ros_comm-wet.rosinstall
wstool init src kinetic-ros_comm-wet.rosinstall

cd ~/ros_catkin_ws
rosdep install -y --from-paths src --ignore-src --rosdistro kinetic -r --os=debian:stretch

sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic -j 1

cd ~/
source /opt/ros/kinetic/setup.bash
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
```

catkin_make_isolatedが固まる場合は、-j 1を指定して並列ビルドを抑制すると良い。

```
$ sudo apt-get install ros-$(rosversion -d)-turtlesim
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
E: パッケージ ros-kinetic-turtlesim が見つかりません
$ rosinstall_generator desktop --rosdistro kinetic --deps --wet-only --exclude collada_parser collada_urdf --tar > kinetic-desktop-wet.rosinstall
```

sourcelistを更新すれば良いかもしれないが更新方法が分からず挫折