E isso, claro, é uma vitória fora da competição! Mas também tivemos uma experiência interessante de depurar um robô localizado a 2000 km de nós em uma garagem de barcos na costa norueguesa. Abaixo do corte, uma história sobre como criamos a visão e determinamos "cérebros de nuvem" para robôs durante a quarentena remotamente:

Na primavera, fizemos um protótipo de todo o sistema de controle remoto para streaming 3D e treinamento por um robô em um YuMi de duas mãos e conhecemos uma empresa norueguesa cuja solução é muito útil para nós para a transmissão de um stream 3D de câmeras Realsense - Aivero. Então, após um período de trabalho difícil, os planos pareciam sem nuvens: voar para a Itália por um mês de inverno com minha família, de lá viajar para exposições de robótica na Europa e terminar tudo com uma parada por algumas semanas em uma cidade com belos fiordes nas proximidades - Stavanger, onde discutir a integração 3D codecs em nosso sistema e tentar convencer Aivero a colocar alguns robôs juntos.
O que poderia ter dado errado neste plano maravilhoso ...
Sentado em quarentena por 2 semanas após retornar (não sem incidentes) do bloqueio italiano, eu tive que soprar a poeira do meu inglês falado e escrito e executar a segunda parte do plano já em Zoom, e não na comitiva de fiordes.
Embora, veja como olhar. A quarentena forçou muitos a começar a trabalhar seriamente em possíveis maneiras de automatizar onde não é difícil substituir uma pessoa. Ainda mais para os países ocidentais, onde o salário mínimo é superior a 1500 euros, onde a robotização do trabalho manual simples é relevante mesmo sem a atual situação epidemiológica.
Conectamos diferentes robôs
Deixe-me lembrá-lo de que treinamos robôs usando registros de controle remoto. Essa. o robô se conecta à Internet, à nossa nuvem e começa a enviar imagens 3D e leituras de sensores. Recebe comandos de volta e os executa. Nessa lógica, nossa tarefa é ensinar o processador de ML a se comportar como um operador. O 3D é necessário para renderizar a cena em realidade virtual para o operador. Isso é conveniente, e o ML se torna muito mais preciso ao agarrar objetos quando há um mapa de profundidade.
Conforme planejado, podemos conectar uma variedade de robôs à nossa nuvem, mas criar toda a variedade deles é um caminho muito espinhoso. Nós nos concentramos em seus cérebros, na aprendizagem.
Como resultado, concordamos com a Aivero para criar um robô universal de um braço com olhos 3D por seus poderes, vamos chamá-lo de “Unidade”, e temos que fazer toda a robótica em nuvem.
A prioridade era a simplicidade e o custo da solução para o cliente final. E, claro, versatilidade. Queremos minimizar o limite de entrada para automatizar o trabalho manual simples. Idealmente, mesmo um pequeno empresário sem habilidades especiais poderia comprar ou alugar nossa “Unidade”, colocá-la no local de trabalho e gerenciá-la.
Pensamos por algumas semanas, testamos as hipóteses por alguns meses e foi o que aconteceu (versão com Jetson AGX na base e uma câmera panorâmica diferente da do título):

E um holofote mais próximo:

Composição:
- Jetson NX
- 2 câmeras 3D Realsense (uma visão geral, a outra para a área de trabalho)
- Holofote
- bomba de vácuo se necessário
- braço robótico (Eva / UR / ABB YuMi) com vácuo ou punho mecânico
- Internet wi-fi ou com fio

Esse suporte telescópico com uma calculadora e uma bomba de vácuo na base é colocado próximo à área de trabalho do robô, conecta-se à Internet (por exemplo, por meio de um código QR para WiFi) e imediatamente começa a resolver a tarefa com pouca ou nenhuma configuração.
Aqui você pode estimar o custo imediatamente. O braço robótico mais acessível Eva é de 8.000 euros (não fornecido na Rússia), e o UR10 já custará quase 50.000 euros, mas aqui deve-se notar que o UR alega uma confiabilidade muito maior, por isso pode não ser muito mais caro a longo prazo. E eles estão ficando mais baratos ultimamente. O resto do kit custa cerca de 2.000 euros.
ABB YuMi IRB 14050
Anteriormente, lidamos com um YuMi de duas mãos , mas aqui tentamos uma nova versão do IRB14050, que é essencialmente apenas uma mão decepada.
Resumidamente o que eu gostei:
- precisão e acabamento mecânico
- alta sensibilidade a colisões e amortecedores nas juntas
e não gostou:
- difícil de resolver remotamente colisões e situações de emergência
- o pequeno movimento angular de algumas articulações torna as trajetórias bastante difíceis para movimentos aparentemente simples, que não são difíceis para a cinemática de outros braços de 6 coordenadas
- baixa capacidade de carga em comparação com análogos
- além disso, requer o upload (e às vezes a depuração) de um programa em sua própria linguagem de programação da ABB, que processa comandos TCP de um computador
E não brevemente.
É aqui que passamos mais tempo. A receita para o lançamento não é nada simples:
- Pegue uma máquina Windows porque caso contrário, você não conseguirá instalar o RobotStudio da ABB.
- https://github.com/BerkeleyAutomation/yumipy RAPID ( ABB) ( , ), python API YuMi IRB 14050 IRB 14000.
- , IRB14000 urdf ROS moveit. IRB14000, IRB14050.
- ROS moveit Python API .
- FlexPendant for OmniCore, .
Mas, é claro, essa é apenas uma trajetória possível de como o YuMi pode obedecer, e todas as pequenas coisas em que você pode tropeçar não são mencionadas aqui, é claro.
Eva

