AWS RoboMaker を久しぶりに触ってみる
はじめに
AWS RoboMaker はロボットのシミュレーションができる AWS のサービス
数年前に少し触ってみたことがあるが必要が生じたので久々に触ってみる
このスクラップは記事なりました
ところで
Zenn に RoboMaker の記事やスクラップが無いのね、びっくり
Qiita にも21記事しかない、しかも古いのが多い
とりあえずWebコンソール
Getting started
こんなに難しかったっけ
リソース
なんか便利そう
以前は
サンプルアプリみたいのがあってすぐにできた感じだったけど変わったのだろうか
とりあえずやっていく
$ pip3 install vcstool
Collecting vcstool
Downloading vcstool-0.3.0-py3-none-any.whl (42 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 42.2/42.2 kB 965.2 kB/s eta 0:00:00
Requirement already satisfied: PyYAML in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from vcstool) (6.0)
Requirement already satisfied: setuptools in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from vcstool) (47.1.0)
Installing collected packages: vcstool
Successfully installed vcstool-0.3.0
vcs
コマンドは下記のパスに作成された様子
/Library/Frameworks/Python.framework/Versions/3.7/bin/vcs
mkdir -p workspace/robo
cd workspace/robo
git clone https://github.com/aws-robotics/aws-robomaker-sample-application-helloworld.git helloworld
cd helloworld
/Library/Frameworks/Python.framework/Versions/3.7/bin/vcs import robot_ws < robot_ws/.rosinstall
/Library/Frameworks/Python.framework/Versions/3.7/bin/vcs import simulation_ws < simulation_ws/.rosinstall
寄り道ばかりだが
前は colcon bundle
のコマンドを使ってバンドルしていたが今はDockerなのだろうか
Robot application のビルド
DOCKER_BUILDKIT=1 docker build . \
--build-arg ROS_DISTRO=melodic \
--build-arg LOCAL_WS_DIR=./robot_ws \
--build-arg APP_NAME=helloworld-robot-app \
-t robomaker-helloworld-robot-app
ロボットアプリケーションとは何だろう
イメージとしてはロボット関係のコードだけが含まれたアプリケーション
A robot application contains robot code for navigation and perception.
A simulation application contains all of the assets and logic needed to simulate an environment.
ロボットアプリケーションは移動と認知のためのロボットコードを含む。
シミュレーションアプリケーションは環境をシミュレートするために必要なアセットやロジックを含む。
ビルドがなかなか時間がかかる、初回はダウンロードがあったから仕方ないかも知れない
終わった、かかった時間は329秒なので約5分
ドキュメント通りにやって成功したのが感動
Simulation application のビルド
DOCKER_BUILDKIT=1 docker build . \
--build-arg GAZEBO_VERSION=gazebo-9 \
--build-arg ROS_DISTRO=melodic \
--build-arg LOCAL_WS_DIR=./simulation_ws \
--build-arg APP_NAME=helloworld-sim-app \
-t robomaker-helloworld-sim-app
ところで Zenn の入力がときどきもっさりするのだが自分だけだろうか
Zenn ではなくて Chrome の問題?
ビルドが終わった、かかった時間は157秒なので約2.5分
先ほどよりも短い
Dockerイメージの確認
$ docker image ls | grep robomaker
robomaker-helloworld-sim-app latest 23bc743f0aa4 5 minutes ago 2.78GB
robomaker-helloworld-robot-app latest e0fbb4c345e3 9 minutes ago 2.79GB
何と3GB近くあるのか!
docker image ls
の filter オプションを使おうと思ったが難しそうだったので grep
を使った
テスト
ロボットアプリ
docker run -it -v /tmp/.X11-unix/:/tmp/.X11-unix/ \
-u robomaker -e ROBOMAKER_GAZEBO_MASTER_URI=http://localhost:5555 \
-e ROBOMAKER_ROS_MASTER_URI=http://localhost:11311 \
robomaker-helloworld-robot-app:latest roslaunch hello_world_robot rotate.launch
なんかこんなのが出たが良いのだろうか?
[INFO] [1671412141.991914, 0.000000]: Rotating robot: linear:
x: 0.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.1
シミュレーションアプリ
docker run -it -v /tmp/.X11-unix/:/tmp/.X11-unix/ \
-u robomaker -e ROBOMAKER_GAZEBO_MASTER_URI=http://localhost:5555 \
-e ROBOMAKER_ROS_MASTER_URI=http://localhost:11311 \
robomaker-helloworld-sim-app:latest roslaunch hello_world_simulation empty_world.launch
こっちはこんなのが出た
[spawn_urdf-3] process has finished cleanly
log file: /home/robomaker/.ros/log/fb84349e-7f39-11ed-977a-0242ac110002/spawn_urdf-3*.log
ECRへのプッシュ
ECR は Elastic Container Registry で DockerHub のようなコンテナレジストリのことだろう
export robotapp=robomaker-helloworld-robot-app
export simapp=robomaker-helloworld-sim-app
export account=<YOUR AWS ACCOUNT NUMBER>
export region=<YOUR AWS REGION>
export ecruri=$account.dkr.ecr.$region.amazonaws.com
AWSのアカウントナンバーが必要なのか
リージョンは ap-northeast-1
で
aws
コマンドを使うのが久しぶりすぎてインストールする必要があった
普通に MacOS PKG を使った、pip
を使おうとしたけどダメだった
aws ecr get-login-password --region $region | docker login --username AWS --password-stdin $ecruri
aws ecr create-repository --repository-name $robotapp
aws ecr create-repository --repository-name $simapp
docker tag $robotapp $ecruri/$robotapp:latest
docker tag $simapp $ecruri/$simapp:latest
docker push $ecruri/$robotapp:latest
docker push $ecruri/$simapp:latest
できない、なんで、Pushで失敗する、権限とかも適切に設定しているのに...
(1時間ほど経過)
なんと
$ echo $ecruri/$robotapp:latest
000000000000.dkr.ecr.ap-northeast-1.amazonaws.com/robomaker-helloworld-robot-appatest
理由はわからないが:lが消えてる、こんなことが原因とは
docker tag $robotapp $ecruri/$robotapp
docker tag $simapp $ecruri/$simapp
docker push $ecruri/$robotapp
docker push $ecruri/$simapp
:latest
を消したら成功しました
ECRのポリシー設定とかいらなかった
すごい端折ってるのだが
公式ドキュメントではロボットアプリやシミュレーションアプリの作成を端折っている
aws robomaker create-robot-application \
--name my-robot-app \
--robot-software-suite name=General \
--environment uri=000000000000.dkr.ecr.ap-northeast-1.amazonaws.com/robomaker-helloworld-robot-app:latest
aws robomaker create-simulation-application \
--name my-sim-app \
--simulation-software-suite name=SimulationRuntime \
--robot-software-suite name=General \
--environment uri=000000000000.dkr.ecr.ap-northeast-1.amazonaws.com/robomaker-helloworld-sim-app:latest
この辺からはドキュメント通り進まないのでやりがいがある
シミュレーションの実行
create_simulation_job.json
という名前でファイルを作成する
{
"maxJobDurationInSeconds": 3600,
"iamRole": "arn:aws:iam::000000000000:role/service-role/MyRoboMakerRole",
"robotApplications": [
{
"application": "arn:aws:robomaker:ap-northeast-1:000000000000:robot-application/my-robot-app/1671416849466",
"applicationVersion": "$LATEST",
"launchConfig": {
"environmentVariables": {
"ROS_IP": "ROBOMAKER_ROBOT_APP_IP",
"ROS_MASTER_URI": "http://ROBOMAKER_ROBOT_APP_IP:11311",
"GAZEBO_MASTER_URI": "http://ROBOMAKER_SIM_APP_IP:11345"
},
"streamUI": false,
"command": [
"/bin/bash", "-c", "roslaunch hello_world_robot rotate.launch"
]
},
"tools": [
{
"streamUI": true,
"name": "robot-terminal",
"command": "/entrypoint.sh && xfce4-terminal",
"streamOutputToCloudWatch": true,
"exitBehavior": "RESTART"
}
]
}
],
"simulationApplications": [
{
"application": "arn:aws:robomaker:ap-northeast-1:000000000000:simulation-application/my-sim-app/1671416950667",
"launchConfig": {
"environmentVariables": {
"ROS_IP": "ROBOMAKER_SIM_APP_IP",
"ROS_MASTER_URI": "http://ROBOMAKER_ROBOT_APP_IP:11311",
"GAZEBO_MASTER_URI": "http://ROBOMAKER_SIM_APP_IP:11345",
"TURTLEBOT3_MODEL":"waffle_pi"
},
"streamUI": true,
"command": [
"/bin/bash", "-c", "roslaunch hello_world_simulation empty_world.launch --wait"
]
},
"tools": [
{
"streamUI": true,
"name": "gzclient",
"command": "/entrypoint.sh && gzclient",
"streamOutputToCloudWatch": true,
"exitBehavior": "RESTART"
}
]
}
]
}
下記の3点は変更する
- iamRole
- robotApplications.application
- simulationApplications.application
iamRole はWebコンソールで適当なシミュレーションジョブを作るときに新しいIAMロールを作る
aws robomaker create-simulation-job --cli-input-json file://create_simulation_job.json