[PYTHON] [ROS] Comment écrire un éditeur et un abonné sur un nœud

introduction

Lors de l'utilisation de ROS, je voulais communiquer les données de mesure en tant que sujet à partir du nœud fonctionnant en tant qu'abonné, mais j'avais des problèmes car je ne trouvais pas de moyen d'écrire l'abonné et l'éditeur dans un seul programme. (Il y a une forte possibilité que la puissance de recherche de Google soit faible), je vais le résumer pour approfondir la compréhension de ROS. Je viens de commencer à l'utiliser récemment, et je pense que c'est peut-être faux, donc si vous le connaissez, veuillez le signaler. informatif.

Qu'est-ce que ROS (Robot Operating System)?

Middleware qui fournit des bibliothèques et des outils pour prendre en charge la création d'applications robotiques. Plus précisément, la communication entre les robots sera plus facile.

Communication Pub & Sub

Dans ROS, les exécutables connectés au réseau ROS sont appelés «nœuds», et des messages appelés «sujets» sont échangés entre les nœuds. Le nœud qui remet le message est appelé le serveur de publication et le nœud qui reçoit le message est appelé l'abonné. PubSub通信.png

Environnement d'exécution

Exemple de programme de l'éditeur

talker.py


#!/usr/bin/env python
# license removed for brevity
import rospy
from std_msgs.msg import String #Importez le type de données à utiliser

def talker():
    #Créer un éditeur('Nom du sujet',Moule,Taille)
    pub = rospy.Publisher('chatter', String, queue_size=10)
    #Déclarer le nom du nœud
    rospy.init_node('talker', anonymous=True)
    #Déclarer le cycle de la boucle
    rate = rospy.Rate(10) # 10hz
    
    while not rospy.is_shutdown():
        #Remplissez les données à publier
        hello_str = "hello world %s" % rospy.get_time()
        #Afficher les données à publier dans le terminal
        rospy.loginfo(hello_str)
        #Publier des données
        pub.publish(hello_str)
        rate.sleep()

  if __name__ == '__main__':
       try:
         talker()
     except rospy.ROSInterruptException:
         pass

Cité dans Writing a Simple Publisher and Subscriber (Python), explication supplémentaire

Exemple de programme pour les abonnés

listener.py


#!/usr/bin/env python
import rospy
from std_msgs.msg import String #Importez le type de données à utiliser

def callback(data):
    #Afficher les données reçues dans le terminal
    #Les données sont des données.Reçu dans les données
    rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)
     
def listener():
    #Déclarer le nom du nœud
    rospy.init_node('listener', anonymous=True)
    #Créer un abonné('Nom du sujet',Moule,fonction de rappel)
    rospy.Subscriber("chatter", String, callback)
    #Continuez à appeler la fonction de rappel
    rospy.spin()

 if __name__ == '__main__':
    listener()

Cité dans Writing a Simple Publisher and Subscriber (Python), explication supplémentaire

Programmes d'éditeur et d'abonné

Juste parce que je n'utilise pas rospy.spin () (parce qu'il s'arrête dans l'état de veille de la fonction de rappel), j'ai l'impression de les avoir collés ensemble, mais je m'inquiétais à ce sujet pendant environ deux jours. Lol.

controller.py


#!/usr/bin/env python
# coding: utf-8
import rospy
from std_msgs.msg import String

def callback(data):
    #Afficher les données reçues dans le terminal
    #Les données sont des données.Reçu dans les données
    rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)
      
def controller():
    #Déclarer le nom du nœud
    rospy.init_node('controller', anonymous=True)
    #Créez un abonné. Chargez le sujet.
    sub = rospy.Subscriber('listener', String, callback)
    #Créer un éditeur('Nom du sujet',Moule,Taille)
    pub = rospy.Publisher('talker', String, queue_size=1)
    #Période de boucle.
    rate = rospy.Rate(10)
    
    while not rospy.is_shutdown():
        #Remplissez les données à publier
        hello_str = "hello world %s" % rospy.get_time()
        #Afficher les données à publier dans le terminal
        rospy.loginfo(hello_str)
        #Publier des données
        pub.publish(hello_str)
        rate.sleep()
    
if __name__ == '__main__':
    try:
        controller()
    except rospy.ROSInitException:
        pass

référence

Recommended Posts

[ROS] Comment écrire un éditeur et un abonné sur un nœud
Comment écrire des commentaires pydoc et multi-lignes
Comment écrire un test unitaire pour l'extraction d'URL dans GAE / P
Comment définir Decorator et Decomaker avec une seule fonction
Comment installer Git GUI et Gitk sur CentOS
XPath Basics (2) - Comment écrire XPath
Comment partager le presse-papiers Vim avec OS sur Ubuntu 18.04.3 LTS
[Python] Comment écrire une instruction if en une phrase.
Comment intégrer Apache httpd 2.4 et Tomcat 9 sur Cent OS 8
Comment s'inscrire auprès de pypi
Comment installer OpenCV sur Cloud9 et l'exécuter en Python
Repeated @ app.callback dans Dash Comment écrire correctement l'entrée et l'état
Comment écrire du code pour accéder à python dashDB sur Bluemix ou local
Comment exécuter Jupyter et Spark sur Mac avec des paramètres minimaux
Comment installer des pandas sur EC2 (Comment gérer MemoryError et PermissionError)
Comment afficher la résolution PDF et des informations détaillées sur Linux (pdfinfo)
Comment bloquer les publicités gratuitement sur les applications iPhone et iPad
[ROS2] Comment décrire le remappage et les paramètres au lancement au format python
Configurer un nœud pour faire MNIST sur ROS à l'aide de Tensorflow
[FSL] Comment décoller Atlas un par un et les séparer
Comment installer mysql-connector-python sur Mac
Comment installer et utiliser Tesseract-OCR
Comment écrire sobrement avec des pandas
Comment utiliser Dataiku sous Windows
Réutilisation du flacon Comment écrire du HTML
Remarques sur l'utilisation de pywinauto
Comment installer Graph-Tool sur macOS
Comment installer VMware-Tools sur Linux
Comment installer pycrypto sur Windows
Remarques sur l'utilisation des featuretools
Comment installer OpenCV sur Mac
Comment exécuter matplotlib sur heroku
Comment convertir 0,5 en 1056964608 en un seul coup
Comment installer PyPy sur CentOS
Comment utiliser l'homebrew dans Debian
Malentendu sur la façon de connecter CNN
Comment installer TensorFlow sur CentOS 7
Comment installer et configurer Blackbird
Comment installer et utiliser Graphviz
Comment écrire une image de base Docker
Comment écrire un fichier wsgi.py indépendant de l'environnement Django1.9
Comment installer Maven sur CentOS
Comment installer Music 21 sur Windows
Résoudre des puzzles et 15 puzzles
Comment écrire le bon shebang dans les scripts Perl, Python et Ruby
Installez le module ROS et ROS pour Roomba sur Raspberry Pi 3 et essayez de l'exécuter
Essayez d'écrire du code python pour générer du code go - Essayez de porter JSON-to-Go et ainsi de suite
Comment enregistrer une seule donnée sur l'écran de gestion de Django
[Linux] Comment subdiviser des fichiers et des dossiers
Comment empaqueter et distribuer des scripts Python
Comment installer aws-session-manager-plugin sur Manajro Linux
Qiita (1) Comment écrire un nom de code
Comment lire pydoc sur l'interpréteur python
Comment installer drobertadams / toggl-cli sur Mac
Comment définir optuna (comment écrire un espace de recherche)
[Kivy] Comment installer Kivy sur Windows [Python]