Resumidamente o que gostamos:
- Claro o preço
- API simples e concisa
E os contras:
- sem detecção de colisão (anunciada no lançamento de outono)
- precisão de posicionamento - o fabricante ainda precisa trabalhar nisso, mas temos o suficiente
Claro, a facilidade de gerenciamento cativa:
pip install evasdk
e
import evasdk
eva = evasdk.Eva(host_ip, token)
with eva.lock():
eva.control_wait_for_ready()
eva.control_go_to([0, 0, 0, 0, 0, 0])
E o braço robótico está fora! e executa.
Não, é claro, então conseguimos estourar os registros no controlador de mão, depois disso ele parou de escutar. Mas devemos homenagear o fabricante - a criação de um problema em seu gita foi suficiente para que eles entendessem os motivos (e levou a algumas ligações com um conselho inteiro sobre nossos problemas).
E no geral, Automata (produtor de Eva) é ótimo! Espero que eles consigam crescer e se desenvolver ainda mais no mercado de robótica, tornando os robôs muito mais acessíveis e fáceis do que são agora.
UR
Gostou:
- excelente mecânica e alta precisão
- grandes intervalos de ângulos de articulação, o que torna o planejamento da trajetória muito mais fácil
- colisões podem ser resolvidas no VNC Viewer conectando-se ao computador do robô
- bem depurado na infraestrutura ROS
Desvantagens:
- SO desatualizado no controlador UR, não houve atualizações de segurança por cerca de um ano e meio
- ainda não é o meio de comunicação mais moderno, embora esteja bem coberto pelas bibliotecas abertas disponíveis
No python, o braço robótico está disponível em dois cenários principais:
- Instale https://github.com/SintefManufacturing/python-urx e divirta-se. A lista é um pouco mais longa do que no caso de evasdk, então não vou dar. Existem também problemas de compatibilidade conhecidos com os novos braços robóticos, a julgar pelo rastreador de problemas. Algo que também teve que ser corrigido para você, tk. nem todos os modos de movimento foram implementados na biblioteca, mas essas são sutilezas.
- “ROS-” (https://github.com/ros-industrial/universal_robot). , ROS , : UR moveit ( ROS, , , ).
Tentamos evitar ROS porque parte de suas funções (corretor de mensagens) é realizada pelo rabbitmq em nosso sistema, e há uma séria complicação da pilha de tecnologia utilizada. Portanto, para o caso em que você precisa contornar obstáculos, encapsulamos o ROS em um microsserviço no lado do servidor.
Agora o truque!
Para você entender, UR é:

Ie. qualquer espirro é permitido no painel de toque do robô. E para torturar nosso colega de Aivero não 5 vezes ao dia, dirigindo até a garagem do barco, você precisa entrar lá remotamente de alguma forma.
Descobriu-se que o controlador UR tem o Linux instalado (e, a propósito, não o processador x86 mais fraco).
Digitamos ssh IP ... usuário: root, senha: easybot.
E você está no Debian Wheezy.
Então pegamos e instalamos o servidor VNC e descobrimos que somos o mestre completo do robô! (Aqui é apenas necessário observar que Wheezy não foi atualizado há 2 anos e você não poderá simplesmente pegar e instalar um servidor vnc devido a registros obsoletos. Mas há um link para o “arquivo mágico” que permite que você faça isso).
A propósito, a Universal Robots, quando mostramos nossa demonstração, disse que tal controle remoto requer um novo procedimento de certificação de segurança. Justo. É muito curioso como a Smart Robotics está se saindo com isso em geral. Não consigo imaginar que as variáveis de direcionamento da visão computacional possam ser 100% seguras para outras pessoas.
É hora de ensinar o robô a pegar as caixas
Deixe-me lembrá-lo de que estamos mostrando o que um robô deve fazer em RV:
Essa. para cada movimento, registramos a aparência da cena e que tipo de comando era, por exemplo, este:
{“op": "pickup_putdown_box",
"pos1": [441.1884, -112.833069, 151.29303],
"pos2": [388.1267, 91.0179138, 114.847595],
"rot1": [[0.9954941, 0.06585537, -0.06822499], [0.0917332, -0.851038456, 0.517028868], [-0.0240128487, -0.52095747, -0.85324496]],
"rot2": [[0.992139041, 0.102700718, -0.07150351], [0.100485876, -0.99436, -0.0339238755], [-0.0745842, 0.026472155, -0.996863365]],
"calibration": [[-0.01462146, 0.9814359, -0.191232175, 551.115051], [0.9987302, 0.0051134224, -0.0501191653, -6.613386], [-0.0482108966, -0.191722155, -0.9802644, 771.933167]],
"box": [[474.331482, -180.079529, 114.765076], [471.436157, -48.88102, 188.729553], [411.868164, -180.27713, 112.670532], [476.105164, -148.54512, 58.89856]],
"source": "operator"}
Em geral, isso é suficiente para treinarmos as grades para determinar a caixa delimitadora de um objeto no espaço e onde agarrá-lo.
Então sentamos por meia hora e mostramos ao robô como fazer malabarismos com 4 tipos de caixas, obtemos cerca de 100 exemplos. Pressionamos o botão mágico ... bem, mais precisamente sudo docker run -e INPUT_S3_FOLDER = ... OUTPUT_S3_FOLDER = ... rembrain / train_all_stages: dev . E vamos dormir. De manhã, o docker envia uma mensagem ao processador de ML para atualizar os pesos e, com a respiração suspensa (embora os robôs tenham recebido testes gratuitos dos fabricantes, eles custam muito dinheiro), lançamos e ...

OOPS ...
Devo dizer que nenhum robô foi prejudicado durante a depuração. Acho que apenas por causa de uma sorte incrível.
Um dia, meu filho de 2 anos apareceu e decidiu brincar com o rastreador VR. Ele subiu em uma cadeira, tirou-a do peitoril da janela ... E enviou o UR10 em uma viagem inimaginável, empurrando a barra da câmera para o lado e colocando o braço robótico em uma posição bastante complicada. Então, eu tive que adicionar alguns fusíveis aos controles. E a segunda câmera de observação, tk. caso contrário, às vezes simplesmente não é visível para onde a mão foi e se é possível movê-la.
E se não for brincadeira, então a precisão de detecção de tais caixas simples em nossos testes excedeu 99,5%, mesmo com uma pequena amostra de treinamento de várias centenas de exemplos. A principal fonte de problemas aqui não é mais a visão do computador, mas complicações relacionadas: por exemplo, algumas anomalias na disposição inicial dos objetos ou interferência não intencional no quadro. Mas então fazemos um sistema de aprendizagem com operadores em um loop para estar pronto para qualquer coisa, resolvendo problemas sem envolver pessoas vivas no local.
Mais um algoritmo, sobre eu estar no back-end e uma falha no front-end da IU
bin-picking «bin-stuffing», .. . — . , .
, , . . .. , , . , .
, . , ( , ). - :
, .. , :
Backend
, websocket-, :
, Coordinator . , Rabbit mongoDB, , ( ). , .
, , backend- , ML .
UI
. , UI , . .
AWS console, Yandex console, , , , . .
, .
, -> -> , , , -> , .
, “”. , UX . — . UI robot Console .
bin-picking «bin-stuffing», .. . — . , .
, , . . .. , , . , .
, . , ( , ). - :

, .. , :

Backend
, websocket-, :

, Coordinator . , Rabbit mongoDB, , ( ). , .
, , backend- , ML .
UI
. , UI , . .
AWS console, Yandex console, , , , . .
, .
, -> -> , , , -> , .

, “”. , UX . — . UI robot Console .
Qual é o próximo
Filmamos um vídeo da instalação e configuração do robô em 2 minutos, preparamos materiais para divulgação em diversos tipos de tarefas.
Ao mesmo tempo, estamos procurando por novas aplicações práticas além da compreensível e popular coleta de lixo (eu pessoalmente sonho em usar robôs em um canteiro de obras).
Acho que em alguns meses estaremos
Então a quarentena foi boa!