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
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
You could try to type
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.
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