ROS Resources: Documentation | Support | Discussion Forum | Service Status | Q&A answers.ros.org

Early preview: PlotJuggler (rqt_plot and rqt_bag on steroids)

Hi,

I am currently working on a personal project called PlotJuggler.

To get a first idea of what PlotJuggler can do, take a look ot the following videos.

https://vimeo.com/album/4208539

PlotJuggler is a Qt based application that allows the user to load, search and plot data.
Many ROS user would use MATLAB or rqt_plot for this purpose, but these solutions might be frustrating to use when the data to be analyzed is considerably large.

PlotJuggler is meant to be (hopefully) a better alternative to rqt_plot and rqt_bag, providing a more user friendly interface.

Features:

  • Multiplot: add multiple curves to a plot. Arrange plots in rows, columns, tabs and/or separate windows.

  • Zoom: easily zoom a plot. You can lock the X axis of all of the plots.

  • Save/Load layouts: once you have organized your layout, you can save it on a file to be reused later.

  • Complete Undo/Redo: CTRL-Z and CTRL-SHIFT-Z do what you expect them to do! Dramatic “D’oh” reduction guaranteed!

  • DataLoad plugins: easily load CSV or rosbags. More format can be supported in the future.

  • DataStreaming plugins: subscribe to one or multiple ros topic(s) and plot their data live.

  • RosPublisher plugin: re-publish the original ROS messages using the interactive tracker.

PlotJuggler is still in its “alpha” stage and under heavy development. I would like to get some feedback from the community to understand what developers need most…

You can find the code here: https://github.com/facontidavide/PlotJuggler

NOTE: you will also need this package too https://github.com/facontidavide/ros_type_introspection

Regards

Davide Faconti

5 Likes

The video is wonderful. It would a be a great tool for my problems. But a little silly query. How do I launch the application, I cloned , catckin_make and all is well. Not sure what next?

If everything goes well, you should find the executable and the plugins in devel/lib/plotjuggler.

You can run it diectly or if you can’t live without rosrun…

rosrun plotjuggler PlotJugler

Nice work, definitely going to try this out! I see a lot of similarities with another plot tool presented at last roscon: rqt multiplot : https://github.com/ethz-asl/rqt_multiplot_plugin . Are you familiar with this one? Just checking to avoid parallel developments of same functionalities.

