From 1703b5bc07f2e5d3e087fc7edb74715bdad8fc8a Mon Sep 17 00:00:00 2001 From: Andreas Greimel Date: Thu, 13 Sep 2018 11:17:17 +0200 Subject: [PATCH] GH-21 Wire rosbag play into CLI --- ros2bag/ros2bag/verb/play.py | 4 +++- .../rosbag2_transport/_rosbag2_transport.cpp | 23 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/ros2bag/ros2bag/verb/play.py b/ros2bag/ros2bag/verb/play.py index 92e9f1f4a8..3cf55c3f63 100644 --- a/ros2bag/ros2bag/verb/play.py +++ b/ros2bag/ros2bag/verb/play.py @@ -14,6 +14,8 @@ from ros2bag.verb import VerbExtension +from rosbag2_transport import rosbag_transport_py + class PlayVerb(VerbExtension): """ros2 bag play.""" @@ -24,4 +26,4 @@ def add_arguments(self, parser, cli_name): # noqa: D102 def main(self, *, args): # noqa: D102 bag_file = args.bag_file - print('calling ros2 bag play on', bag_file) + rosbag_transport_py.play_bag(bag_file) diff --git a/rosbag2_transport/src/rosbag2_transport/_rosbag2_transport.cpp b/rosbag2_transport/src/rosbag2_transport/_rosbag2_transport.cpp index 1c2d0a22a4..982e58d682 100644 --- a/rosbag2_transport/src/rosbag2_transport/_rosbag2_transport.cpp +++ b/rosbag2_transport/src/rosbag2_transport/_rosbag2_transport.cpp @@ -49,12 +49,35 @@ rosbag2_transport_record_topics(PyObject * Py_UNUSED(self), PyObject * args) Py_RETURN_NONE; } +static PyObject * +rosbag2_transport_play(PyObject * Py_UNUSED(self), PyObject * args) +{ + char * file_name; + if (!PyArg_ParseTuple(args, "s", &file_name)) { + return nullptr; + } + + rosbag2::Rosbag2PlayOptions options{}; + options.queue_buffer_length_ = 1000; + + rosbag2_transport::Rosbag2Transport transport; + transport.init(); + transport.play(file_name, options); + transport.shutdown(); + + Py_RETURN_NONE; +} + /// Define the public methods of this module static PyMethodDef rosbag2_transport_methods[] = { { "record_topics", rosbag2_transport_record_topics, METH_VARARGS, "Record topics" }, + { + "play_bag", rosbag2_transport_play, METH_VARARGS, + "Play bag" + }, {nullptr, nullptr, 0, nullptr} /* sentinel */ };