Skip to content

B3: Publishers y Subscribers

Topics disponibles

ros2 topic list
# /cmd_vel        geometry_msgs/TwistStamped
# /odom           nav_msgs/Odometry
# /imu/data       sensor_msgs/Imu
# /joint_states   sensor_msgs/JointState
# /scan           sensor_msgs/LaserScan
# /camera/image_raw  sensor_msgs/Image
# /battery_state  sensor_msgs/BatteryState

Suscribirse a /odom

#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from nav_msgs.msg import Odometry

class OdomSubscriber(Node):
    def __init__(self):
        super().__init__('odom_subscriber')
        self.create_subscription(Odometry, '/odom', self.callback, 10)

    def callback(self, msg):
        x = msg.pose.pose.position.x
        y = msg.pose.pose.position.y
        self.get_logger().info(f'Posición: x={x:.2f} y={y:.2f}')

def main():
    rclpy.init()
    rclpy.spin(OdomSubscriber())
    rclpy.shutdown()

Suscribirse a /imu/data

from sensor_msgs.msg import Imu

class ImuSubscriber(Node):
    def __init__(self):
        super().__init__('imu_subscriber')
        self.create_subscription(Imu, '/imu/data', self.callback, 10)

    def callback(self, msg):
        ax = msg.linear_acceleration.x
        ay = msg.linear_acceleration.y
        az = msg.linear_acceleration.z
        self.get_logger().info(f'Aceleración: ax={ax:.2f} ay={ay:.2f} az={az:.2f}')

Tarea

Crea un nodo que publique en /cmd_vel y a la vez se suscriba a /odom. Detén el robot automáticamente cuando x > 1.0 m.