rhagoletis@rhagoletis-MS-7885:~/catkin$ catkin_make
Base path: /home/rhagoletis/catkin
Source space: /home/rhagoletis/catkin/src
Build space: /home/rhagoletis/catkin/build
Devel space: /home/rhagoletis/catkin/devel
Install space: /home/rhagoletis/catkin/install
WARNING: Package name "World" does not follow the naming conventions. It should start with a lower case letter and only contain lower case letters, digits and underscores.
####
#### Running command: "make cmake_check_build_system" in "/home/rhagoletis/catkin/build"
####
####
#### Running command: "make -j12 -l12" in "/home/rhagoletis/catkin/build"
####
[  0%] [  0%] [  0%] [  0%] [  0%] Built target geometry_msgs_generate_messages_lisp
[  0%] Built target geometry_msgs_generate_messages_py
Built target geometry_msgs_generate_messages_cpp
Built target std_msgs_generate_messages_cpp
Built target std_msgs_generate_messages_lisp
Built target std_msgs_generate_messages_py
[  1%] [  1%] Built target jpeg_streamer
[  1%] [  1%] [  2%] Built target _World_generate_messages_check_deps_MsgState
Built target _World_generate_messages_check_deps_MsgFlystate
Built target _World_generate_messages_check_deps_MsgData
[  2%] Automoc for target colorwidgets
[  2%] Built target _World_generate_messages_check_deps_MsgArduino
Built target _World_generate_messages_check_deps_MsgTrajectory
[  2%] [  2%] Automoc for target qwt_static
Automoc for target PlotJuggler
[  2%] [  3%] Built target colorwidgets_automoc
[  4%] [  4%] Automoc for target DataLoadCSV
[  4%] Automoc for target DataLoadROS
[  4%] Automoc for target DataStreamSample
[  4%] [  4%] [  4%] Built target roscpp_generate_messages_cpp
Built target roscpp_generate_messages_lisp
Built target rosgraph_msgs_generate_messages_lisp
Built target roscpp_generate_messages_py
Built target rosgraph_msgs_generate_messages_py
[  4%] [  4%] Built target _rospy_message_converter_generate_messages_check_deps_TestArray
Built target PlotJuggler_automoc
[  4%] [  4%] [  4%] Built target DataLoadCSV_automoc
Built target DataStreamSample_automoc
Built target DataLoadROS_automoc
[  4%] [  4%] Built target topic_tools_generate_messages_lisp
[  4%] Built target topic_tools_generate_messages_cpp
[  5%] [  5%] [  5%] Automoc for target commonROS
Built target qwt_static_automoc
[  6%] [  5%] Automoc for target DataStreamROS
[  8%] Automoc for target RosTopicPublisher
[  8%] Built target usb_cam
Built target topic_tools_generate_messages_py
Built target rosgraph_msgs_generate_messages_cpp
Built target World_generate_messages_lisp
[ 10%] [ 12%] [ 14%] [ 14%] [ 14%] Built target nodelet_uvc_camera
Built target uvc_camera_node
Built target DataStreamROS_automoc
Built target uvc_stereo_node
Built target commonROS_automoc
[ 17%] [ 17%] [ 21%] Built target World_generate_messages_cpp
Built target World_generate_messages_py
[ 22%] [ 23%] Built target rospy_message_converter_generate_messages_cpp
Built target rospy_message_converter_generate_messages_py
Built target RosTopicPublisher_automoc
[ 23%] Built target rospy_message_converter_generate_messages_lisp
[ 23%] Built target World_generate_messages
[ 24%] Built target DataStreamSample
[ 27%] Built target commonROS
[ 27%] [ 28%] [ 28%] Built target rospy_message_converter_generate_messages
[ 31%] Built target usb_cam_node
Built target DataLoadCSV
Built target colorwidgets
[ 33%] Built target RosTopicPublisher
[ 35%] [ 37%] Built target DataStreamROS
Built target DataLoadROS
[ 86%] Built target qwt_static
[100%] Built target PlotJuggler

It doesn’t throw any errors. But when I run it,

rhagoletis@rhagoletis-MS-7885:~/catkin$ rosrun plotjuggler PlotJugler
[rosrun] Couldn't find executable named PlotJugler below /home/rhagoletis/catkin/src/PlotJuggler

Am i doing something silly?

Hi @pvnkmrksk,

Please ask debugging questions on http://answers.ros.org.

It looks like the generated executable is named PlotJuggler with two ‘g’. You should be able to run it with: ./devel/lib/plotjuggler/PlotJuggler

rosrun will not find the executable because it is installed in the lib folder and not the bin folder for some reason. To get it working with rorsrun you can change https://github.com/facontidavide/PlotJuggler/blob/master/CMakeLists.txt#L52 to install in bin
then rosrun plotjuggler PlotJuggler should work

That is not correct. Binaries in the bin folder can be invoked as is since they are on the PATH.

rosrun is being used to execute executables from a package specific folder (which is not on the PATH) which are under lib/<pkgname>. So ./devel/lib/plotjuggler/PlotJuggler should be invoked with rosrun plotjuggler PlotJuggler (after sourcing the setup file from .devel and if the file is marked with the executable bit).

You are right, this was a hacky workaround.
I couldn’t get rosrun to find PlotJuggler without modifying the OUTPUT_DIRECTORY variables : https://github.com/mikaelarguedas/PlotJuggler/commit/43f6781fc829ef5383e1e050980d964bbafbd139
I must have messed up someting in my config because now it’s working just fine with the current version on master. So please discard my previous comment. Sorry for the noise.

Thanks for the explanation!

Hi,

both rqt_multiplot and PlotJuggler were announced mostly t the same time.
I guess we may say that they try to solve the same problem in two different ways.
In a ideal world, we might have collaborated, but we probably have different opinions in terms of UI and usability.

  1. both gives the much needed ability to save the configuration/layout once you arranged your plots.
  2. PlotJuggler, additionally, provides multi-window and multi-tabs
  3. PlotJuggler itself is NOT a ROS application. ROS is supported through plugins.

I am happy to receive feedback from the users about that rqt_multiplot does best :smiley: to improve my own application.