Raspberry pi4を用いたルンバのROS（ros-melodic）制御について

# 目的

この記事は，ラズパイ４にROSとルンバのライブラリを導入して，ルンバを制御することを目的とする．
このような記事は，色んな先人達によって，構築され続け良質なコンテンツがたくさん存在する状況となっている．
しかしながら，それらのサイトたちは，複数ページからなるもの（リンク飛んだりする）が一般的であり，単体のページで
実現できるものは少ないと思う．ということで，自分の備忘録とコピペ等の簡略化のため順番に書いていくこととする．
基本的に，コマンドをつらつら書いていく流れとする．
参考文献等はたくさんありますが，とりあえず完成を急ぐので，後で書きます．

# ubuntuのインストール
まずは，[SDカードフォッマッター](https://www.sdcard.org/ja/downloads-2/formatter-2/)でクリーンにします．

次は，[ubuntu18.04.5](http://cdimage.ubuntu.com/ubuntu/releases/18.04.5/release/)を書き込みます．

使うソフトウェアは[Raspberry Pi Imager](https://www.raspberrypi.com/software/)です．

電源をつないで起動する．
# ubuntuの準備各種設定
```
login: ubuntu
pass: ubuntu
```
そうすると，

パスワードの変更を求められるので，
みんながわかるパスワードに変更する．

WIFIの設定
```
sudo vim /etc/netplan/50-cloud-init.yaml

network:
    ethernets:
        eth0:
            dhcp4: true
            optional: true
    wifis:
        wlan0:
            access-points:
                「ここにSSID名を書く」:
                    password:「ここにパスワードを書く」
            dhcp4: false
            addresses: [192.168.11.89/24]
            gateway4: 192.168.11.1
            nameservers:
                addresses: [8.8.8.8, 192.168.11.1]
    version: 2
```

設定項目を反映する．
```
sudo netplan apply

ip addr

sudo reboot

sudo apt update

sudo apt upgrade
```
GUI上で動くようにする．
```
sudo apt install ubuntu-desktop
```
# ROSのインストール
リポジトリが有効かどうか確認する．
```
grep ^deb /etc/apt/sources.list
```
手始めにやるやつ．ROSのインストール
```
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 install curl 
curl -sSL 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add -
```
アップデート
```
sudo apt update
```
ロスのメロディックをインストール
```
sudo apt install ros-melodic-desktop-full
```
その後初期設定を行う．
```
sudo apt install python-rosdep
sudo rosdep init
rosdep update
```
次に，環境設定
```
cd
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
```
次に，以下のツールをインストールする．
```
sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
```
# create_autonomyのインストール
ライブラリはros-melodicのみしか対応していない．
さらに，新しいライブラリだと，エラーをはくので，
過去のバージョンのものをインストールしないといけません．

```
sudo apt update
sudo apt upgrade
sudo apt install -y python-rosdep python-catkin-tools libqt4-dev
```
ワークスペースの作成とビルドについて
```
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin build
```

ライブラリのダウンロード
```
cd ~/catkin_ws/src

git clone https://github.com/RoboticaUtnFrba/libcreate.git

cd ~/catkin_ws/src/libcreate

git checkout 2.1.0

cd ~/catkin_ws/src

git clone https://github.com/RoboticaUtnFrba/create_autonomy.git

cd ~/catkin_ws/src/create_autonomy

git checkout a522e080f267253fa2cba237ad32df5132c9aeb5

cd ~/catkin_ws

./src/create_autonomy/sensors/ca_imu/scripts/install_rtimulib.sh

cd ~/catkin_ws

sudo apt install -y python3-vcstool

vcs import src < src/create_autonomy/dependencies.repos

rosdep update

rosdep install --from-paths src -yi
```
注意事項
~/catkin_ws/src/viso2/libviso2/CMakeLists.txtと~/catkin_ws/src/viso2/viso2_ros/CMakeLists.txtを
以下内容に変更する．
```
変更前： SET(CMAKE_CXX_FLAGS -mfpu=neon)
変更後： SET(CMAKE_CXX_FLAGS -march=armv8-a+simd)
```

~/catkin_ws/src/viso2/libviso2/src/filter.hとmatcher.hに#if defined(__ARM_NEON__)があります．
その１行上に，以下の処理を書く．
```
#define  __ARM_NEON__
```
ソースコードのビルド,以下のビルドコマンドでjを大きい数字にすると，インストールが早くなりますが，
ラズパイがメモリオーバーする可能性があるので，そこそこの値で抑える．
```
cd ~/catkin_ws

catkin build -j1 -DCMAKE_BUILD_TYPE=Release -DARM_CROSS_COMPILATION=ON
```

ファイルの編集
```
gedit  ~/.bashrc
```
bashrcの中身の追加事項
```
export GAZEBO_IP=127.0.0.1
export LASER=rplidar
export NUM_ROBOTS=1
export RVIZ=true

source /opt/ros/melodic/setup.bash
source ~/catkin_ws/devel/setup.bash
```

次のコマンドで設定を反映させる．
```
source ~/.bashrc
```

ターミナルを２つ開いて，１つ目で以下を実行．
```
roslaunch ca_gazebo create_empty_world.launch
```
２つ目で以下を実行する．これで，シミュレーション上でルンバがキーボードで動くはず．
```
roslaunch ca_tools keyboard_teleop.launch
```
次は，実機で動かします．ラズパイのUSBポートに通信ケーブルを接続する．そして以下を実行する．
次に，ベンダーID（0403?）とプロダクトID(6001?)をチェックしておく．
```
lsusb
```

次のファイルを作成して，
```
mkdir -p /etc/udev/rules.d/

cd /etc/udev/rules.d/

touch 77-roomba.rules
```
以下の内容を保存します．ここで，ベンダーIDとプロダクトIDにさっきチェックしたものを書きます．
```
KERNEL=="ttyUSB*", ATTRS{idVendor}=="ベンダーID", ATTRS{idProduct}=="プロダクトID", GROUP="dialout", MODE="0666"
```

USBの設定
```
sudo usermod -a -G dialout $USER
source ~/catkin_ws/src/create_autonomy/ca_bringup/scripts/udev/create_rules.sh
```

一回電源を落とします．
```
sudo reboot
```

ルンバに通信ケーブルを接続してから，ルンバの電源を入れる．そして，以下のコマンドを入れる．
```
sudo apt install ros-melodic-teleop-twist-keyboard
sudo apt install ros-melodic-teleop-twist-joy
```

次にターミナルを２つ立ち上げて，
１つ目に以下のプログラムを実行する．
```
roslaunch ca_driver create_2.launch
```
２つ目のターミナルで以下を実行
```
rosrun teleop_twist_keyboard teleop_twist_keyboard.py cmd_vel:=/create1/cmd_vel
```