Robotics StackExchange | Archived questions

ros2 How do I publish exactly one message?

This question is exactly same as https://answers.ros.org/question/11167/how-do-i-publish-exactly-one-message/ but i want to know how to do the same for ROS2

I would like to publish a single message, irrespective of message size. In this case, I would like publish one std_msgs::String message. How do I do that?

Asked by jadebeck49 on 2019-11-18 09:47:15 UTC

Comments

You could try to type

ros2 topic pub -h

in a terminal that has ros2 sourced. You will then see all the options. The -1 or --once flag specifies publish one message and exit.

Asked by MCornelis on 2019-11-18 11:13:10 UTC

So for example something like this, publishes "Hello World" once and then stops.

ros2 topic pub /topic std_msgs/String 'data: Hello World' -1

Or is there a specific reason you want to do it from a node, instead of from terminal?

Asked by MCornelis on 2019-11-18 11:15:11 UTC

Actually i wanted to add this in server client model. Whenever a message is received by the server from any client, it will publish that message to a topic.

Asked by jadebeck49 on 2019-11-20 08:20:42 UTC

Answers

You may use this

ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist '{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}'

Or in python

from time import sleep

import rclpy

from std_msgs.msg import String



def main(args=None):
  rclpy.init(args=args)

  node = rclpy.create_node('minimal_publisher')

  publisher = node.create_publisher(String, 'topic', 10)

  msg = String()
  senden = true
  i = 0
  while rclpy.ok():
    msg.data = 'Hello World: %d' % i
    i += 1
    #node.get_logger().info('Publishing: "%s"' % msg.data)
    If send:
        publisher.publish(msg)
        Send= false
    sleep(0.5)  # seconds

# Destroy the node explicitly
# (optional - otherwise it will be done automatically
# when the garbage collector destroys the node object)
node.destroy_node()
rclpy.shutdown()


if __name__ == '__main__':
  main()

Asked by duck-development on 2019-11-20 13:31:57 UTC

Comments