Ubuntu16.04LTSを用いたAstrobeeシュミレーション環境構築手順 non-Docker版 (2021-0608)

参考：
[NASA Astrobee Robot Software  0.14.3](https://nasa.github.io/astrobee/html/index.html)
[Usage instructions for non-NASA users](https://nasa.github.io/astrobee/html/install-nonNASA.html)

#※注意
すべてNASAのGithubに書いてある内容です。
現時点(2021-0608)で初見でインストール手順を調べると古い情報に翻弄され時間を無駄にしてしまったので備忘録として残します。Docker版ではなくネイティブ?に構築する手順です。
##推奨環境
[Usage instructions for non-NASA users：Note](https://nasa.github.io/astrobee/html/install-nonNASA.html)
>Note: You will need 4 GBs of RAM to compile the software. If you don't have that much RAM available, please use swap space.
>
>Note: Preferably install Ubuntu 16.04. At this time we do not officially support any other operating system or Ubuntu version. Experimental instructions steps for Ubuntu 18 installation are included
>
>Note: Please ensure you install the 64-bit version of Ubuntu. We do not support running Astrobee Robot Software on 32-bit systems.

・4GB以上のメモリー
・Ubuntu16.04を推奨
・64ビット版のUbuntuをインストールしてください
と記載があります。
Dockerでも提供されているため使い慣れている方はDockerでの使用をおすすめします。
参考：
[Usage instructions for Docker](https://nasa.github.io/astrobee/html/install-docker.html)

# Machine setup

## プロジェクトのソース コードをチェックアウトする

- ソースコード (SOURCE_PATH) をマシンのどこに置くか決める   

```bash:
export SOURCE_PATH=$HOME/astrobee
```   
解説：
インストール作業中に簡単にディレクトリ移動できるようにPATHを設定.
PATH設定をすることで次から`pushd $SOURCE_PATH`で設定したディレクトリ`$HOME/astrobee`に移動するなど便利な使い方ができるようになる。

- フライト ソフトウェアのリポジトリとメディアを複製

```bash:
git clone https://github.com/nasa/astrobee.git $SOURCE_PATH 
pushd $SOURCE_PATH 
git submodule update --init --depth 1 description/media
```
解説：
astrobee リポジトリを`$SOURCE_PATH` にクローンする
`$SOURCE_PATH`へ移動
サブモジュールを限定的に取得している?ですかね.gitに詳しくないので割愛します.

- ゲストサイエンス コードを使用する予定の場合は、astrobee_android リポジトリも必要になります。リポジトリは、ソースコードをチェックアウトしたのと同じディレクトリでチェックアウトする必要があります。

```bash:
export ANDROID_PATH="${SOURCE_PATH}_android"
git clone https://github.com/nasa/astrobee_android.git $ANDROID_PATH
```
解説：
`ANDROID_PATH`のPATH設定をした後、Android リポジトリをクローンする

##依存関係
必要なすべての依存関係をインストールします。

>Dependencies
>Next, install all required dependencies:
>
>Note: root access is necessary to install the compiled debian packages below
>
>Note: Before running this please ensure that your system is completely updated by running 'sudo apt->get update' and then 'sudo apt-get upgrade'

```bash:リポジトリをupdate&upgradeしておく
sudo apt update 
sudo apt upgrade -y
```

```bash:
pushd $SOURCE_PATH
cd scripts/setup
./add_ros_repository.sh
sudo apt-get update
cd debians
./build_install_debians.sh
cd ../
./install_desktop_packages.sh
sudo rosdep init
rosdep update
popd
```
解説：
特に解説箇所がないので省略します。
上から順に実行してください。
かなり時間がかかります
以下のエラーメッセージは、特定のライブラリが見つからないことを知らせているだけなので、無視して構わないようです。
これらのライブラリはNASA内部でのみ使用されるものであり、DDSを無効にしてソフトウェアを起動している一般ユーザーには必要ありません。とのことです。

>E: Unable to locate package libroyale1
E: Unable to locate package rti
E: Unable to locate package libmiro0
E: Unable to locate package libsoracore1
E: Unable to locate package libroyale-dev
E: Unable to locate package rti-dev
E: Unable to locate package libsoracore-dev
E: Unable to locate package libmiro-dev

##ビルドの設定
デフォルトでconfigure script は以下のパスを使用するそうです
`native build path: $HOME/astrobee_build/native`
`native install path: $HOME/astrobee_install/native`
上記で示されている通りにPATHの設定をしていきます。

```bash:PATH設定
export BUILD_PATH=$HOME/astrobee_build/native
export INSTALL_PATH=$HOME/astrobee_install/native
```

##ネイティブビルド
ビルドディレクトリとインストールディレクトリを明示的に指定したいので下記のコマンドを使用します。

```bash:
pushd $SOURCE_PATH
./scripts/configure.sh -l -F -D -p $INSTALL_PATH -b $BUILD_PATH
popd
```

オプションの解説：
注意：-Fと-Dのフラグは必ず使用してください。これらのフラグが使用されていない場合、コードはコンパイルされません。F フラグは、Picoflex のビルドをオフにするために使用します。これはロボット上で動作させる場合にのみ必要で、シミュレータでは必要ありません。Dは、ddsブリッジの構築をオフにするために使用します。ブリッジは地上データシステムとの通信に使用されますが、シミュレータでは必要ありません。とのことです。

##コードのビルド

```bash:
pushd $BUILD_PATH
make -j2
popd
```
解説：
`$BUILD_PATH`へ移動
ビルド
元のディレクトリへ移動

個人的に思うこと：
`make -j2`は余裕のあるパソコンなら`make -j4`でも良い気がしてる。試してないけど。

## 起動下準備
シミュレータを起動するまえに、ROSのセットアップを行います。
~~NASAの資料をさらっと見た限りではROSセットアップについて書かれている箇所は見つけられませんでした。~~ 
<font color="MediumVioletRed">
*****※追記-2021-0611***********************************************
同じページに記載箇所を見つけたので参考にしてください。
[Simulator usage instructions for non-NASA users](https://nasa.github.io/astrobee/html/sim_overview.html)
*********************************************************************</font>

今回[NASAのastrobeeシミュレータを動かすよ](https://qiita.com/Anaakikutsushit/items/245e4c51e7ecacaeb22b)を参考にさせていただきます。
ROSセットアップを含めPATH設定などはターミナルを閉じるたびにその都度再度実行しないとシュミレータが起動しないので注意が必要です。
エイリアスに登録すると楽かもしれませんね。

```bash:
pushd $BUILD_PATH
source devel/setup.bash
popd
```
解説：
`$BUILD_PATH`へ移動(~/astrobee_build/native)
`$BUILD_PATH/devel/setup.bash`を読み込む
`popd`コマンドで`~/astrobee`へ移動
![Screenshot from 2021-06-08 20-20-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/5f3bd07c-57d9-da4e-3ecd-2433f696451d.png)

```bash:2回目以降
export SOURCE_PATH=$HOME/astrobee
pushd $SOURCE_PATH
export BUILD_PATH=$HOME/astrobee_build/native
pushd $BUILD_PATH
source devel/setup.bash
popd
roslaunch astrobee sim.launch dds:=false robot:=sim_pub rviz:=true
```

#終わりに
ここまでエラーなく完了すればシュミレーション環境の構築は成功だと思っています。
シュミレーションの起動コマンドですがこちら[NASAのastrobeeシミュレータを動かすよ](https://qiita.com/Anaakikutsushit/items/245e4c51e7ecacaeb22b)を参考に
`roslaunch astrobee sim.launch dds:=false robot:=sim_pub rviz:=true`
で起動確認できました。
![Screenshot from 2021-06-08 15-19-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/0d0b8314-3a41-a7bf-7422-16898a6cb288.png)
![Screenshot from 2021-06-08 15-47-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/9480a11b-ef19-443d-87b4-edf9b1df413e.png)

`rosrun executive teleop_tool -undock`　左のundockコマンドを実行したかったんですが何処に入力すればいいのかよく分かっていません。
他にもastrobeeのハートビート?が応答ないよだったりのエラーが出てます。

![Screenshot from 2021-06-08 20-25-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/28117c65-aa49-97d3-02da-5e2edc44f7bc.png)
2度目の実行では何やらメソッドがないとエラーが出てくれました。やはり最新版(2021-0608現在)色々変更されているようですね。
シュミレータの使い方が分かり次第更新していきたいと思います。

---追記2021-0608-21:12
参考：
[Simulator usage instructions for non-NASA users](https://nasa.github.io/astrobee/html/sim_overview.html)
下記のコマンドで別の位置にAstrobeeを表示することが出来ました。

```bash:
roslaunch astrobee sim.launch dds:=false robot:=sim_pub rviz:=true pose:="11.25 -6.95 4.49 0 0 0 1"
```
![Screenshot from 2021-06-08 21-11-50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363815/2941ef4c-e94e-7597-a9ac-053ada072985.png)