J'ai commencé à toucher ROS petit à petit récemment, et lors de l'implémentation d'un nœud en Python, j'aimerais introduire un problème avec ** l'implémentation d'un éditeur et d'un abonné dans un nœud **. J'ai pu le nettoyer en utilisant une classe Python. On suppose que vous avez suffisamment de connaissances ROS et un peu de connaissances orientées objet pour créer vos propres packages.
Un exemple d'implémentation est [ici](https://qiita.com/drafts/d15d52856188120647f4/edit#publish-%E3%81%A8-subscribe%E3%82%92%E5%90%8C%E6%99%82% E3% 81% AB1% E3% 81% A4% E3% 81% AE% E3% 83% 8E% E3% 83% BC% E3% 83% 89% E3% 81% A7% E3% 82% 84% E3% 82% 8B)
Je souhaite m'abonner aux données sur ce sujet, les traiter et les publier sur ce sujet
Je pense qu'il y a quelque chose comme ça. Ai-je découvert une erreur ** Que dois-je faire lorsque j'utilise un abonné et un éditeur en même temps sur un nœud **? J'étais assez accro.
ROS.org et les didacticiels bien présentés pour les éditeurs et les abonnés ressemblent souvent à ceci: Je pense.
Spécifiez le nom du sujet et le type de message avec rospy.Publisher
et publiez avec pub.publish ()
.
talker.py
#importation de rospy et de messages
import rospy
import std_msgs.msg import String
def talker():
pub = rospy.Publisher('chatter', String, queue_size=10)
rospy.init_node('talker', anonymous=True)
#Le traitement continue
pub.publish(data)
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException: pass
Dans rospy.Subscriber
, spécifiez le nom de la rubrique, le type de données et spécifiez la fonction de rappel, et effectuez le traitement post-abonnement avec la fonction de rappel.
listener.py
#importation de rospy et de messages
import rospy
from std_msgs.msg import String
def callback(data):
#abonnement fonction de rappel
def listener():
rospy.init_node('listener', anonymous=True)
rospy.Subscriber("chatter", String, callback)
rospy.spin()
if __name__ == '__main__':
listener()
Après le tutoriel, j'ai compris le mécanisme de Publish and Subscribe.
Ensuite, créons un nouveau nœud et faisons Publier et S'abonner en même temps. J'ai pensé, et quand je l'ai implémenté, devrais-je le publier dans la fonction de rappel de rospy.Subscriber
? J'étais inquiet car je ne pouvais pas nettoyer le code.
À ce moment-là, je regardais cet article et j'ai également vu le code /main.py#L10) Au fait, c'était très beau, donc je l'ai utilisé comme référence. Je n'ai pas utilisé de classes Python dans le didacticiel ci-dessus, mais elles peuvent être bien implémentées.
Créez un éditeur et un abonné avec __init__ ()
et traitez-les dans le flux de la fonction de rappel et de la fonction de publication.
Lorsque vous l'exécutez, créez une classe dans la partie principale et vous avez terminé!
test.py
import rospy
from std_msgs.msg import String
class testNode():
def __init__(self):
#Créer un abonné
self.sub = rospy.Subscriber('topic name', String, self.callback)
#Créer un éditeur
self.pub = rospy.Publisher('topic name', String, queue_size=1)
def callback(self, data):
#Ecrire le traitement de la fonction de rappel
Publisher(data)
def Publisher(self, data):
self.pub.publish(data)
def function(self, data):
#Écrivez s'il y a un autre traitement
return data
if __name__ == '__main__':
rospy.init_node('test_node')
time.sleep(3.0)
node = testNode()
while not rospy.is_shutdown():
rospy.sleep(0.1)
Personnellement, j'ai pensé qu'il était difficile de commencer avec l'orientation objet, mais j'ai pu l'écrire de manière pratique et ordonnée. Certaines personnes ont créé des modèles avec comme celui-ci!
Je n'avais pas les informations que je voulais rechercher pour "ros python publish subscribe même nœud". .. .. Je suis trop nouveau sur ROS, est-ce que je fais quelque chose de mal? Veuillez me faire savoir si quelque chose ne va pas.
Pour l'apprentissage automatique de ROS, j'ai créé un package pour faire passer l'angle de joint avec Topic d'OpenPose Cours ROS 31 principes de base de python Modèle de programme ROS Ecrire un éditeur et un abonné simples (Python)
Recommended Posts