facontidavide / plotjuggler Goto Github PK
View Code? Open in Web Editor NEWThe Time Series Visualization Tool that you deserve.
Home Page: https://www.plotjuggler.io
License: Mozilla Public License 2.0
The Time Series Visualization Tool that you deserve.
Home Page: https://www.plotjuggler.io
License: Mozilla Public License 2.0
Hello,
the behaviour of PlotJuggler is strange, when you try to plot a ROS topic where the messages have no timestamp in the header. Basically it only reads one message and displays it.
It took me a while to figure out what the problem is. Obviously there should be a stamp in the message, but maybe PlotJuggler could just display an error message to make it clearer to the user.
Here is a picture how it looks like.
I tested it on Ubuntu 16.04 with ROS Kinetic using the current master branch.
I can also send you a rosbag, but I guess it's the same with any stamp less message.
I'm glad to help, if you need any further information.
Hi, could you please add a new feature that provides the csv file name in the titlebar?
Since sometimes I plot the different csv files whose labels are identical, it's not inconvenient to tell them.
Thanks.
Chunting
2018_03_07_18_11_29.zip
Only CSV files are affected because it is expressed in nanoseconds
Is it possible to remove data from a plot once it has been added?
If not this would be a great feature
First of all, thanks a lot for a great tool!
So far, I have been using PlotJuggler with rosbags and it has worked flawlessly. Now I'm trying to use it with .csv
files and I can't quite figure out how the importing works. I'm using version 1.0.4 installed from the ROS Kinetic apt package ros-kinetic-plotjuggler
.
For example, I create a .csv
file in Pandas using the following commands:
import pandas as pd
import matplotlib as plt
df = pd.DataFrame(np.random.randn(6,4), index=[1,2,3,4,5,6], columns=list('ABCD'))
df.to_csv('test.csv')
the output is this file (the extension has been changed to .txt
because GitHub does not support attaching .csv
files to issues). When loading the data into PlotJuggler, I get the following warning:
Selected time in not strictly monotonic. Do you want to abort?
(Clicking "NO" you continue loading)
When clicking No
I can see the data in the left pane, however, when trying to plot the data against the index vector, i.e., right-dragging the index vector to the plot pane and then left-dragging the data columns, this is the result I get:
Btw. I did maximize both the vertical and the horizontal zoom. When maximizing the vertical zoom, the following gets printed to the console from which I started PlotJuggler:
invalid X0/X1 range in PlotWidget::maximumRangeY
invalid X0/X1 range in PlotWidget::maximumRangeY
invalid X0/X1 range in PlotWidget::maximumRangeY
invalid X0/X1 range in PlotWidget::maximumRangeY
I expect to see this plot:
which is what I get by:
df.plot()
plt.show()
Am I missing something obvious?
A .csv
file using semicolons as delimiters
will not be imported correctly.
This behaviour is with the current master head. As semicolons are quite commonly used delimiters in .csv
files it would be nice to have support for this.
Having the possibility to plot dotted/dashed lines would be useful.
A sorting would help for a large number of topics.
A selection of multiple topics would be helpful, too.
Hey, thank you for the tool.
The Publishers is not enabled and I am unable to subscribe to any topic.
PlotJuggler version: 1.3
ros: Kinetic
Ubuntu 16.04
Thanks
Hi @facontidavide, I think it would be a simple great improvement to just be able to save the data to a CSV file, in addition to saving as .png
Cheers,
Jimmy
I have a doubt about the installation under ROS.
I clone the repository under catkin_ws/src
and ran catkin build
from catkin-tools. I guess this is correct as I can run rosrun plotjuggler PlotJuggler
. Are these the only steps?
If I want to use PlotJuggler both with and without ROS, I guess I have to also make the classical installation. Am I right?
I have data indexed with multiple time samples from 3 separate clocks across 3 separate devices, and I'm trying to visualize the time differences and errors, I've included my specific questions and details below.
The key data channels will be:
The actual message data type LogKUKAiiwaFusionTrack.fbs is simply a vector of time stamped messages, which contain other data channels:
union DeviceState {KUKAiiwaState, FusionTrackMessage}
// a log file is a series of GRLMessage entities
// The TimeEvent should contain the necessary data,
// and only ONE of kukaiiwa or fusionTrack should
// be filled out for each message.
table KUKAiiwaFusionTrackMessage {
// an easy to use ros compatible timestamp
timestamp:double;
// a more detailed timestamp based on google cartographer
// and the triggersync paper
timeEvent:TimeEvent;
deviceState:DeviceState;
}
table LogKUKAiiwaFusionTrack {
states:[KUKAiiwaFusionTrackMessage];
}
Here is the time data I record for each device:
/// Note that all of these time entries are
/// longs with a minimum step of 100ns,
/// see google cartographer's cartographer::common::time
table TimeEvent {
/// Identifying string for this time stamped data topic
/// something like "/opticaltracker/00000000/frame" where
/// 00000000 is the serial number of the optical tracker.
event_name:string;
/// The time just before a data update request is made
local_request_time:long;
/// Identifying string for the clock used to drive the device
/// something like "/opticaltracker/00000000/clock"
/// if it is the clock internal to a sensor like an optical tracker
device_clock_id:string;
/// The time provided by the device specified by device_clock_id
device_time:long;
/// Identifying string for the clock used to drive the device
/// or "/control_computer/clock/steady" if the device has no clock
/// and the time is the desktop computer
/// running the steady clock (vs clocks which might change time)
local_clock_id:string;
/// The time at which the data was received
local_receive_time:long;
/// The corrected local time which represents when the sensor
/// data was actually captured.
corrected_local_time:long;
/// Estimated duration of the skew between the device clock
/// and the local time clock
clock_skew:long;
/// The minimum expected delay in transporting the data request
min_transport_delay:long;
}
This is based on the rosmsg Event.msg, from a paper called triggersync as follows (there is a TimeStamped version as well):
string event_name
time local_request_time
string device_clock_id
time device_time
string local_clock_id
time local_receive_time
time corrected_local_time
float64 clock_skew
duration min_transport_delay
I would appreciate your patience and recommendation, I know this is a very detailed question. Others in my lab use plotjuggler and it is highly regarded, so I'm seeing if I can use it too. Thanks!
I managed to compile PlotJuggler but not to install it. sudo make install
return make: *** No rule to make target 'install'. Stop.
A repeated value on the x-axis inhibits further plotting. This file demonstrates the issue. Upon loading the file, if I select _Column_0
as the time axis, which has identical values in rows 3 and 4, when I try to add e.g. column A to the plot area, only the first two values of A will be plotted.
My actual use case is a dataset of densely sampled (1ms) data. Occasionally, I will have two data points with the same timestamp, which is not really an issue, however, it seems to prevent PlotJuggler from correctly plotting the data.
This is with the currrent master head.
Hi,
I have cloned the latest version from the git and followed the steps for installation. My installations failed at the make step inside the build folder. Here is what I am getting.
$~/PlotJuggler/build$ make
Scanning dependencies of target colorwidgets_automoc
[ 0%] Automoc for target colorwidgets
Generating moc_color_palette.cpp
Generating moc_color_preview.cpp
Generating moc_color_wheel.cpp
Generating moc_swatch.cpp
[ 0%] Built target colorwidgets_automoc
Scanning dependencies of target colorwidgets
[ 0%] Building CXX object color_widgets/CMakeFiles/colorwidgets.dir/src/color_names.cpp.o
[ 1%] Building CXX object color_widgets/CMakeFiles/colorwidgets.dir/src/color_palette.cpp.o
[ 2%] Building CXX object color_widgets/CMakeFiles/colorwidgets.dir/src/color_utils.cpp.o
/home/alex-d/PlotJuggler/color_widgets/src/color_utils.cpp: In function ‘QColor color_widgets::detail::color_from_lch(qreal, qreal, qreal, qreal)’:
/home/alex-d/PlotJuggler/color_widgets/src/color_utils.cpp:30:30: error: ‘fmod’ is not a member of ‘std’
qreal x = chroma*(1-qAbs(std::fmod(h1,2)-1));
^
/home/alex-d/PlotJuggler/color_widgets/src/color_utils.cpp:30:30: note: suggested alternative:
In file included from /usr/include/features.h:374:0,
from /usr/include/x86_64-linux-gnu/c++/5/bits/os_defines.h:39,
from /usr/include/x86_64-linux-gnu/c++/5/bits/c++config.h:482,
from /usr/include/c++/5/utility:68,
from /usr/include/c++/5/algorithm:60,
from /usr/include/qt5/QtCore/qglobal.h:82,
from /usr/include/qt5/QtGui/qrgb.h:45,
from /usr/include/qt5/QtGui/qcolor.h:45,
from /usr/include/qt5/QtGui/QColor:1,
from /home/alex-d/PlotJuggler/./color_widgets/include/color_utils.hpp:22,
from /home/alex-d/PlotJuggler/color_widgets/src/color_utils.cpp:22:
/usr/include/x86_64-linux-gnu/bits/mathcalls.h:187:1: note: ‘fmod’
__MATHCALL (fmod,, (_Mdouble_ __x, _Mdouble_ __y));
^
/home/alex-d/PlotJuggler/color_widgets/src/color_utils.cpp: In function ‘QColor color_widgets::detail::color_from_hsl(qreal, qreal, qreal, qreal)’:
/home/alex-d/PlotJuggler/color_widgets/src/color_utils.cpp:58:30: error: ‘fmod’ is not a member of ‘std’
qreal x = chroma*(1-qAbs(std::fmod(h1,2)-1));
^
/home/alex-d/PlotJuggler/color_widgets/src/color_utils.cpp:58:30: note: suggested alternative:
In file included from /usr/include/features.h:374:0,
from /usr/include/x86_64-linux-gnu/c++/5/bits/os_defines.h:39,
from /usr/include/x86_64-linux-gnu/c++/5/bits/c++config.h:482,
from /usr/include/c++/5/utility:68,
from /usr/include/c++/5/algorithm:60,
from /usr/include/qt5/QtCore/qglobal.h:82,
from /usr/include/qt5/QtGui/qrgb.h:45,
from /usr/include/qt5/QtGui/qcolor.h:45,
from /usr/include/qt5/QtGui/QColor:1,
from /home/alex-d/PlotJuggler/./color_widgets/include/color_utils.hpp:22,
from /home/alex-d/PlotJuggler/color_widgets/src/color_utils.cpp:22:
/usr/include/x86_64-linux-gnu/bits/mathcalls.h:187:1: note: ‘fmod’
__MATHCALL (fmod,, (_Mdouble_ __x, _Mdouble_ __y));
^
make[2]: *** [color_widgets/CMakeFiles/colorwidgets.dir/src/color_utils.cpp.o] Error 1
make[1]: *** [color_widgets/CMakeFiles/colorwidgets.dir/all] Error 2
make: *** [all] Error 2
Can you suggest something. Thanks.
Is it somehow possible to show data from a topic loaded from a bagfile, and at the same time show data from a topic with the same name recorded realtime over ROS? I've seen the "rename fields" feature, but no "rename topics" feature.
That would be a great feature.
This app looks really useful! I'd also love to see this as a default RQT plugin.
It would be great to have the ability to tab complete data for rostopics that have a lot of subfields.
Hi,
just an enhancement request to have a function for reloading the same data file.
I am currently working with a .csv data file which I generate with some code and then visualize with PlotJuggler.
Now every time I generate a new data set I have to click on "Load data from: x.csv" and reselect the time axis index. It would be awesome to just have a button (or even a shortcut like F5) to reload the last file with the same time axis.
But as I said, it's just an enhancement and it already works quiet well.
Thanks again for your amazing tool! It should be the standard plotter in ROS 😃
I am not sure if this is the right place to post this. I tried as per the manual, using right click drag to set the x axis variable. I tried with different files and streams, it just doesn't work. It plots it on the y axis and the overlay of "set as x axis" never appears. Am I doing something wrong or is this a bug? Is there anything else I need to provide to fix this?
Hi,
I am using the master branch (ubuntu 14.04 ) and trying to build but getting following errors : Any help would be great! Thanks
[ 74%] Generating qrc_resource.cpp
Scanning dependencies of target PlotJuggler
[ 75%] Building CXX object plotter_gui/CMakeFiles/PlotJuggler.dir/aboutdialog.cpp.o
[ 75%] Building CXX object plotter_gui/CMakeFiles/PlotJuggler.dir/axis_limits_dialog.cpp.o
[ 76%] Building CXX object plotter_gui/CMakeFiles/PlotJuggler.dir/main.cpp.o
In file included from /home/ankit-d/PlotJuggler/plotter_gui/mainwindow.h:17:0,
from /home/ankit-d/PlotJuggler/plotter_gui/main.cpp:1:
/home/ankit-d/PlotJuggler/plotter_gui/realslider.h: In member function ‘void RealSlider::setRealValue(double)’:
/home/ankit-d/PlotJuggler/plotter_gui/realslider.h:53:15: error: ‘round’ is not a member of ‘std’
int pos = std::round( (double)(maximum() - minimum()) * ratio + minimum())
^
/home/ankit-d/PlotJuggler/plotter_gui/realslider.h:53:15: note: suggested alternative:
In file included from /usr/include/features.h:374:0,
from /usr/include/x86_64-linux-gnu/c++/5/bits/os_defines.h:39,
from /usr/include/x86_64-linux-gnu/c++/5/bits/c++config.h:482,
from /usr/include/c++/5/utility:68,
from /usr/include/c++/5/algorithm:60,
from /usr/include/qt5/QtCore/qglobal.h:82,
from /usr/include/qt5/QtGui/qwindowdefs.h:45,
from /usr/include/qt5/QtWidgets/qwidget.h:45,
from /usr/include/qt5/QtWidgets/qmainwindow.h:45,
from /usr/include/qt5/QtWidgets/QMainWindow:1,
from /home/ankit-d/PlotJuggler/plotter_gui/mainwindow.h:4,
from /home/ankit-d/PlotJuggler/plotter_gui/main.cpp:1:
/usr/include/x86_64-linux-gnu/bits/mathcalls.h:309:1: note: ‘round’
__MATHCALLX (round,, (_Mdouble_ __x), (__const__));
^
make[2]: *** [plotter_gui/CMakeFiles/PlotJuggler.dir/main.cpp.o] Error 1
make[1]: *** [plotter_gui/CMakeFiles/PlotJuggler.dir/all] Error 2
make: *** [all] Error 2
The short one (named Error_opening.bag) crashes after selecting both topics inside the rosbag with the error:
terminate called after throwing an instance of 'std::runtime_error'
what(): can't deserialize this stuff: Header
The same happened when I tried the ROS Topic Streamer on those two topics at the same time.
The other bag is fine.
I am trying to install the Cmake package by running:
PlotJuggler$ cmake CMakeLists.txt
However I am getting the following output:
CMake Error at CMakeLists.txt:40 (add_subdirectory):
add_subdirectory given source "qwt/src" which is not an existing directory.
Do I need to build something else before I build this?
Thanks in advance!
Parsing rosbags usally generates very long name that use a lot of real-estate on the screen.
It must be possible to switch to a more compact "tree-view" representation
On Fedora 25 libpng issues two warnings when PlotJuggler starts
$ ./PlotJuggler/build/bin/PlotJuggler
libpng warning: bKGD: invalid
libpng warning: bKGD: invalid
I followed the fix suggested for this similar error, and the warning is gone:
http://stackoverflow.com/questions/22745076/libpng-warning-iccp-known-incorrect-srgb-profile
$ sudo dnf install ImageMagick
$ cd PlotJuggler
$ mogrify $(find . -name '*.png')
Ok, I tried in a completely different machine and setup, and plotjuggler is now working without any additional rules, but when I add either of the following rules, it crashes:
<rule pattern="nodes.#/resident_memory" alias="nodes.#/name" substitution="@/resident_memory" />
<rule pattern="nodes.#/resident_memory_percentage" alias="nodes.#/name" substitution="@/resident_memory_percentage" />
<rule pattern="nodes.#/all_memory_percentage" alias="nodes.#/name" substitution="@/all_memory_percentage" />
<rule pattern="nodes.#/cputime_percentage" alias="nodes.#/name" substitution="@/cputime_percentage" />
Again, if I, for example, change "resident_memory" to "resident_mem", everything is working perfectly!
I used the streaming function, when I add the pose.x to the plot the y axis is somehow stick to [-0.1, 0.1] which I can not zoom in and out.
When plotting multiple ros topics, and starting and stopping the streaming, the program seems to fall into a mode, streaming can not activated successfully.
No obvious reset returns to a valid state.
any::bad_cast apparently....
Hi,
I think it would be very nice to have the ability to start/stop streaming using the space key :)
Best regards,
Marc
Hi,
I have encountered the following issue: When loading a bag the plugin 'DataLoad ROS Bags' throws an error. The specific text is "Buffer overrun in RosIntrospection::ReadFromBuffer". Here is a screenshot:
I am using PlotJuggler version 1.3.0 installed from debians using Ubuntu 14.04 and ROS Indigo. I tried compiling from source, but failed. Sorry.
This is the bag I tried to load:
I contains a single message of type control_msgs/FollowJointTrajectoryGoal
with a trajectory with 500 points in it. I wanted to look at the position and velocity trajectories of individual joints using PlotJuggler. Is that usage in principal supported?
Best,
Georg.
Again awesome tool.
A nice to have feature would be to be able to remove most of GUI elements when my plot has been configured set.
Sometimes I would like to have a plot on a corner of my screen so I can work on other stuff while I am monitoring it.
My best approach was to create a new window for the plot, but even with that I'd say 40% or more of the screen space is used by widgets that at this moment are not needed.
I wish we could have something like this:
It's a minor feature, and if noone has done it by then, I will try to do it in july when I'll have more free time.
Thanks for the awesome package. One thing that I'd consider useful would be selectively clearing data of a single line (though not removing the "line object" itself), so that I can replay a bagfile and have the line data only from the last replay.
I love the package for rosbag inspection. Thanks for the work
Is there a way to click and drag the plot? Additionally is there any way I can contribute to documentation? I'd be happy to do a PR for the readme, but if you'd prefer a wiki etc I'd do that too.
Just want to check whether it's GPL (as per the LICENSE in the root dir) or LGPL (as per the package.xml)?
I am using the newest kinetic debians:
terminate called after throwing an instance of 'std::runtime_error'
what(): Unexpected character after type and field 'Definition of custom_msgs/CustomMsg
Stack trace (most recent call last):
#31 Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x7fe79b1c682f, in __libc_start_main
Source "/build/glibc-t3gR2i/glibc-2.23/csu/../csu/libc-start.c", line 291, in __libc_start_main [0x7fe79b1c682f]
#30 Object "/opt/ros/kinetic/lib/plotjuggler/PlotJuggler", at 0x468829, in main
#29 Object "/usr/lib/x86_64-linux-gnu/libQt5Core.so.5", at 0x7fe79c09bbeb, in QCoreApplication::exec()
#28 Object "/usr/lib/x86_64-linux-gnu/libQt5Core.so.5", at 0x7fe79c093b49, in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)
#27 Object "/usr/lib/x86_64-linux-gnu/libQt5Core.so.5", at 0x7fe79c0ec7ce, in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
#26 Object "/lib/x86_64-linux-gnu/libglib-2.0.so.0", at 0x7fe79a85549b, in g_main_context_iteration
#25 Object "/lib/x86_64-linux-gnu/libglib-2.0.so.0", at 0x7fe79a8553ef, in g_main_context_dispatch
#24 Object "/lib/x86_64-linux-gnu/libglib-2.0.so.0", at 0x7fe79a855196, in g_main_context_dispatch
#23 Object "/usr/lib/x86_64-linux-gnu/libQt5Core.so.5", at 0x7fe79c0ec3c2, in QEventDispatcherGlibPrivate::runTimersOnceWithNormalPriority()
#22 Object "/usr/lib/x86_64-linux-gnu/libQt5Core.so.5", at 0x7fe79c098785, in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*)
#21 Object "/usr/lib/x86_64-linux-gnu/libQt5Core.so.5", at 0x7fe79c09638a, in QCoreApplication::notifyInternal(QObject*, QEvent*)
#20 Object "/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5", at 0x7fe79c98e515, in QApplication::notify(QObject*, QEvent*)
#19 Object "/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5", at 0x7fe79c98905b, in QApplicationPrivate::notify_helper(QObject*, QEvent*)
#18 Object "/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5", at 0x7fe79c982121, in QAction::event(QEvent*)
#17 Object "/usr/lib/x86_64-linux-gnu/libQt5Core.so.5", at 0x7fe79c0c5c00, in QObject::event(QEvent*)
#16 Object "/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5", at 0x7fe79c981e1e, in QAction::setIconVisibleInMenu(bool)
#15 Object "/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5", at 0x7fe79c981897, in QAction::activate(QAction::ActionEvent)
#14 Object "/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5", at 0x7fe79c97f411, in QAction::triggered(bool)
#13 Object "/usr/lib/x86_64-linux-gnu/libQt5Core.so.5", at 0x7fe79c0c4d29, in QMetaObject::activate(QObject*, int, int, void**)
#12 Object "/opt/ros/kinetic/lib/plotjuggler/PlotJuggler", at 0x4a39ee, in TabbedPlotWidget::sendTabToNewWindow(PlotMatrix*)
#11 Object "/opt/ros/kinetic/lib/plotjuggler/PlotJuggler", at 0x47709b, in MainWindow::onActionLoadDataFile(bool)
#10 Object "/opt/ros/kinetic/lib/plotjuggler/PlotJuggler", at 0x476601, in MainWindow::onActionLoadDataFileImpl(QString, bool)
#9 Object "/opt/ros/kinetic/lib/plotjuggler/libDataLoadROS.so", at 0x7fe76cf77196, in DataLoadROS::readDataFromFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)
#8 Object "/opt/ros/kinetic/lib/libros_type_introspection.so", at 0x7fe76cd3c698, in RosIntrospection::buildROSTypeMapFromDefinition(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
#7 Object "/opt/ros/kinetic/lib/libros_type_introspection.so", at 0x7fe76cd3c21a, in RosIntrospection::ROSMessage::ROSMessage(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
#6 Object "/opt/ros/kinetic/lib/libros_type_introspection.so", at 0x7fe76cd3bd19, in RosIntrospection::ROSField::ROSField(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
#5 Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x7fe79bb1b918, in __cxa_throw
#4 Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x7fe79bb1b700, in std::terminate()
#3 Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x7fe79bb1b6b5, in std::rethrow_exception(std::__exception_ptr::exception_ptr)
#2 Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x7fe79bb1d84c, in __gnu_cxx::__verbose_terminate_handler()
#1 Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x7fe79b1dd029, in abort
Source "/build/glibc-t3gR2i/glibc-2.23/stdlib/abort.c", line 89, in __GI_abort [0x7fe79b1dd029]
#0 Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x7fe79b1db428, in gsignal
Source "/build/glibc-t3gR2i/glibc-2.23/signal/../sysdeps/unix/sysv/linux/raise.c", line 54, in __GI_raise [0x7fe79b1db428]
Aborted (Signal sent by tkill() 26463 1000)
Aborted (core dumped)
Hi!
I want to plot real time trajectories of my robots using this. I am getting data as Pose2d message. Is it possible to plot X-coordinate vs Y-coordinate on a plot? Right now I can only plot as time series.
Thanks,
Bhargav
Looks like when removing the boost dependency in 1c001e0, the ROS plugins were not updated.
I am trying to create a ruleset for my package. Everything is working as expected, except for the following rule:
<rule pattern="nodes.#/resident_memory_percentage" alias="nodes.#/name" substitution="@/resident_memory_percentage" />
If I use the rule above, I get a malloc() exception. If I use the rule below instead, everything is working perfectly:
<rule pattern="nodes.#/resident_memory_percentage" alias="nodes.#/name" substitution="@/resident_memory_percen" />
The difference between the two is the string length of the subsctitution field.
The crash happens in:
and stops at "resident_memory_percen".
The problem most probably lies in the ros_type_introspection package (in renamer.cpp at the "applyNameTransform" method?), but since it was encountered while using plotjuggler, I posted the issue here.
@facontidavide I hope you don't get overwhelmed by all these issues, I just want to put ideas on paper so they are there for the future. Also feel free to tell me what you won't prioritize so I can make PRs where you don't have bandwidth.
When viewing data with points user should be able to click on a specific point and see its exact x,y value.
Hi,
Thanks for the great work on PlotJuggler (great name btw).
I seem to have found an issue when loading sensor_msgs/Image
messages from a rosbag.
I am currently using the latest master version.
Error message displayed:
The plugin [DataLoad ROS bags] thrown the following exception:
Buffer overrun in deserializeIntoFlatContainer (blob)
I am not the owner of the rosbag thus cannot share it unfortunately.
Let me know if there is any other piece of information that would help resolving this issue.
Alex
Hello,
I am eager to use your program. I have just installed 1.3.0 version of PlotJuggler using catkin_make on my Ubuntu14.04 ros-indigo installed machine. Firstly, I tried to use the dummy data with argument "-t" and it visualized them successfully. When I record a rosbag file and tried visualize I had an error of "Segmentation fault (core dumped)".
I attached the rosbag file. I would be grateful if you could help me on my problem?
Thanks in advance.
Currently array messages in the left sidebar are grouped alphabetically, but the case where you have over 10 data fields in a message leads to strange ordering. E.G. you will have
variable_0
variable_1
variable_10
variable_11
...
variable_19
variable_2
variable_20
If the variable has the same name the ordering should be based on numbering
The first time I load a csv file to PlotJuggler there is a pop-up asking to select the time axis. The file is loaded correctly. When I want to load another file with same data structure, there is "Selected time in notstrictly monotonic" error.
The only way I can get data to be loaded correctly then, is to change the name of time axis in the csv.
Example files (extensions changed to txt due to Github restrictions):
test.txt
test2.txt
I have been working with Plotjuggler and one thing I really miss is being able to set fix values for the axis. Would it possible to do it?
Hello @facontidavide !
First thank you for your big contribution to the ROS community. PlotJuggler is really easy to use and as already saved me a lot of debug and figure creation time.
I am now unfortunately working on a non ros-based project on Windows, so I cannot use PlotJuggler for streaming any more...
Could it be possible somehow to include PlotJuggler as a new Widget inside my QT based application to stream some variables ?
Jimmy
I'm trying to install plotjuggler for the first time and I'm encountering issues similar to #56, it seems some of the dependencies in the readme aren't up to date. Specifically,
Here are the steps I took, I'm on kinetic:
cd myworkspace/src
sudo apt-get -y install qtbase5-dev libqt5svg5-dev
git clone https://github.com/facontidavide/PlotJuggler.git
git clone https://github.com/Eurecat/abseil-cpp
git clone https://github.com/facontidavide/ros_type_introspection
catkin build plotjuggler
This gives me the following error:
Warnings << ros_type_introspection:make /home/ahundt/src/costar_ws/logs/ros_type_introspection/build.make.000.log
/home/ahundt/src/costar_ws/src/ros_type_introspection/src/ros_introspection.cpp: In member function ‘void RosIntrospection::Parser::registerRenamingRules(const RosIntrospection::ROSType&, const std::vector<RosIntrospection::SubstitutionRule>&)’:
/home/ahundt/src/costar_ws/src/ros_type_introspection/src/ros_introspection.cpp:141:47: warning: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
if( rule_set.find( rule ) == rule_set.end() )
^
In file included from /usr/include/c++/5/bits/hashtable.h:35:0,
from /usr/include/c++/5/unordered_set:47,
from /home/ahundt/src/costar_ws/src/ros_type_introspection/include/ros_type_introspection/ros_introspection.hpp:38,
from /home/ahundt/src/costar_ws/src/ros_type_introspection/src/ros_introspection.cpp:42:
/usr/include/c++/5/bits/hashtable_policy.h:317:5: note: candidate 1: bool std::__detail::operator==(const std::__detail::_Node_iterator_base<_Value, _Cache_hash_code>&, const std::__detail::_Node_iterator_base<_Value, _Cache_hash_code>&) [with _Value = RosIntrospection::SubstitutionRule; bool _Cache_hash_code = true]
operator==(const _Node_iterator_base<_Value, _Cache_hash_code>& __x,
^
In file included from /home/ahundt/src/costar_ws/src/ros_type_introspection/include/ros_type_introspection/ros_type.hpp:42:0,
from /home/ahundt/src/costar_ws/src/ros_type_introspection/include/ros_type_introspection/ros_field.hpp:42,
from /home/ahundt/src/costar_ws/src/ros_type_introspection/include/ros_type_introspection/ros_message.hpp:39,
from /home/ahundt/src/costar_ws/src/ros_type_introspection/include/ros_type_introspection/stringtree_leaf.hpp:43,
from /home/ahundt/src/costar_ws/src/ros_type_introspection/include/ros_type_introspection/ros_introspection.hpp:39,
from /home/ahundt/src/costar_ws/src/ros_type_introspection/src/ros_introspection.cpp:42:
/home/ahundt/src/costar_ws/src/ros_type_introspection/include/ros_type_introspection/utils/variant.hpp:140:6: note: candidate 2: bool RosIntrospection::operator==(const T&, const RosIntrospection::Variant&) [with T = std::__detail::_Node_iterator<RosIntrospection::SubstitutionRule, true, true>]
bool operator ==(const T& num, const Variant& var)
^
/home/ahundt/src/costar_ws/src/ros_type_introspection/src/ros_introspection.cpp:141:47: warning: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
if( rule_set.find( rule ) == rule_set.end() )
^
In file included from /usr/include/c++/5/bits/hashtable.h:35:0,
from /usr/include/c++/5/unordered_set:47,
from /home/ahundt/src/costar_ws/src/ros_type_introspection/include/ros_type_introspection/ros_introspection.hpp:38,
from /home/ahundt/src/costar_ws/src/ros_type_introspection/src/ros_introspection.cpp:42:
/usr/include/c++/5/bits/hashtable_policy.h:317:5: note: candidate 1: bool std::__detail::operator==(const std::__detail::_Node_iterator_base<_Value, _Cache_hash_code>&, const std::__detail::_Node_iterator_base<_Value, _Cache_hash_code>&) [with _Value = RosIntrospection::SubstitutionRule; bool _Cache_hash_code = true]
operator==(const _Node_iterator_base<_Value, _Cache_hash_code>& __x,
^
In file included from /home/ahundt/src/costar_ws/src/ros_type_introspection/include/ros_type_introspection/ros_type.hpp:42:0,
from /home/ahundt/src/costar_ws/src/ros_type_introspection/include/ros_type_introspection/ros_field.hpp:42,
from /home/ahundt/src/costar_ws/src/ros_type_introspection/include/ros_type_introspection/ros_message.hpp:39,
from /home/ahundt/src/costar_ws/src/ros_type_introspection/include/ros_type_introspection/stringtree_leaf.hpp:43,
from /home/ahundt/src/costar_ws/src/ros_type_introspection/include/ros_type_introspection/ros_introspection.hpp:39,
from /home/ahundt/src/costar_ws/src/ros_type_introspection/src/ros_introspection.cpp:42:
/home/ahundt/src/costar_ws/src/ros_type_introspection/include/ros_type_introspection/utils/variant.hpp:134:6: note: candidate 2: bool RosIntrospection::operator==(const RosIntrospection::Variant&, const T&) [with T = std::__detail::_Node_iterator<RosIntrospection::SubstitutionRule, true, true>]
bool operator ==(const Variant& var, const T& num)
^
cd /home/ahundt/src/costar_ws/build/ros_type_introspection; catkin build --get-env ros_type_introspection | catkin env -si /usr/bin/make --jobserver-fds=6,7 -j; cd -
.......................................................................................................................................................................................................................................................................................
Finished <<< ros_type_introspection [ 9.8 seconds ]
Starting >>> plotjuggler
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Errors << plotjuggler:cmake /home/ahundt/src/costar_ws/logs/plotjuggler/build.cmake.001.log
CMake Error at /usr/lib/x86_64-linux-gnu/cmake/Qt5/Qt5Config.cmake:26 (find_package):
Could not find a package configuration file provided by "Qt5WebSockets"
with any of the following names:
Qt5WebSocketsConfig.cmake
qt5websockets-config.cmake
Add the installation prefix of "Qt5WebSockets" to CMAKE_PREFIX_PATH or set
"Qt5WebSockets_DIR" to a directory containing one of the above files. If
"Qt5WebSockets" provides a separate development package or SDK, be sure it
has been installed.
Call Stack (most recent call first):
plugins/DataStreamServer/CMakeLists.txt:8 (find_package)
cd /home/ahundt/src/costar_ws/build/plotjuggler; catkin build --get-env plotjuggler | catkin env -si /usr/local/bin/cmake /home/ahundt/src/costar_ws/src/PlotJuggler --no-warn-unused-cli -DCATKIN_DEVEL_PREFIX=/home/ahundt/src/costar_ws/devel/.private/plotjuggler -DCMAKE_INSTALL_PREFIX=/home/ahundt/src/costar_ws/install; cd -
.......................................................................................................................................................................................................................................................................................
Failed << plotjuggler:cmake [ Exited with code 1 ]
Failed <<< plotjuggler [ 1.7 seconds ]
[build] Summary: 2 of 3 packages succeeded.
[build] Ignored: 110 packages were skipped or are blacklisted.
[build] Warnings: 1 packages succeeded with warnings.
[build] Abandoned: None.
[build] Failed: 1 packages failed.
[build] Runtime: 16.8 seconds total.
[build] Note: Workspace packages have changed, please re-source setup files to use them.
cc: @Chunting
Right now saving a plot to a file requires the user to put .png, .jpg, etc in the filename.
Additionally if the user puts something that is not supported (E.G. no file extension or a bad one such as ".txt") there is no warning or error, the dialog goes away but no file is created.
Default extensions should be selected for this functionality for a user
Hey there,
I wish, that PlogJuggler would be able to be started via launch files with a predefined layout. Unfortunately this is not possible actually if you start gazebo in paused mode (In case your predefined layout contains topics that are first published when gazebo is started).
Currently it is like this: I Start plotjuggler with a predefined layout from a launch file then it says it cannot open the topics of this layout cause the topics are not yet published (because gazebo is started in paused mode)
That is why it would be better that plotjuggler just prints a message like:
waiting for topics to come in.... (When loading a layout that has topics which are not published yet)
Hope you can do this improvement on the code :)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.