ConcertGroupLog - JAVA parse error - data missing.

Questions about our MATLAB API
Post Reply
RoySevit
Posts: 4
Joined: Tue Sep 29, 2020 8:08 am
Location: Geel, Belgium

ConcertGroupLog - JAVA parse error - data missing.

Post by RoySevit » Tue Sep 19, 2023 7:59 am

Hi there,

Recently we have built a small test rig with a HEBI unit. The purpose is to build a machine that bends the forefoot plate of an AFO for an extensive amount of cycles (e.g. 5M).

We created a MATLAB Application that we compiled to an exe, that is capable of generating a trajectory in between two angles, executing this trajectory for a given amount of cycles and log the resulting data. Since these tests run over days, we have intermediate logs that save the data periodically (e.g. every 1000 cycles)

On Windows OS, we detected performance issues probably due to the OS load itself (high latency was measured). We therefore compiled the same app for Linux (Ubuntu 23.04), and indeed it is much more stable. We commenced a trial that consisted of 5M cycles, where the logs where periodically saved every 0.5M cycles.

The version of the application also exports the hebilog file to mat and csv every time a new hebi log is started.

If we now read in the hebiLogs from this Linux PC on our Windows data processing laptop, we do see some strange issues.

On the data processing PC, we have the following code that converts the copied hebi logs to mat files:

Code: Select all

clear all
clc
folder = uigetdir();
fileList = dir(fullfile(folder, '*.hebilog'));
% Convert hebi log files to mat files, sotred in one big struct.

% for i=1:3
tic
for i=1:length(fileList)
    binaryFile = strcat(folder,'\',fileList(i).name);
    matFile = HebiUtils.convertGroupLog(binaryFile, 'format', 'mat', 'view', 'Full'); % convert full, see options in hebi doc.
    %dataHebi(i) = load(matFile);
    DataFile=load(matFile);
    if i==1
        full_data.effort = DataFile.effort;
        full_data.position=DataFile.position;
        full_data.positionCmd=DataFile.positionCmd;
        full_data.windingTemperature= DataFile.windingTemperature;
        full_data.ambientTemperature=DataFile.ambientTemperature;
        full_data.velocity=DataFile.velocity;
        full_data.pcTxTime=DataFile.pcTxTime;
        full_data.pcRxTime=DataFile.pcRxTime;
    else
        full_data = CatStructFields(full_data, DataFile, 1);
    end
    clear DataFile

    disp(i);
end
toc[
From log file 4 we start receiving these errors or warnings:
1

2

3

Failed to parse at least one incoming message (Protocol message contained an invalid tag (zero).)
Failed to parse at least one incoming message (Protocol message contained an invalid tag (zero).)
4

Failed to parse at least one incoming message (Protocol message contained an invalid tag (zero).)
Failed to parse at least one incoming message (Protocol message contained an invalid tag (zero).)
5

Failed to parse at least one incoming message (Protocol message contained an invalid tag (zero).)
Failed to parse at least one incoming message (Protocol message contained an invalid tag (zero).)
6

Failed to parse at least one incoming message (Protocol message contained an invalid tag (zero).)
Failed to parse at least one incoming message (Protocol message contained an invalid tag (zero).)
7

Failed to parse at least one incoming message (Protocol message contained an invalid tag (zero).)
Failed to parse at least one incoming message (Protocol message contained an invalid tag (zero).)
8

Failed to parse at least one incoming message (Protocol message contained an invalid tag (zero).)
Failed to parse at least one incoming message (Protocol message contained an invalid tag (zero).)
9

Failed to parse at least one incoming message (Protocol message contained an invalid tag (zero).)
Failed to parse at least one incoming message (Protocol message contained an invalid tag (zero).)
10
The strange thing is this, if we compare the conversions of the Linux PC (done while the application is stopping and starting a new log file) with the ones of the Windows PC, we get the following difference in resulting array lengths:

# windows convert linux convert diff Warning?
1 4066588 4066588 0 ok
2 4065339 4065339 0 ok
3 4065627 4065627 0 ok
4 4027277 4066300 39023 warn
5 3232228 5067058 1834830 warn
6 2658770 4064869 1406099 warn
7 1954977 4066940 2111963 warn
8 1311222 4064738 2753516 warn
9 781981 4067562 3285581 warn
10 312797 4066212 3753415 warn

So for the first three measurements, the conversion is the same, so no sample points are missing. From measurement four and onwards, however, it gets worse with every new conversion. It is fair to say however that all log files have simular size, around 1.3GB so the data should be there.

Does anyone have a clue what is going on here?

Kind regards,

Roy
Post Reply