Contrôle du robot auto-équilibré EduMip à l'aide du joystick PS4 Dualshock 4 via ROS


Ceci est un exemple simple de l'utilisation de ROS pour connecter plusieurs appareils sur un réseau et envoyer des données de contrôle.

Sous la coupe à la fin se trouve une démonstration vidéo du contrôle du robot à partir du joystick.

Nous avons besoin d'un joystick lui-même, vous pouvez le retirer de votre PS4 ou l'acheter dans un magasin. J'ai acheté dualshock 4 v2, la première version devrait également fonctionner.

Vous avez également besoin d'un bluetooth sur votre ordinateur avec ROS, dans la documentation du pilote, recommandez les adaptateurs USB blutooth version 2.1+. J'ai parfaitement fonctionné avec l'adaptateur intégré à l'ordinateur portable. Vous pouvez également connecter un joystick et juste un câble USB.

Ensuite, dans Ubuntu avec ROS, vous devez installer le pilote conformément aux instructions .

Après avoir installé les pilotes et connecté le joystick via Bluetooth, nous lançons l'utilitaire graphique jstest-gtk et constatons que nous avons deux joysticks, nous avons besoin du second, car il a tous les boutons et sticks.



Étant donné que ROS fonctionne avec joy0 par défaut, nous devons le redéfinir sur joy1:

sudo chmod a+rw /dev/input/js1 rosparam set joy_node/dev "/dev/input/js1" 

Maintenant, nous devons tout connecter en un seul réseau. Un ordinateur portable avec ROS sera maître, et EduMip avec BeagleBone Blue ROS se connectera via wifi à l'ordinateur portable. Les deux appareils se trouvent dans le réseau local du routeur wifi.

Sur votre PC, définissez les variables d'environnement ROS pour rechercher l'assistant ros (roscore) sur le PC avec les commandes .bashrc (ajoutez ces commandes à la fin de votre fichier .bashrc):

 export ROS_MASTER_URI=http://192.168.10.101:11311” <-   ROS IP- ,     ros (roscore). “export ROS_IP=192.168.10.101” <-   ROS IP-   ( ). 

Sur votre EduMIP, définissez les variables d'environnement ROS pour qu'il trouve l'assistant ros (roscore) sur le PC avec les commandes .bashrc (ajoutez ces commandes à la fin de votre fichier .bashrc):

 export ROS_MASTER_URI=http://192.168.10.101:11311” <-   ROS IP- ,     ros (roscore). “export ROS_IP=192.168.10.102” <-   ROS IP-   ( EduMIP). 

Il ne reste plus qu'à écrire un programme qui va lire la position du stick depuis le joystick et l'envoyer au sujet, et le robot pour lire ce sujet.

 // Callback function for joystick pessaged void joyCallback(const sensor_msgs::Joy::ConstPtr& joy) { // X vel driven by left joystick for and aft command_velocity_twist.linear.x = joy->axes[1]; // heading driven by left joysticj left and right command_velocity_twist.angular.z = joy->axes[0]; } // this function gets called at 10Hz to publish the command_velocity array of 2 floats void timerCallback(const ros::TimerEvent& event) { cmd_vel_publisher.publish(command_velocity_twist); } 

Sur votre PC, vous pouvez visualiser visuellement les nœuds et les sujets en exécutant rqt_graph:



Démonstration du contrôle du robot à l'aide du joystick:


Résumé: À l'aide de ROS, vous pouvez créer un système de travail réparti sur plusieurs appareils et, par exemple, effectuer de gros calculs sur l'ordinateur principal, ne laissant que ce qui est nécessaire pour une réponse rapide sur le robot lui-même. BeagleBone Blue possède un sous-système programmable en temps réel (PRU - ICSS).

PRU-ICSS se compose d'un microprocesseur basé sur deux cœurs 32 bits avec une architecture RISC et fonctionnant à une fréquence de 200 MHz. Chaque cœur possède sa propre zone de mémoire, ainsi qu'une zone de mémoire compatible Linux, peut utiliser des broches à usage général situées sur les connecteurs P8-P9 et générer des interruptions.

De plus, le capteur MPU9250 installé sur BeagleBone Blue lors du changement de position peut former une interruption sur laquelle vous pouvez accrocher votre fonction, ce qui est exactement ce qui a été fait dans EduMip.

Si nous parlons de la prochaine étape évolutive, il s'agit de ROS2, où l'une des différences est DDS (Data Distribution Service), qui vous permet de construire un réseau de différents robots et appareils en interaction sur lesquels ROS ne fonctionne pas.

Source: https://habr.com/ru/post/fr413901/


All Articles