ROBOWORKS Robofleet Orin Nano x3 ROS Robot
RESUMO
Este documento explica principalmente o uso do paquete de funcións de formación de varios robots chamado wheeltec_multi.
Este documento divídese en catro partes:
- A primeira parte trata principalmente da introdución do método de formación de múltiples robots;
- a segunda parte describe principalmente a configuración de comunicación multi-máquina ROS, incluíndo a construción de ROS de comunicación multi-máquina e os problemas que se poden atopar no proceso de comunicación ROS;
- a terceira parte describe principalmente os pasos de operación da sincronización horaria de varias máquinas;
- a cuarta parte expón o uso específico do paquete de funcións de formación de varias máquinas.
O propósito deste documento é unha introdución ao sistema robótico multiaxente e permite ao usuario iniciar rapidamente o proxecto de formación de robots múltiples.
INTRODUCIÓN AOS ALGORITMOS MULTIAXENTES
Algoritmos de formación de múltiples axentes
Este paquete ROS presenta un problema típico de multiaxentes no control colaborativo durante un impulso de formación. Este tutorial senta as bases para o desenvolvemento futuro deste tema. O algoritmo de control de formación refírese a un algoritmo que controla varios axentes para formar unha formación específica para realizar unha tarefa. A colaboración refírese á cooperación entre múltiples axentes utilizando unha determinada relación de restrición para completar unha tarefa. Tome a unidade de formación de varios robots como exampa colaboración significa que varios robots forman xuntos unha formación desexada. A súa esencia é unha certa relación matemática que se satisface entre as posicións de cada robot. Os métodos de formación divídense principalmente en control de formación centralizado e control de formación distribuído. Os métodos de control de formación centralizados inclúen principalmente o método de estrutura virtual, o método de teoría gráfica e o método predictivo de modelos. Os métodos de control de formación distribuídos inclúen principalmente o método líder-seguidor, o método baseado no comportamento e o método de estrutura virtual.
Este paquete ROS aplica o método líder-seguidor no método de control de formación distribuído para executar a unidade de formación multi-robot. Un robot da formación é designado como líder, e outros robots son designados como escravos para seguir o líder. O algoritmo utiliza a traxectoria de movemento do robot líder para establecer as coordenadas que deben seguir os seguintes robots con certa dirección e velocidade. Ao corrixir as desviacións de posición das coordenadas de seguimento, os seguidores eventualmente reducirán a cero a desviación entre o seguidor e as coordenadas de seguimento esperadas para acadar os obxectivos da formación. Deste xeito, o algoritmo é relativamente menos complicado.
Algoritmos de evitación de obstáculos
Un algoritmo común para evitar obstáculos é o método de campo potencial artificial. O movemento do robot nun ambiente físico considérase como un movemento nun campo de forza artificial virtual. O obstáculo máis próximo é identificado por LiDAR. O obstáculo proporciona un campo de forza de repulsión para xerar repulsión ao robot e o punto obxectivo proporciona un campo gravitatorio para xerar forza gravitatoria ao robot. Deste xeito, controla o movemento do robot baixo a acción combinada de repulsión e atracción.
Este paquete ROS é unha mellora baseada no método de campo potencial artificial. En primeiro lugar, o algoritmo de formación calcula a velocidade lineal e angular do seguidor Slave. A continuación, aumenta ou diminúe a velocidade lineal e angular segundo os requisitos de evitación de obstáculos. Cando a distancia entre o seguidor do escravo e o obstáculo está máis preto, a forza de repulsión do obstáculo ao seguidor do escravo é maior. Mentres tanto, o cambio da velocidade lineal e as variacións da velocidade angular son maiores. Cando o obstáculo está máis preto da fronte do seguidor do escravo, a repulsión do obstáculo para o seguidor do escravo faise maior (a repulsión frontal é a máis grande e a repulsa lateral é a máis pequena). Como resultado, as variacións da velocidade lineal e da velocidade angular son maiores. A través do método de campo de potencial artificial, mellora unha solución
cando un robot podía deixar de responder diante dun obstáculo. Isto serve para evitar mellor os obstáculos.
CONFIGURACIÓN DE COMUNICACIÓN MULTI-AXENTE
A comunicación multiaxente é un dos pasos clave para completar unha formación multi-robot. Cando se descoñecen as posicións relativas de varios robots, os robots necesitan compartir a información entre eles mediante a comunicación para facilitar o establecemento de conexións. A arquitectura distribuída ROS e as comunicacións de rede son moi potentes. Non só é conveniente para a comunicación entre procesos, senón tamén para a comunicación entre diferentes dispositivos. A través da comunicación de rede, todos os nodos poden executarse en calquera ordenador. As tarefas principais como o procesamento de datos complétanse no lado do host. As máquinas escravas son as encargadas de recibir os datos ambientais recollidos por varios sensores. O host aquí é o xestor que executa o nodo mestre en ROS. O marco de comunicación multiaxente actual é a través dun xestor de nodos e un xestor de parámetros para xestionar as comunicacións entre varios robots.
Os pasos para configurar comunicacións multiaxente
Configure os controis ROS na mesma rede
Hai dúas formas de configurar os controis ROS mestre/esclavo na mesma rede.
Opción 1:
O anfitrión principal crea un wifi local executando o xestor de nodos mestres. Xeralmente, un dos robots que se designa como mestre crea esta rede wifi. Outros robots ou máquinas virtuais únense a esta rede wifi como escravos.
Opcións 2:
A rede wifi local é proporcionada por un router de terceiros como centro de transmisión de información. Todos os robots están conectados ao mesmo enrutador. O router tamén se pode usar sen conexión a Internet. Selecciona un dos robots como mestre e executa o xestor de nodos mestre. Os outros robots son designados como escravos e executan o xestor de nodos mestres desde o mestre.
A decisión sobre a opción elixir depende dos requisitos do proxecto. Se o número de robots que precisan comunicarse non é grande, recoméndase a opción 1 xa que aforra custos e é fácil de configurar. Cando o número de robots é grande, recoméndase a opción 2. A limitación da potencia de cálculo do control mestre ROS e o ancho de banda wifi limitado a bordo poden causar facilmente atrasos e interrupcións na rede. Un enrutador pode solucionar estes problemas facilmente.
Teña en conta que ao realizar unha comunicación multiaxente, se a máquina virtual se usa como escrava ROS, o seu modo de rede debe configurarse no modo ponte.
Configure as variables de ambiente mestre/esclavo
Despois de que todos os mestres ROS estean todos na mesma rede, hai que configurar as variables de ambiente para a comunicación multiaxente. Esta variable de ambiente está configurada no .bashrc file no directorio principal. Execute o comando gedit ~/.bashrc para lanzalo. Teña en conta que tanto o .bashrc files do mestre e do escravo en comunicación multiaxente deben configurarse. O que hai que cambiar son os enderezos IP ao final do file. As dúas liñas de son ROS_MASTER_URI e ROS_HOSTNAME, como se mostra na Figura 2-1-4. O ROS_MASTER_URI e o ROS_HOSTNAME do servidor ROS son IP locais. O ROS_MASTER_URI no escravo ROS .bashrc file debe cambiarse ao enderezo IP do host mentres ROS_HOSTNAME segue sendo un enderezo IP local.
A comunicación multi-máquina de ROS non está restrinxida pola versión de lanzamento de ROS. No proceso de comunicación multimáquina, hai que ter en conta o seguinte:
- O funcionamento do programa escravo ROS depende do programa mestre ROS do dispositivo mestre ROS.
O programa mestre ROS debe iniciarse primeiro no dispositivo mestre antes de executar o programa escravo no dispositivo escravo. - Os enderezos IP das máquinas mestra e escrava na comunicación entre varias máquinas deben estar na mesma rede. Isto significa que o enderezo IP e a máscara de subrede están baixo a mesma rede.
- ROS_HOSTNAME na configuración do contorno file Non se recomenda .bashrc para usar localhost. Recoméndase utilizar un enderezo IP específico.
- No caso de que o enderezo IP do escravo non estea configurado correctamente, o dispositivo escravo aínda pode acceder ao mestre ROS pero non pode introducir información de control.
- Se a máquina virtual participa na comunicación multiaxente, o seu modo de rede debe configurarse no modo ponte. Non se pode seleccionar a IP estática para a conexión de rede.
- A comunicación entre varias máquinas non pode view ou subscríbete a temas de tipo de datos de mensaxe que non existen localmente.
- Podes usar a demostración de simulación de Little Turtle para verificar se a comunicación entre os robots é exitosa:
a. Corre do mestre
roscore #lanzamento dos servizos ROS
rosrun turtlesim turtlesim_node #lanzamento da interface turtlesim
b. Fuxe do escravo
rosrun turtlesim turtle_teleop_key #lanzamento do nodo de control do teclado para turtlesim
Se podes manipular os movementos da tartaruga desde o teclado do escravo, significa que a comunicación mestre/escravo estableceuse con éxito.
Conexión wifi automática en ROS
Os seguintes procedementos explican como configurar o robot para conectarse automaticamente á rede host ou á rede de enrutadores.
Configuración automática de conexión Wifi para Jetson Nano
- Conecte Jetson Nano a través da ferramenta remota VNC ou directamente á pantalla do ordenador. Fai clic na icona wifi na esquina superior dereita e fai clic en "Editar conexións".
- Fai clic no botón + en Conexións de rede:
- Na xanela "Escolle un tipo de conexión", fai clic no menú despregable e fai clic no botón "Crear...":
- No Panel de control, fai clic na opción Wifi. Introduza o nome da wifi para conectarse nos campos "Nome da conexión" e SSID. Seleccione "Cliente" no menú despregable "Modo" e seleccione "wlan0" no menú despregable "Dispositivo".
- No Panel de control, faga clic na opción "Xeral" e marque "Conectarse automaticamente a esta rede...". Establece a prioridade de conexión en 1 na opción "Prioridade de conexión para a activación automática". Marque a opción "Todos os usuarios poden conectarse a esta rede". Cando a opción está definida en 0 en "Prioridade de conexión para a activación automática" para outros wifi, isto significa que esta é a rede wifi preferida no pasado.
- Fai clic na opción "Seguridade Wi-Fi" no Panel de control. Seleccione "WPA & WPA2 Personal" no campo "Seguridade". A continuación, introduza o contrasinal de wifi
Nota:
Se o robot non pode conectarse automaticamente á rede wifi despois de iniciarse cando a prioridade wifi está configurada en 0, pode ser causado por un problema de sinal wifi débil. Para evitar este problema, pode optar por eliminar todas as opcións wifi que se conectaron no pasado. Mantén só a rede wifi creada polo host ou o router.
Fai clic na opción "Configuración IPv4" no panel de control de configuración de rede. Seleccione a opción "Manual" no campo "Método". A continuación, faga clic en "Engadir", introduza o enderezo IP da máquina escrava no campo "Enderezo". Encha "24" no campo "Máscara de rede". Encha o segmento de rede IP en "Gateway". Cambia os tres últimos díxitos do segmento de rede IP a "1". O obxectivo principal deste paso é corrixir o enderezo IP. Despois de completar isto por primeira vez, o enderezo IP permanecerá inalterado cando se conecte á mesma WIFI posteriormente.
Despois de configurar todas as opcións, fai clic en "gardar" para gardar a configuración. Despois de que o gardado teña éxito, o robot conectarase automaticamente á rede do host ou do enrutador cando estea acendido.
Nota:
- O enderezo IP definido aquí debe ser o mesmo que o enderezo IP definido no .bashrc file na Sección 2.1.
- O enderezo IP do mestre e de cada escravo debe ser único.
- Os enderezos IP mestre e escravo deben estar no mesmo segmento de rede.
- Debes esperar a que o host ou enrutador envíe o sinal WiFi antes de que o robot escravo poida acenderse e conectarse automaticamente á rede WiFi.
- Despois de configurar a configuración, se o robot non pode conectarse automaticamente á WiFi cando estea acendido, conecte e desconecte a tarxeta de rede e intente conectarse de novo.
Configuración automática de conexión wifi para Raspberry Pi
O procedemento para Raspberry Pi é o mesmo que o Jetson Nano.
Configuración automática de conexión Wifi para Jetson TX1
A configuración en Jetson TX1 é case a mesma que en Jetson Nano con unha excepción de que Jetson TX1 debería seleccionar o dispositivo "wlan1" en "Dispositivo" no panel de control de configuración da rede.
CONFIGURACIÓN DE SINCRONIZACIÓN MULTI-AXENTE
No proxecto de formación multiaxente, a configuración de sincronización horaria multiaxente é un paso crucial. No proceso de formación, provocaranse moitos problemas debido ao tempo do sistema asíncrono de cada robot. A sincronización horaria multiaxente divídese en dúas situacións, a saber, a situación en que tanto os robots mestres como os escravos están conectados á rede e a situación en que ambos están desconectados da rede.
Conexión de rede mestre/escravo exitosa
Despois de configurar a comunicación multiaxente, se as máquinas mestra e escrava poden conectarse correctamente á rede, sincronizarán automaticamente o tempo da rede. Neste caso, non se precisan máis accións para lograr a sincronización horaria.
Solución de problemas de desconexión de rede
Despois de configurar a comunicación multiaxente, se os dispositivos mestre e escravo non poden conectarse correctamente á rede, é necesario sincronizar manualmente a hora. Usaremos o comando data para completar a configuración da hora.
En primeiro lugar, instale a ferramenta de terminación. Desde a ferramenta de terminación, use a ferramenta de división de ventás para colocar os terminais de control do mestre e do escravo na mesma fiestra de terminal (faga clic co botón dereito para configurar unha ventá dividida e inicie sesión nas máquinas mestra e escrava mediante ssh en ventás diferentes) .
sudo apt-get install terminator # Descargar terminator para dividir a xanela do terminal
Fai clic no botón da parte superior esquerda, selecciona a opción [Emitir a todos]/[Emitir todo], introduce o seguinte comando. A continuación, use a ferramenta de terminación para configurar a mesma hora para o mestre e o escravo.
sudo date -s "2022-01-30 15:15:00" # Configuración manual da hora
PAQUETE ROS MULTI-AXENTE
Introdución ao paquete ROS
Configurar o nome do escravo
No paquete de funcións wheeltec_multi, é necesario establecer un nome único para cada robot escravo para evitar erros. Por example, número 1 para escravo1 e número 2 para escravo2 etc.
O propósito de establecer diferentes nomes é agrupar os nodos en execución e distinguilos por diferentes espazos de nomes. Por example, o tema de radar do escravo 1 é: /slave1/scan, e o nodo LiDAR do escravo 1 é: /slave1/laser.
Configura as coordenadas dos escravos
O paquete wheeltec_multi pode implementar formacións personalizadas. Cando se precisen diferentes formacións, basta con modificar as coordenadas desexadas dos robots escravos. Slave_x e slave_y son as coordenadas x e y do escravo co mestre como punto de referencia orixinal. A fronte do mestre é a dirección positiva da coordenada x e o lado esquerdo é a dirección positiva da coordenada y. Despois de completar a configuración, emitirase unha coordenada TF escravo1 como a coordenada esperada do escravo.
Se hai un mestre e dous escravos, pódese establecer a seguinte formación:
- Formación horizontal: pode configurar as coordenadas do escravo da esquerda en: slave_x:0, slave_y: 0.8 e as coordenadas do escravo da dereita en: slave_x:0, slave_y:-0.8.
- Formación da columna: as coordenadas dun escravo pódense establecer en: slave_x:-0.8, slave_y:0 e as coordenadas do outro escravo poden establecerse en: slave_x:-1.8, slave_y:0.
- Formación triangular: as coordenadas dun escravo pódense establecer en: slave_x:-0.8, slave_y: 0.8, e as coordenadas do outro escravo poden establecerse en: slave_x:-0.8, slave_y:-0.8.
Outras formacións pódense personalizar segundo sexa necesario.
Nota
A distancia recomendada entre os dous robots establécese en 0.8 e recoméndase que non sexa inferior a 0.6. Recoméndase establecer a distancia entre os escravos e o mestre por debaixo de 2.0. Canto máis lonxe estea do mestre, maior será a velocidade lineal do escravo cando este xira. Debido á limitación da velocidade máxima, a velocidade do escravo desviarase se non cumpre os requisitos. A formación do robot volverase caótica.
Inicialización da posición de escravo
A posición inicial do escravo está nas coordenadas esperadas por defecto. Antes de executar o programa, só tes que colocar o robot escravo preto das súas coordenadas esperadas para completar a inicialización.
Esta función é implementada polo nodo pose_setter no file chamado turn_on_wheeltec_robot.launch no paquete wheeltec_multi, como se mostra na Figura 4-1-3.
Se o usuario quere personalizar a posición inicial do escravo, só precisa establecer os valores slave_x e slave_y como se mostra na Figura 4-1-4 en wheeltec_slave.launch. Os valores slave_x e slave_y pasaranse a turn_on_wheeltec_robot.launch e asignaranse ao nodo pose_setter. Simplemente coloque o robot nunha posición personalizada antes de executar o programa.
Configuración de posición
Nunha formación multiaxente, o primeiro problema a resolver é o posicionamento do mestre e do escravo. O mestre construirá primeiro un mapa 2D. Despois de crear e gardar o mapa, executa o paquete de navegación 2D e utiliza o algoritmo de posicionamento adaptativo de Monte Carlo (posición amcl) no paquete de navegación 2D para configurar o posicionamento do mestre.
Dado que o mestre e os escravos están na mesma rede e comparten o mesmo xestor de nodos, o mestre lanzou o mapa desde o paquete de navegación 2D, todos os escravos poden usar o mesmo mapa baixo o mesmo xestor de nodos. Polo tanto, o escravo non necesita crear un mapa. En wheeltec_slave.launch, executa o posicionamento Monte Carlo (posicionamento amcl), os escravos poden configurar as súas posicións usando o mapa creado polo mestre.
Como crear formación e manter a formación
No proceso de movemento de formación, o movemento mestre pódese controlar mediante Rviz, teclado, control remoto e outros métodos. O escravo calcula a súa velocidade a través do nodo slave_tf_listener para controlar o seu movemento e acadar o obxectivo da formación.
O nodo slave_tf_listener limita a velocidade do escravo para evitar a velocidade excesiva polo cálculo do nodo, o que provocará unha serie de impactos. O valor específico pódese modificar en wheeltec_slave.launch.
Os parámetros relevantes do algoritmo de formación son os seguintes:
Evitación de obstáculos na formación
Nunha formación multiaxente, o mestre pode usar o nodo move_base para evitar obstáculos. Non obstante, a inicialización do escravo non usa move_base node. Neste punto, o nodo multi_avoidance debe ser chamado no programa escravo. O nodo de evitación de obstáculos está activado por defecto no paquete. Se é necesario, a evitación pódese configurar en "falso" para desactivar o nodo de evitación de obstáculos.
Na figura seguinte móstranse algúns parámetros relevantes do nodo de evitación de obstáculos, onde safe_distance é o límite de distancia segura do obstáculo e danger_distance é o límite de distancia perigosa do obstáculo. Cando o obstáculo está dentro de safe_distance e danger_distance, o escravo axusta a súa posición para evitar o obstáculo. Cando o obstáculo estea dentro da danger_distance, o escravo afastarase do obstáculo.
Procedemento Operativo
Introduza o comando de execución
Preparacións antes de comezar a formación de múltiples axentes:
- O mestre e o escravo conéctanse á mesma rede e configuran correctamente a comunicación multiaxente
- O mestre constrúe un mapa 2D con antelación e gárdao
- O mestre colócase no punto de inicio do mapa e o escravo colócase preto da posición de inicialización (a posición de formación de escravos por defecto)
- Despois de iniciar sesión en Jetson Nano/Raspberry Pi remotamente, realice a sincronización horaria.
sudo date -s "2022-04-01 15:15:00"
Paso 1: Abre o mapa 2D desde o mestre.
roslaunch turn_on_wheeltec_robot navigation.launch
Paso 2: Executar o programa de formación de todos os escravos.
roslaunch wheeltec_multi wheeltec_slave.launch
Paso 3: Abre o nodo de control do teclado desde o mestre ou usa o joystick para controlar a distancia o movemento principal.
roslaunch wheeltec_robot_rc keyboard_teleop.launch
Paso 4: (Opcional) Observe os movementos do robot desde Rviz.
rviz
Nota
- Asegúrese de completar a operación de sincronización horaria antes de executar o programa.
- Ao controlar o mestre dunha formación multiaxente, a velocidade angular non debe ser demasiado rápida. A velocidade lineal recomendada é de 0.2 m/s, o grao de velocidade angular inferior a 0.3 rad/s. Cando o mestre está facendo un xiro, canto máis lonxe estea o escravo do mestre, maior será a velocidade lineal necesaria. Debido ao límite da velocidade lineal e da velocidade angular no paquete, cando o coche escravo non pode alcanzar a velocidade necesaria, a formación será caótica. En xeral, a velocidade lineal excesiva pode danar facilmente o robot.
- Cando o número de escravos é superior a un, debido ao ancho de banda wifi limitado do host ROS, é fácil provocar atrasos significativos e desconexión da comunicación multiaxente. Usar un enrutador pode resolver ben este problema.
- A árbore TF da formación multi-robot (2 escravos) é: rqt_tf_tree
- O diagrama de relación de nodos da formación multirobot (2 escravos) é: rqt_graph
Documentos/Recursos
![]() |
ROBOWORKS Robofleet Orin Nano x3 ROS Robot [pdfManual do usuario Orin Nano x3, Robofleet ROS Robot, Robofleet ROS, Robot, Robofleet Orin Nano x3 ROS Robot, Robofleet Orin Nano x3, Orin Nano x3 ROS Robot, Orin Nano x3 |