Continuação da série de artigos.
Posts da série:
8. Nós controlamos a partir do telefone-ROS Control, GPS-node7. Localização do robô: gmapping, AMCL, pontos de referência no mapa da sala6. Odometria com codificadores de roda, mapa da sala, lidar5. Trabalhamos em rviz e gazebo: xacro, novos sensores.4. Crie uma simulação de robô usando os editores rviz e gazebo.3. Acelere, troque a câmera, conserte a marcha2. Software1. FerroAo criar mapas em um robô em um espaço limitado, não há problemas. Ao controlar o robô a partir do teclado a partir da estação de controle ou no próprio robô, você pode observar visualmente seus movimentos e evitar obstáculos indesejados no tempo. A situação é complicada se houver vários quartos. E aqui há várias opções para observar um robô construindo um mapa se ele sair da sala do operador:
- conecte a câmera diretamente ao robô;
- use o sistema de vigilância por vĂdeo existente fora do robĂ´;
- controle com wi-fi, teclado bluetooth, estando perto do robĂ´
- “carregue o robô em seus braços” para que o lidar colete dados;
- controle o robĂ´ pelo telefone.
A Ăşltima opção pode parecer conveniente. Para controlar o robĂ´ pelo telefone, basta incliná-lo (o telefone) na direção certa enquanto o robĂ´ está construindo um mapa. Tal missĂŁo Ă© possĂvel.
Vamos considerar como direcionar o robĂ´ a partir do telefone, enviando as mensagens apropriadas para os tĂłpicos do ROS no robĂ´.
Não é necessário escrever um aplicativo separado no telefone para os fins declarados. Para tirar proveito das práticas existentes, basta fazer o download para o seu telefone e instalar o aplicativo Android do mercado - “ROS Control”.
Configure o aplicativo ROS Control no seu telefone.
A aplicação é intuitiva - um robô é adicionado com um sinal "+", seu ip é definido:
Em seguida, selecione "Mostrar opções avançadas" e prescreva tópicos para o carrinho de robô:
As mensagens do telefone serão direcionadas para esses tópicos e também serão aceitas em um formato que o ROS entende.
No aplicativo, os tĂłpicos estĂŁo disponĂveis para nĂłs:
- tĂłpico do joystick - controle do telefone;
- tĂłpico de varredura a laser - dados do lidar;
- nav sat topic - dados do robĂ´ gps;
- odom - odometria (tudo o que chega dos codificadores e / ou imu e / ou lidar);
- pose - "position", a localização do robô.
Domine o tĂłpico do joystick.
O robô em si não funciona, portanto, lançaremos um tópico no robô com um driver de movimento, que já foi apresentado em posts anteriores:
1Âş terminal:
rosrun rosbots_driver part2_cmr.py
No telefone no aplicativo ROS Control, clique na linha com o nome do robĂ´ e falhe no menu de controle do robĂ´:
Agora, se você puxar o joystick com o dedo (em qualquer direção), o carrinho irá embora.Tudo é simples aqui.
Se você observar o que acontece com o tópico do driver do mecanismo em execução no raspberry, verá que o telefone publica e o driver recebe mensagens no formato apropriado:

Todos os outros tĂłpicos funcionam com o mesmo princĂpio.
* Se, no entanto, algo deu errado, é necessário, estando no modo de controle do robô, clique em três faixas paralelas no canto superior esquerdo da tela do aplicativo. Falha nas "Preferências" e selecione "Tópicos":
Em seguida, clicando no tĂłpico apropriado, registre o caminho (Valor):
Vamos ver o que o lidar está no aplicativo.
No robĂ´, execute o nĂł lidar:
roslaunch rplidar_ros rplidar.launch
Se vocĂŞ entrar novamente no aplicativo, na tela de controle do robĂ´, veremos pontos caracterĂsticos e uma seta azul:
* Você também pode andar inclinando o telefone em diferentes direções e selecionando o Modo de controle de inclinação:
Existem outros modos de "dirigir", mesmo com a capacidade de indicar um ponto no mapa, diretamente no telefone, mas como o mapa é muito arbitrário, a viagem também será condicional, ou seja, não vai a lugar nenhum.
Com tópicos de movimento, como câmeras (não consideraremos isso), tudo fica mais ou menos claro, trataremos de gps.
Há pouco sentido na sala dos gps, mas é interessante ver como funciona.
Para testes, qualquer apito de GPS é adequado. Minha opção é a seguinte -
Para fazĂŞ-lo funcionar, primeiro vocĂŞ precisa instalar o nĂł gps no raspberry.
Mas primeiro, vamos verificar se o apito do GPS funciona, caso contrário, todas as outras conversas serão a favor dos pobres.
Colocamos pacotes em framboesa:
sudo apt-get install gpsd
sudo apt-get install gpsd-clients
Verifique se o apito do GPS está definido entre os dispositivos USB:
lsusb

Agora, verifique se o GPS está aceitando algo:
gpscat -s 9600 /dev/ttyACM1
* Em vez de ttyACM1, pode haver outros valores (ttyACM0, ttyUSB0, ttyAMA0), dependendo da porta em que o apito do GPS está ativado.
As mensagens GPS piscarĂŁo no terminal:
Dados mais estruturados (agradáveis ​​aos olhos) podem ser obtidos da seguinte maneira:
gpsmon /dev/ttyACM1
* as coordenadas não são minhas, o que é estranho. Não está claro com o que isso está conectado.
Instale o nĂł gps no raspberry:
sudo apt-get install libgps-dev
cd catkin_ws/src
git clone https://github.com/ros-drivers/nmea_navsat_driver
git clone https://github.com/ros/roslint
cd /home/pi/rosbots_catkin_ws
catkin_make
Agora que montamos o nĂł do GPS, execute-o (no robĂ´):
rosrun nmea_navsat_driver nmea_serial_driver _port:=/dev/ttyACM1 _baud:=9600
Se você observar os tópicos (em outro terminal do robô), poderá ver que o telefone está inscrito em um tópico e a publicação de um nó gps vai para outro:
Altere o tópico de recebimento no telefone para / fix fix através das configurações descritas acima.
Após a alteração, a publicação e recepção em um tópico:
E no telefone vocĂŞ pode observar as coordenadas:
Odometria (tĂłpico / odom).
Se vocĂŞ executar o nĂł de odometria de postagens anteriores, quando o robĂ´ se mover, tambĂ©m será possĂvel obter as velocidades linear e angular do robĂ´ no telefone (as velocidades nĂŁo sĂŁo calculadas usando gps).
No robĂ´:
cd /home/pi/rosbots_catkin_ws/src/rosbots_driver/scripts/rosbots_driver
python diff_tf.py
No telefone: