Skip to content

Commit e10698e

Browse files
committed
DataLoadMCAP: add support to mcap logTime
The DataLoadMCAP plugin support only the publishTime of the mcap message. Add a radio button in the load dialog to select the logTime or publishTime. Signed-off-by: Luca Bartoli <[email protected]>
1 parent 4aa9074 commit e10698e

File tree

4 files changed

+57
-0
lines changed

4 files changed

+57
-0
lines changed

plotjuggler_plugins/DataLoadMCAP/dataload_mcap.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ bool DataLoadMCAP::xmlSaveState(QDomDocument& doc, QDomElement& parent_element)
3737
QDomElement elem = doc.createElement("parameters");
3838
const auto& params = *_dialog_parameters;
3939
elem.setAttribute("use_timestamp", int(params.use_timestamp));
40+
elem.setAttribute("use_mcap_log_time", int(params.use_mcap_log_time));
4041
elem.setAttribute("clamp_large_arrays", int(params.clamp_large_arrays));
4142
elem.setAttribute("max_array_size", params.max_array_size);
4243
elem.setAttribute("selected_topics", params.selected_topics.join(';'));
@@ -55,6 +56,7 @@ bool DataLoadMCAP::xmlLoadState(const QDomElement& parent_element)
5556
}
5657
mcap::LoadParams params;
5758
params.use_timestamp = bool(elem.attribute("use_timestamp").toInt());
59+
params.use_mcap_log_time = bool(elem.attribute("use_mcap_log_time").toInt());
5860
params.clamp_large_arrays = bool(elem.attribute("clamp_large_arrays").toInt());
5961
params.max_array_size = elem.attribute("max_array_size").toInt();
6062
params.selected_topics = elem.attribute("selected_topics").split(';');
@@ -227,6 +229,10 @@ bool DataLoadMCAP::readDataFromFile(FileLoadInfo* info, PlotDataMapRef& plot_dat
227229

228230
// MCAP always represents publishTime in nanoseconds
229231
double timestamp_sec = double(msg_view.message.publishTime) * 1e-9;
232+
if (_dialog_parameters->use_mcap_log_time)
233+
{
234+
timestamp_sec = double(msg_view.message.logTime) * 1e-9;
235+
}
230236
auto parser_it = parsers_by_channel.find(msg_view.channel->id);
231237
if (parser_it == parsers_by_channel.end())
232238
{

plotjuggler_plugins/DataLoadMCAP/dataload_params.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ struct LoadParams
1111
unsigned max_array_size;
1212
bool clamp_large_arrays;
1313
bool use_timestamp = false;
14+
bool use_mcap_log_time;
1415
};
1516

1617
} // namespace mcap

plotjuggler_plugins/DataLoadMCAP/dialog_mcap.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ DialogMCAP::DialogMCAP(const std::unordered_map<int, mcap::ChannelPtr>& channels
3434
params.clamp_large_arrays = settings.value(prefix + "clamp", true).toBool();
3535
params.max_array_size = settings.value(prefix + "max_array", 500).toInt();
3636
params.use_timestamp = settings.value(prefix + "use_timestamp", false).toBool();
37+
params.use_mcap_log_time = settings.value(prefix + "use_mcap_log_time", false).toBool();
3738
}
3839
else
3940
{
@@ -50,6 +51,14 @@ DialogMCAP::DialogMCAP(const std::unordered_map<int, mcap::ChannelPtr>& channels
5051
}
5152
ui->spinBox->setValue(params.max_array_size);
5253
ui->checkBoxUseTimestamp->setChecked(params.use_timestamp);
54+
if (params.use_mcap_log_time)
55+
{
56+
ui->radioLogTime->setChecked(true);
57+
}
58+
else
59+
{
60+
ui->radioPubTime->setChecked(true);
61+
}
5362

5463
int row = 0;
5564
for (const auto& [id, channel] : channels)
@@ -83,6 +92,7 @@ mcap::LoadParams DialogMCAP::getParams() const
8392
params.max_array_size = ui->spinBox->value();
8493
params.clamp_large_arrays = ui->radioClamp->isChecked();
8594
params.use_timestamp = ui->checkBoxUseTimestamp->isChecked();
95+
params.use_mcap_log_time = ui->radioLogTime->isChecked();
8696

8797
QItemSelectionModel* select = ui->tableWidget->selectionModel();
8898
QStringList selected_topics;
@@ -107,10 +117,13 @@ void DialogMCAP::accept()
107117
bool clamp_checked = ui->radioClamp->isChecked();
108118
int max_array = ui->spinBox->value();
109119
bool use_timestamp = ui->checkBoxUseTimestamp->isChecked();
120+
bool use_mcap_log_time = ui->radioLogTime->isChecked();
121+
110122

111123
settings.setValue(prefix + "clamp", clamp_checked);
112124
settings.setValue(prefix + "max_array", max_array);
113125
settings.setValue(prefix + "use_timestamp", use_timestamp);
126+
settings.setValue(prefix + "use_mcap_log_time", use_mcap_log_time);
114127

115128
QItemSelectionModel* select = ui->tableWidget->selectionModel();
116129
QStringList selected_topics;

plotjuggler_plugins/DataLoadMCAP/dialog_mcap.ui

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,40 @@
7272
</property>
7373
</widget>
7474
</item>
75+
<item>
76+
<layout class="QHBoxLayout" name="horizontalLayout_1">
77+
<item>
78+
<widget class="QLabel" name="label_3">
79+
<property name="text">
80+
<string>Select the MCAP timestamping mode:</string>
81+
</property>
82+
</widget>
83+
</item>
84+
<item>
85+
<widget class="QRadioButton" name="radioPubTime">
86+
<property name="text">
87+
<string>publish time</string>
88+
</property>
89+
<property name="checked">
90+
<bool>true</bool>
91+
</property>
92+
<attribute name="buttonGroup">
93+
<string notr="true">buttonGroup</string>
94+
</attribute>
95+
</widget>
96+
</item>
97+
<item>
98+
<widget class="QRadioButton" name="radioLogTime">
99+
<property name="text">
100+
<string>log time</string>
101+
</property>
102+
<attribute name="buttonGroup">
103+
<string notr="true">buttonGroup</string>
104+
</attribute>
105+
</widget>
106+
</item>
107+
</layout>
108+
</item>
75109
<item>
76110
<widget class="Line" name="line">
77111
<property name="frameShadow">
@@ -178,4 +212,7 @@
178212
</hints>
179213
</connection>
180214
</connections>
215+
<buttongroups>
216+
<buttongroup name="buttonGroup"/>
217+
</buttongroups>
181218
</ui>

0 commit comments

Comments
 (0)