Notas de estudio ROS 6 (Implementación de programación del suscriptor)

Modelo de tema

La siguiente imagen es de las "21 conferencias sobre la introducción de ROS" de Gu Yue.
Inserte la descripción de la imagen aquí

ROS Master gestiona dos nodos, el editor turtlesim y el suscriptor Pose Listener se comunican a través de la transmisión del tema / turtle1 / pose turtlesim :: mensajes tipo Pose, esta sección implementa principalmente el suscriptor Suscriptor

Crear código de suscriptor (C ++)

Introduce el archivo de encabezado

#include <ros/ros.h>
#include <turtlesim/Pose.h>
//引入消息类型头文件

Función principal

int main(int argc, char **argv)
{
    
    
	//初始化ROS节点
	ros::init(argc, argv, "pose_subscriber");
	
	//创建节点句柄
	ros::NodeHandle n;
	
	//创建一个subscriber,订阅名为/turtle1/pose的topic,注册回调函数poseCallback
	ros::Subscriber pose_sub = n.subscribe("/turtle1/pose", 10, poseCallback);
	
	//循环等待回调函数
	ros::spin();
	
	return 0;
}

Llamar de vuelta

void poseCallback(const turtlesim::Pose::ConstPtr& msg)
{
    
    
	//将接收到的消息打印出来
	ROS_INFO("Turtle pose : x:%0.6f, y:%.6f", msg->x, msg->y);
}

Código completo

/**
 * 该例程将订阅/turtle1/pose话题,消息类型为turtlesim::Pose
 */
 
#include <ros/ros.h>
#include <turtlesim/Pose.h>
//引入消息类型头文件

//接收到订阅消息后,会进入回调函数
void poseCallback(const turtlesim::Pose::ConstPtr& msg)
{
    
    
	//将接收到的消息打印出来
	ROS_INFO("Turtle pose : x:%0.6f, y:%.6f", msg->x, msg->y);
}

int main(int argc, char **argv)
{
    
    
	//初始化ROS节点
	ros::init(argc, argv, "pose_subscriber");
	
	//创建节点句柄
	ros::NodeHandle n;
	
	//创建一个subscriber,订阅名为/turtle1/pose的topic,注册回调函数poseCallback
	ros::Subscriber pose_sub = n.subscribe("/turtle1/pose", 10, poseCallback);
	
	//循环等待回调函数
	ros::spin();
	
	return 0;
}

Proceso de peinado

  • Inicializar el nodo ROS
  • Crea suscriptores, suscríbete a los temas requeridos
  • Espere el mensaje del tema en un bucle e ingrese a la función de devolución de llamada después de recibir el mensaje
  • Procesamiento completo de mensajes en la función de devolución de llamada

Configurar reglas de compilación de códigos de suscriptor

Igual que el método de configuración en la Nota 5:
Utilice:

add_executable(pose_subscriber src/pose_subscriber.cpp)
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})
  • Configure el código que se compilará y el archivo ejecutable generado
  • Configurar la biblioteca de enlaces

Compilar y ejecutar el suscriptor

$ cd~/catkin_ws
$ catkin_make
$ source devel/setup.bash
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun learning_topic velocity_publisher
$ rosrun learning_topic pose_subscriber

Puede observar el resultado de salida:
Inserte la descripción de la imagen aquí

Código de suscriptor (Python)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 该例程将订阅/turtle1/pose话题,消息类型turtlesim::Pose

import rospy
from turtlesim.msg import Pose

def poseCallback(msg):
    rospy.loginfo("Turtle pose: x:%0.6f, y:%0.6f", msg.x, msg.y)

def pose_subscriber():
	# ROS节点初始化
    rospy.init_node('pose_subscriber', anonymous=True)

	# 创建一个Subscriber,订阅名为/turtle1/pose的topic,注册回调函数poseCallback
    rospy.Subscriber("/turtle1/pose", Pose, poseCallback)

	# 循环等待回调函数
    rospy.spin()

if __name__ == '__main__':
    pose_subscriber()


Parte del código de este artículo proviene de Gu Yue "21 conferencias sobre la introducción de ROS"

Enlace anterior

Notas de estudio de ROS 5 (implementación de programación de Publisher Publisher)
Notas de estudio de ROS 4 (creación de espacio de trabajo y paquete de funciones)
Notas de estudio de ROS 3 (uso de herramientas de línea de comandos de
ROS ) Notas de estudio de ROS 2 (conceptos básicos de ROS )
Notas de estudio de ROS 1 (Operación básica del sistema Linux)

Supongo que te gusta

Origin blog.csdn.net/weixin_44911075/article/details/114210609
Recomendado
Clasificación