Closed16

AWS RoboMaker を久しぶりに触ってみる

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

とりあえずやっていく

https://docs.aws.amazon.com/robomaker/latest/dg/development-build-sim-containers.html

$ 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
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

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

ロボットアプリケーションとは何だろう

イメージとしてはロボット関係のコードだけが含まれたアプリケーション

https://docs.aws.amazon.com/robomaker/latest/dg/gettingstarted-concepts.html#concept-applications

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分

ドキュメント通りにやって成功したのが感動

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

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分

先ほどよりも短い

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

テスト

ロボットアプリ

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
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

ECRへのプッシュ

https://docs.aws.amazon.com/robomaker/latest/dg/development-publish-app-containers.html

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 コマンドを使うのが久しぶりすぎてインストールする必要があった

https://aws.amazon.com/jp/cli/

普通に 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で失敗する、権限とかも適切に設定しているのに...

https://stackoverflow.com/questions/70828205/pushing-an-image-to-ecr-getting-retrying-in-seconds

https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/repository-policy-examples.html

(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のポリシー設定とかいらなかった

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

すごい端折ってるのだが

https://docs.aws.amazon.com/robomaker/latest/dg/simulation-running.html

公式ドキュメントではロボットアプリやシミュレーションアプリの作成を端折っている

https://docs.aws.amazon.com/robomaker/latest/dg/development-work-robot-apps.html

https://docs.aws.amazon.com/robomaker/latest/dg/development-work-sim-apps.html

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

この辺からはドキュメント通り進まないのでやりがいがある

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

シミュレーションの実行

create_simulation_job.json という名前でファイルを作成する

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
このスクラップは2023/01/10にクローズされました