ROS環境構築 <Part 3> LIMO(研究・教育用UGV)のセットアップ

## はじめに
LIMO(研究・教育用UGV)をセットアップした際の忘備録です．
このページではホストPC(Windows)とLIMOで通信を行い，ホストPCのキーボードから遠隔操作するまでをまとめます．
(2022年9月購入)
![LIMO_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962692/cfc2d80b-b55c-1d81-33b1-5c5fab1cd7f4.jpeg)


## 環境
##### ホストPC (Panasonic Let's Note CF-FV)
・OS: Windows11 Pro (64bit)
・VirtualBox: 6.1.38 (Ubuntu18.04.3, GUI環境)
・ROS: melodic
※こちらの環境構築については別記事
https://qiita.com/pez/items/741b43eb4765894edc94
と同様になります

##### LIMO (Jetson Nano) 
（デフォルトで下記の状態でした）
・Jetsonのバージョン: 32.6.1
・OS: Ubuntu18.04.6, GUI環境(中国語)
・ROS: melodic

## バックアップをとっておく
LIMOは Jetson Nanoで動いていますがそのイメージファイルのバックアップをとっておいた方がよいと思い実施．下写真の位置のネジ（計4つ）を外し，microSDを外す．ちょっと大変．
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962692/5204d719-81d8-b19b-57d5-0334d676698c.png)

microSDのコピーには色々方法があると思いますがこのときは AOMEI Backupper 無料版を利用．詳細は省略．

https://forest.watch.impress.co.jp/library/software/aomeibackup/

バックアップできたら元に戻す．


## 起動
ハードウェア的なところはマニュアルや公式サイトなどに比較的詳しく出ています

https://global.agilex.ai/products/limo

![LIMO2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962692/9b9ebf53-aa0c-d083-ced1-6e525c780c80.png)

小型のディスプレイが最初からついているのでキーボードとマウスを接続して起動
→ ubuntu18.04がGUI環境で立ち上がるのでwifiに接続

## LIMO(Jetson Nano) の設定
ターミナルを立ち上げるとPC名agilex, ユーザー名agilexとなっていますがsudoパスワードが不明・・・しばらく探して下記githubから「agx」と判明

https://github.com/agilexrobotics/limo-doc

下記やったこと(コマンド)のメモ
```ruby:とりあえず
$ sudo apt-get update
```
```ruby:キーボードレイアウト修正
$ sudo dpkg-reconfigure keyboard-configuration
```
中国語は分からないので日本語化
```ruby:日本語関連パッケージのインストール
$ sudo apt -y install language-pack-ja-base language-pack-ja ibus-mozc
```
```ruby:変更
$ sudo localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
$ source /etc/default/locale
```
```ruby:確認
$ echo $LANG
```
ja_JP.UTF-8 と出れば変更されています
```ruby:再起動した方がいいかも
$ sudo shutdown -r now
```

ROSは既にインストール済みと思われたのでネットワークの設定のみ実施
```ruby:.bashrcを編集
$ vi ~/.bashrc
```

一番下に下記２行追加
```
export ROS_MASTER_URI=http://[ホストPCのIPアドレス]:11311
export ROS_HOSTNAME=[LIMO(Jetson Nano)のIPアドレス]
```
例えば
export ROS_MASTER_URI=http://192.168.10.13:11311
export ROS_HOSTNAME=192.168.10.14
※ipアドレスの確認はifconfig(入ってなければapt install net-tools)
```ruby:有効化
$ source ~/.bashrc
```


## ホストPC の設定
下記を見る限り簡単そうと思ったが落とし穴あり

https://github.com/agilexrobotics/limo_ros

ROSはmelodicが導入済みの状態から開始
※buildディレクトリなどが残っているとcatkin_makeでエラーになるので先に消去しておく
```ruby:GitHubから
$ cd ~/catkin_ws/src
$ git clone https://github.com/agilexrobotics/limo_ros.git
$ cd ..
$ catkin_make
```
こちらも.bashrcを編集
```ruby:
$ vi ~/.bashrc
```
一番下に下記２行追加（先ほどと少し違うので注意）
```
export ROS_MASTER_URI=http://[ホストPCのIPアドレス]:11311
export ROS_HOSTNAME=[ホストPCのIPアドレス]
```
```ruby:こちらも有効化
$ source ~/.bashrc
```


上のサイトによればあとはROSを立ち上げてroslaunch ~~ で色々いけるかのように
見えるのだがエラー出現
【状況】
ホストPC: roscore
LIMO: roslaunch limo_bringup limo_start.launch
→ ここまではエラーなし、このあと
ホストPC: roslaunch limo_bringup limo_teleop_keyboard.launch
（キーボードでロボットを操作するパッケージ）
でエラー発生
![teleop.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962692/6692abdd-6885-5c32-fe70-a0f6311009b9.png)

## エラー対応 (limo_teleop_keyboard.launch)
最初はこのパッケージへのPATHが通ってないのかと思い色々といじるもなおらない・・・

### 何とファイル名が間違っていることが判明
```ruby:確認
$ cd ~/catkin_ws/src/limo_ros/limo_bringup/launch
$ ls
```
![スクリーンショット 2022-10-01 171529.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962692/58676ecf-5b3b-4ca8-e568-fa034fbcd470.png)
### teleop ならぬ teletop となっている・・・


ホストPC: roslaunch limo_bringup limo_teletop_keyboard.launch

としたら動いた．（結構速いので周囲に注意！！）その後，
```ruby:ファイル名修正
$ mv limo_teletop_keyboard.launch limo_teleop_keyboard.launch
```
と修正．

---------------------------------------------
### 以下追記・補足（編集中）

## limo_gmapping.launch を使ってみる
こちらは robot_pose_ekf を必要としているようだったのでインストール

```ruby:足りないものインストール
$ sudo apt install ros-melodic-robot-pose-ekf
```
→とりあえずエラーなどの表示はなく動いた．
![limo3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962692/af077f14-c9b7-2302-33fe-7c09eba0aced.png)


## limo_cartographer.launch を使ってみたい

現在作業中、まとまり次第更新する予定

```ruby:足りないものインストール
$ sudo apt install ros-melodic-cartographer-ros
```