亚马逊AWS官方博客
无需管理任何基础设施即可在云端构建和模拟 Mini Pupper 机器人
简介
解决方案概览
在此解决方案中,您将为 Mini Pupper 构建导航应用程序。该应用程序使用机器人的摄像头,以及光探测和测距传感器(LIDAR)来确定机器人的位置和方向。操作员设置目标点后,机器人计算路线并走到目标点。
Mini Pupper 运行机器人操作系统(ROS)。 ROS 是一个开源的机器人软件框架。ROS 提供了一组软件库和工具,可帮助您构建机器人应用程序。您将在 ROS 开发环境中开发和运行应用程序。
您可以使用 Gazebo 模拟器模拟机器人和应用程序。Gazebo 是一款开源 3D 机器人模拟器。它可以渲染 3D 场景,并模拟机器人的传感器和执行器控制。
您可以使用带有 ROS 环境和 Gazebo 模拟器的在线 IDE 进行应用程序开发和测试。之后,在托管的模拟环境中模拟机器人应用程序。
下图说明了如何通过四个步骤构建、测试和运行机器人应用程序:
- 部署开发环境。开发环境是一个带有 ROS 环境和 Gazebo 模拟器的在线 IDE,用于应用程序开发和测试。
- 在 AWS RoboMaker 开发环境中开发和测试他们的应用程序。您可以在开发环境中运行和调试机器人应用程序和模拟器。
- 为应用程序生成容器映像。该映像存储在 Amazon Elastic Container Registry(Amazon ECR)中。
- 在 AWS RoboMaker 的托管模拟环境中运行应用程序。
此解决方案包括以下组成部分:
- AWS RoboMaker:在可扩展的基础设施之上提供完全托管式模拟功能。在本演练中,您可以使用 AWS RoboMaker 提供的托管模拟环境。
- AWS Cloud9:在线 IDE。允许用户使用 ROS 环境和 Gazebo 模拟器在云端进行开发。
- Amazon Elastic Container Registry(Amazon ECR):存储机器人应用程序和模拟应用程序的容器映像。
先决条件
要进行此演练,您需要满足以下条件:
- 对 Linux 操作系统和容器有基本的了解。
- 对 ROS 和 Gazebo 有基本的了解。
- 一个 AWS 账户。
- 具有部署所需资源的管理员权限或同等权限。
本文所需的源代码可从 https://github.com/mangdangroboticsclub/aws-robomaker-mini-pupper-application 获取。
解决方案演练
步骤 1:部署开发环境
开发环境是基于 AWS Cloud9 和云的 IDE,使用 Amazon Elastic Compute Cloud(Amazon EC2)作为底层基础设施。此环境提供预安装的 Ubuntu 操作系统。用户可以安装 ROS 开发环境和 Gazebo 模拟器来快速开始开发机器人应用程序。
您可以通过关注以下博客文章来构建开发环境:在 AWS Cloud9 中构建和模拟机器人应用程序。确保已完成配置 NICE DCV 步骤,这样您就可以访问 NICE DCV 环境了。
步骤 2:构建和测试机器人应用程序
1.从 GitHub 获取源代码。
运行以下命令,从 Github 克隆代码。
git clone --recursive https://github.com/mangdangroboticsclub/aws-robomaker-mini-pupper-application.git
您可以浏览文件夹结构。机器人应用程序位于 robot_ws 文件夹中,模拟应用程序源代码位于 simulation_ws 文件夹(也称为工作区)中。
机器人应用程序是包含机器人行为的软件,例如 ROS 导航。组件将通过 ROS 主题和服务相互通信。
模拟应用程序包含模型。当机器人在模拟中移动时,模拟器将加载世界模型和机器人模型,以提供机器人环境和传感器数据。模拟器还使用 ROS 主题和服务与机器人应用程序通信。
2.安装机器人应用程序的依赖项。
在 AWS Cloud9 开发环境中,您已经安装了带有基本软件包的 ROS 开发环境。机器人应用程序需要可以使用 rosdep 安装的额外软件包。rosdep 是 ROS 的软件包管理器。它可以从源代码中检测软件包依赖项,并调用系统的包管理器(在本例中为 apt)来安装它们。
a.导航到 robot_ws 目录。
cd aws-robomaker-mini-pupper-application/robot_ws
b.运行以下命令来安装依赖项。
rosdep install --from-paths src --ignore-src -r -y
安装过程将持续三到五分钟。看到 #所有必须的 rosdeps 均已成功安装后,机器人应用程序的所有依赖项都已安装。
3.安装模拟应用程序的依赖项。
a.导航到 simulation_ws 目录。
cd ../simulation_ws/
b.运行以下命令来安装依赖项。
rosdep install –from-paths src –ignore-src -r -y
4.构建机器人应用程序。
您可以使用 colcon 工具来构建和打包机器人应用程序。colcon 是一个通用的 ROS 构建工具,同时支持 ROS 和 ROS2。colcon 可以调用 cmake 或其他构建工具从源代码构建可执行文件。应分别构建机器人应用程序和模拟应用程序。
a.导航到 robot_ws 目录。
cd ../robot_ws
b.运行以下命令开始构建。
colcon build –cmake-args ‘-Wno-dev’
您将看到 2 个包已完成。
5.构建模拟应用程序。
a.导航到 simulation_ws 目录。
cd ../simulation_ws
b.运行以下命令开始构建。
colcon build –cmake-args ‘-Wno-dev’
您将看到 11 个包已完成。
6.启动 GUI 会话。
构建完成后,您可以使用开源 Gazebo 模拟器在我们的开发环境中对其进行测试。您的开发环境提供了一个 NICE DCV 虚拟桌面,以获得高质量的 GUI 体验。运行以下命令,以获取 NICE DCV 的访问 URL:
./dcvsession
您会看到一个类似 https://1234567890abcdef0.vfs.cloud9.us-east-1.amazonaws.com
的 URL。在浏览器中打开此 URL,您会看到 Ubuntu 桌面。
要从终端运行 GUI 应用程序,请在 IDE 中设置 DISPLAY 环境变量。
a.在所有打开的终端上运行以下命令。
export DISPLAY=:0
b.运行 xclock
命令以测试启动一个简单的时钟应用程序 GUI。
如果时钟 GUI 未呈现,您可能会收到以下消息,例如无法连接到显示器:0。在这种情况下,请运行以下命令并尝试再次启动
xclock
。
export DISPLAY=:1
7.运行机器人应用程序。
现在,您可以启动 Gazebo 来模拟机器人应用程序。运行以下命令。
您可以在 Gazebo 模拟器上看到四足机器人站在场景中。
要使机器人移动,请启动机器人应用程序。
a.选择右上角的加号打开新终端,然后选择 New Terminal(新终端)。
b.在新终端中,运行以下命令来初始化显示。
export DISPLAY=:0
c.导航到机器人应用程序所在的目录。
cd aws-robomaker-mini-pupper-application/robot_ws
d.运行机器人应用程序。
source install/local_setup.bash
roslaunch mini_pupper_navigation navigate.launch
经过短暂的初始化后,Mini Pupper 的导航应用程序将出现在 RViz 中。 RViz 是一款 ROS 主题可视化工具,可用于可视化机器人的传感器输入。
您可以通过 RViz 控制机器人。选择 2D Nav Goal(2D 导航目标)进入控制模式。单击并拖动以设置机器人的目标和方向。
设置目标后,您可以看到机器人向目标移动,并在到达目标时原地转向。
完成测试后,在两个终端窗口中按 Ctrl+C 停止正在运行的应用程序。保持这些终端窗口和虚拟桌面处于打开状态,因为您稍后将使用它们。
步骤 3:为模拟作业构建容器映像
现在,您已在虚拟桌面上有一个工作的模拟,可以将应用程序构建到容器映像中,以便它们可以在 AWS RoboMaker 模拟作业上运行。模拟作业是一个托管环境,用于运行一对机器人和模拟应用程序。模拟作业提供更大的计算资源和一个世界生成器,并且适合长时间运行。在本演练中,您将构建三个映像:
- mini-pupper-base:基本映像包含 ROS 运行时环境和 Gazebo 9 模拟器。源代码和共享依赖项也将内置到映像中。此映像用作基础层,不可执行。
- mini-pupper-robot:机器人映像包含可执行的机器人应用程序及其启动脚本。
- mini-pupper-simulation:模拟器映像包含可执行的模拟器应用程序、世界及其启动脚本。
映像构建需要名为 Dockerfile 的构建脚本。Dockerfile 是一种文本文档,它包含用户可以在命令行上调用以组装映像的所有命令。您可以在代码存储库的根目录中找到所有三个 Dockerfile。
1.生成基本映像。
基本映像包含 ROS 运行时环境、Gazebo 9 模拟器、源代码和共享依赖项。运行以下命令开始构建。
sudo docker build . -t mini-pupper-base:1.0 -f Dockerfile-Base
使用 docker build,Docker 可以通过读取 Dockerfile 中的指令来自动构建映像,并连续运行多个命令行指令。通常,在构建过程中,Docker 会安装依赖项,将应用程序的源代码构建为可执行文件,并设置启动配置以启动应用程序。
此映像名为 mini-pupper-base:1.0。映像名称中包含存储库和标记,两者由冒号分隔。存储库是一组相似的映像,不同的版本使用标记来标识。如果您有多个版本的映像,可以保留相同的存储库,但使用不同的标记进行版本控制。当映像被推送到远程注册表时,存储库也可以表示注册表主机名。您将对其进行更改,并在稍后推送到 Amazon ECR。
2.构建机器人应用程序映像。
要构建与 AWS RoboMaker 兼容的容器映像,该映像应包含启动脚本。启动脚本可以包含环境变量设置和预处理命令。在此演练中,您将使用仅包含环境变量的最低启动脚本。您可以在 script 目录中找到它,并将其命名为 robot-entrypoint.sh。
a.运行以下命令,开始使用 Dockerfile-Robot 构建机器人应用程序映像。
sudo docker build . -t mini-pupper-robot:1.0 -f Dockerfile-Robot
b.运行以下命令,开始使用 Dockerfile-Simulation 构建模拟器映像。
sudo docker build . -t mini-pupper-simulation:1.0 -f Dockerfile-Simulation
c.运行 docker images
命令,列出到目前为止您构建的映像。您应看到至少 4 个映像。
3.在本地验证映像。
a.运行以下命令,启动机器人应用程序。
您可以在终端和虚拟桌面的 RViz 窗口中看到输出。
b.切换到另一个终端窗口,并运行以下命令以启动模拟应用程序。
现在,您可以在虚拟桌面中看到 Gazebo 模拟器。您可以使用与上一部分中提到的相同方法控制机器人。
4.创建映像存储库。
模拟作业会从容器映像注册表中提取并运行相应的映像。Amazon ECR 是一个完全托管式 Docker 容器注册表。您可以使用 Amazon ECR 存储以前构建的映像。
存储库是您在 Amazon ECR 中存储映像的地方。一个存储库可以有多个版本的映像。在推送任何映像之前,您都需要创建存储库。
a.导航到 Amazon ECR 控制台。
b.在导航窗格中,选择
c.选择 Create Repository(创建存储库)。
d.对于 Repository Name(存储库名称),指定存储库的名称。在本演练中,输入 mini-pupper-robot
。
e.选择 Create Repository(创建存储库)。
重复上述过程,创建另一个名为 mini-pupper-simulation
的存储库。您不需要创建第三个存储库,因为基本映像不可执行。
5.登录 Amazon ECR
要在 Amazon ECR 中使用 docker 命令,请在终端中手动登录 Amazon ECR。
a.选择您创建的任何存储库。
b.选择 View push commands(查看推送命令),以查看登录命令。
c.复制第 1 部分中的命令。
d.在 AWS Cloud9 终端中运行复制的命令。
看到 Login succeed(登录成功)后,说明已成功登录。每个令牌的有效期为 24 小时。如果令牌过期,请重新登录。
6.标记您的映像。
Docker 要求使用注册表主机名标记映像。Amazon ECR 将提供一个唯一的主机名,您需要将其添加为映像名称的前缀才能正确上传。我们使用 docker tag 命令来重命名映像。
a.将 111122223333
替换为您的 12 位 AWS 账号,将 your-region
替换为您所在的区域。运行以下命令。
docker tag mini-pupper-robot:1.0 111122223333.dkr.ecr.your-region.amazonaws.com/mini-pupper-robot:1.0
docker tag mini-pupper-simulation:1.0 111122223333.dkr.ecr.your-region.amazonaws.com/mini-pupper-simulation:1.0
b.运行 docker images
列出可用映像。别名映像位于不同的存储库中,但具有相同的映像 ID。
7.将映像推送到 Amazon ECR。
将 111122223333
替换为您的 12 位 AWS 账号,将 your-region
替换为您所在的区域。运行以下命令。
docker push 111122223333.dkr.ecr.your-region.amazonaws.com/mini-pupper-robot:1.0
docker push 111122223333.dkr.ecr.your-region.amazonaws.com/mini-pupper-simulation:1.0
推送完成后,您可以在 Amazon ECR 控制台中看到新推送的映像。
步骤 4:在模拟作业中运行机器人应用程序
1.定义机器人应用程序。
模拟作业需要一对机器人应用程序和仿真应用程序。这些定义包括映像位置。
a.打开 AWS RoboMaker 控制台。
b.在导航窗格中的 Development(开发)下,选择 Robot Applications(机器人应用程序)。
c.选择 Create Robot Application(创建机器人应用程序)。
d.对于 Name(名称),指定机器人应用程序的名称。在本演练中,输入 mini-pupper-demo-robot
。
e.对于 Container image(容器映像),选择 Browse ECR(浏览 ECR),以找到之前上传的机器人应用程序映像。
f.选择 Create(创建),以创建机器人应用程序。
2.定义模拟应用程序。
a.在导航窗格的 Development(开发)下,选择 Simulation Applications(模拟应用程序)。
b.选择 Create simulation Application(创建模拟应用程序)。
c.对于 Name(名称),指定模拟应用程序的名称。在本演练中,输入 mini-pupper-demo-simulation
。
d.对于 Container image(容器映像),选择 Browse ECR(浏览 ECR),以找到之前上传的模拟应用程序映像。
e.选择 Create(创建),以创建模拟应用程序。
3.启动 AWS RoboMaker 模拟作业。
模拟作业是一个完全托管式环境,用于运行机器人应用程序和模拟器应用程序。您可以在不同的模拟作业中指定配置,以模拟不同的环境。它还提供了用于交互的图形界面。
a.在导航窗格的 Simulation Run(模拟运行)下,选择 Simulation jobs(模拟作业)。
b.选择 Create Simulation Job(创建模拟作业)。
创建模拟作业分为 4 个步骤。
在 Configuring simulation(配置模拟)页面中,您可以配置模拟作业的详细信息和可选参数。
a.对于 Simulation job duration(模拟作业持续时间),指定时间。在本演练中,指定 30 分钟。
b.对于 IAM Role(IAM 角色),选择 Create a new role(创建新角色)。然后,在下面的文本框中为新创建的 IAM 角色指定一个名称。在本演练中,输入 mini-pupper-demo-role
。此 IAM 角色允许 AWS RoboMaker 从相应的 ECR 存储库中检索映像,并将日志发送到 CloudWatch Logs。
在同一页面的 Compute(计算)部分中,您可以选择模拟作业的计算类型和计算限制。
a.对于 Compute type(计算类型),选择 CPU。本演练不需要 GPU。
b.对于 Simulation Unit (SU) limit(模拟单元(SU)限制),保持 15 个 SU 不变。每个 SU 代表 1 个 vCPU 和 2GB 内存。将按您的作业消耗的 SU 数量进行计费,最高不超过配置的限制。
c.选择 Next(下一步)进入下一页。
在 Specify robot application(指定机器人应用程序)页面中,设置机器人应用程序的启动配置。
a.对于 Robot Application(机器人应用程序),选择先前配置的机器人应用程序。
b.对于 Launch Command(启动命令)字段,将启动命令指定为以逗号分隔的参数列表。在本演练中,输入 roslaunch, mini_pupper_navigation, navigate.launch
。
c.为基于 RViz 的 GUI 启用 Run with streaming session(使用流媒体会话运行)。
为确保机器人应用程序和模拟器应用程序可以相互通信,请定义一些环境变量,以便这两个应用程序可以连接到同一个 ROS 主机。
d.选择 Add item(添加项目),并将以下内容添加到 Environment variables(环境变量)中。
名称 | 值 | ||||
GAZEBO_MASTER_URI | http://ROBOMAKER_SIM_APP_IP:11345 |
||||
ROS_IP | ROBOMAKER_ROBOT_APP_IP |
||||
ROS_MASTER_URI | http://ROBOMAKER_ROBOT_APP_IP:11311 |
AWS RoboMaker 会自动将该值替换为相应容器的 IP。
e.选择 Next(下一步)进入下一页。
在 Specify simulation application(指定模拟应用程序)页面中,设置模拟应用程序的启动配置。
a.对于 Simulation Application(模拟应用程序),选择先前配置的模拟器应用程序。
b.对于 Launch Command(启动命令)字段,将启动命令指定为以逗号分隔的参数列表。在本演练中,输入 roslaunch, mini_pupper_gazebo, gazebo.launch
。
c.为基于 Gazebo GUI 启用 Run with streaming session(使用流媒体会话运行)。
d.对于 Environment variables(环境变量),指定以下环境变量。
名称 | 值 | ||||
GAZEBO_MASTER_URI | http://ROBOMAKER_SIM_APP_IP:11345 |
||||
ROS_IP | ROBOMAKER_SIM_APP_IP |
||||
ROS_MASTER_URI | http://ROBOMAKER_ROBOT_APP_IP:11311 |
e.选择 Next(下一步)进入下一页。
在 Review and create(查看并创建)页面中,查看配置,然后选择页面底部的 Create(创建)。您可以选择新创建的模拟作业来查看详细信息。
任务初始化需要三到五分钟。在任务运行时,您可以选择 Robot application tools(机器人应用程序工具)和 Simulation application tools(模拟应用程序工具)下的 Connect(连接),以与正在运行的模拟作业进行交互。
您可以通过 RViz 控制机器人。选择 2D Nav Goal(2D 导航目标)进入控制模式。单击并拖动以设置机器人的目标和方向。然后,您可以看到机器人走向选定的目标。
清理
为避免在您的 AWS 账户中持续收费,您可以删除在本演练中创建的 AWS 资源。
a.导航到 AWS Cloud9 控制台。选择已创建的开发环境,然后选择 Delete(删除)。
b.模拟作业将在所需持续时间(本演练中为 30 分钟)后自动停止。您可以通过导航到 RoboMaker 控制台来提前停止它。选择 simulation job(模拟作业),在 Actions(操作)菜单中,选择 Cancel(取消)。
c.导航到 Amazon ECR 控制台。选择已创建的存储库,然后选择 Delete(删除)。
结论
在这篇博客中,我们向您介绍了如何使用 AWS RoboMaker 开发、测试和运行机器人应用程序和模拟应用程序。通过 AWS RoboMaker,您可以专注于机器人软件开发。专业人士、学生和机器人爱好者可以学习如何使用 AWS RoboMaker 开发机器人应用程序并对其进行模拟。
您可以在 Amazon 购买 Mini Pupper,在 AWS 管理控制台中开始使用 AWS RoboMaker。您可以在 AWS RoboMaker 文档和博客为 AWS RoboMaker 准备 ROS 应用程序和模拟容器中了解更多信息。您也可以向 AWS 发送电子邮件以获取更多信息。