Perguntas frequentes sobre contêiner ROS - AWS RoboMaker

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Perguntas frequentes sobre contêiner ROS

Esta página lista perguntas e respostas comuns relacionadas à migração de aplicativos de simulação e robôs baseados em ROS para contêineres Docker adequados para execução no AWS RoboMaker.

Nosso fluxo de trabalho envia trabalhos de simulação usando aplicativos colcon integrados de robôs e simulação. Preciso migrar?

Sim, você deve migrar. As etapas para migrar estão localizadas em Migração de aplicativos ROS para contêineres.

Não tenho certeza se meus aplicativos de robôs e simulação precisam ser migrados. Como posso saber?

Você pode verificar por meio do console AWS ou do AWS CLI. Para obter instruções, escolha a seguinte guia aplicável.

Using the console
  1. Faça login no console do AWS RoboMaker.

  2. No painel de navegação esquerdo, escolha Desenvolvimento e, em seguida, Aplicativos de simulação.

  3. Selecione o Nome do aplicativo de simulação para ver seus detalhes.

    Se você vir General e Simulation Runtime, a migração não é necessária. Se você vir algum valor específico de ROS ou Gazebo, precisará migrar.

Using the AWS CLI

A seguir há um exemplo de comando da AWS CLI que realiza o equivalente às etapas pelo console.

aws robomaker describe-simulation-application --application YOUR-SIM-APP-ARN

Esse comando retorna a saída que indica o simulationSoftwareSuite, o robotSoftwareSuite (se aplicável) e o URI environment. Se você vir Simulation Runtime como o simulationSoftwareSuite e General como o robotSoftwareSuite, e seu URI environment estiver definido, seus aplicativos de simulação não precisam de migração.

Como os contêineres de robôs e aplicativos de simulação se comunicam entre si?

Não é diferente de como os aplicativos baseados em ROS normalmente se comunicam entre si usando o middleware ROS. No entanto, você deve definir algumas variáveis de ambiente específicas do ROS nos objetos de configuração de inicialização da sua solicitação de trabalho de simulação.

A seguir está um exemplo das configurações que você deve usar para o aplicativo do robô. launchConfig

"robotApplications": [ { "application": "YOUR-ROBOT-APP-ARN", "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" }, ... # Removed extra data for clarity } ]

Veja a seguir um exemplo das configurações que você deve usar para o aplicativo de simulação launchConfig.

"simulationApplications": [ { "application": "YOUR-SIM-APP-ARN", "applicationVersion": "$LATEST", "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" }, ... # Removed extra data for clarity } ]

Os contêineres se comunicam entre si conforme o esperado se você usar as cadeias de caracteres ROBOMAKER_* e os números de porta fornecidos para definir ROS_IP, ROS_MASTER_URI e GAZEBO_MASTER_URI.

Para obter mais informações, consulte Executando uma simulação.

Para onde foi minha métrica de fator em tempo real (RTF)? Como posso restaurá-la?

O AWS RoboMaker não publica mais essa métrica automaticamente. Se quiser publicar essa métrica no CloudWatch, você deve importar o pacote do AWS RoboMaker CloudWatch Publisher em seu aplicativo de simulação e modificar seu arquivo de lançamento de simulação usando as instruções fornecidas no arquivo README.md.

Como faço para cancelar e marcar meus trabalhos de simulação?

Você pode usar a configuração da VPC para automarcar ou cancelar automaticamente seus trabalhos de simulação do AWS RoboMaker usando as APIs AWS genéricas. Para usar a abordagem a seguir, o contêiner deve estar sendo executado em uma VPC com uma rota pública por meio de uma NAT ou IGW para as APIs AWS. A abordagem mais simples é usar uma sub-rede pública em sua VPC padrão para se conectar às APIs da AWS. Se você quiser executar simulações em uma sub-rede privada, você também pode configurar uma NAT ou configurar uma interface endpoint da VPC. Para obter mais informações, consulte AWS RoboMaker e endpoints da VPC de interface (AWS PrivateLink).

nota

Se você estiver usando o IGW, certifique-se de configurar assignPublicIp=True conforme descrito na documentação abaixo. Se você estiver usando um IP público, certifique-se de que seus grupos de segurança estejam suficientemente bloqueados.

Você deve adicionar o bloco a seguir aos parâmetros da solicitação.

vpcConfig={ 'subnets': [ 'string', ], 'securityGroups': [ 'string', ], 'assignPublicIp': True|False },

Além disso, o trabalho de simulação do AWS RoboMaker deve ter um perfil do IAM com permissões para marcar e cancelar trabalhos de simulação.

Em seu trabalho de simulação, você pode usar a biblioteca AWS CLI ou Python boto3 para chamar APIs AWS RoboMaker públicas. Você deve ter a biblioteca boto3 e AWS CLI pré-instalada em seu contêiner antes de poder usá-la em um trabalho de simulação do AWS RoboMaker. O código de exemplo do Python a seguir mostra como cancelar um trabalho de simulação.

class RoboMakerUtils: def __init__(self): self.job_arn = os.getenv('AWS_ROBOMAKER_SIMULATION_JOB_ARN') self.client = boto3.client('robomaker', region_name=os.getenv('AWS_ROBOMAKER_REGION', 'us-east-1')) def tag_robomaker_sim_job(self, key, value): self.client.tag_resource( resourceArn=self.job_arn, tags={ key: str(value) } ) def cancel_robomaker_sim_job(self): self.tag_robomaker_sim_job("END_TIME", time.time()) response = self.client.cancel_simulation_job( job=self.job_arn )

Como eu importo mundos do Simulation WorldForge para o trabalho de simulação?

Se você precisar importar ativos do Simulation WorldForge para seu trabalho de simulação, use a API DataSource. Isso permite que você importe ativos mundiais do diretório de saída do Amazon S3 do trabalho de exportação mundial para um destino de sua escolha dentro do contêiner de trabalho de simulação.

Para obter mais informações, consulte Usando mundos exportados em simulação.

Os arquivos de log do meu aplicativo não estão sendo criados. O que está acontecendo?

Certifique-se de ter criado todos os diretórios de saída nos quais você confia para depurar artefatos relacionados em seu Dockerfile. Por exemplo, você pode adicionar a seguinte linha ao Dockerfile.

RUN mkdir -p $YOUR_LOG_DIR

Para obter mais informações, consulte Como adicionar uma configuração de upload personalizada.

Meu aplicativo de simulação apresentou a falha 'run_id on parameter server does not match declared run_id'. O que devo fazer?

Se você estiver iniciando seu trabalho de simulação de ROS com o aplicativo de robô e o aplicativo de simulação, adicione --wait aos comandos roslaunch.