Add rosbag1 to rosbag1 comparison
This commit is contained in:
parent
cc96973be3
commit
5f99a3be84
@ -2,10 +2,10 @@
|
|||||||
Compare
|
Compare
|
||||||
=======
|
=======
|
||||||
|
|
||||||
Check if the contents of a ``rosbag1`` and ``rosbag2`` file are identical. The provided Dockerfile creates an execution environment for the script. Run from the root of this repository::
|
Check if the contents of a ``rosbag1`` and another ``rosbag1`` or ``rosbag2`` file are identical. The provided Dockerfile creates an execution environment for the script. Run from the root of this repository::
|
||||||
|
|
||||||
$ docker build -t rosbags/compare -f tools/compare/Dockerfile .
|
$ docker build -t rosbags/compare -f tools/compare/Dockerfile .
|
||||||
|
|
||||||
The docker image expects that the rosbag1 and rosbag2 files to be mounted ``/rosbag1`` and ``/rosbag2`` respectively::
|
The docker image expects that the first rosbag1 and second rosbag1 or rosbag2 files to be mounted at ``/rosbag1`` and ``/rosbag2`` respectively::
|
||||||
|
|
||||||
$ docker run --rm -v /path/to/rosbag1.bag:/rosbag1 -v /path/to/rosbag2:/rosbag2 rosbags/compare
|
$ docker run --rm -v /path/to/rosbag1.bag:/rosbag1 -v /path/to/rosbag2:/rosbag2 rosbags/compare
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
# Copyright 2020-2021 Ternaris.
|
# Copyright 2020-2021 Ternaris.
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
"""Tool checking if Rosbag1 and Rosbag2 contents are equal."""
|
"""Tool checking if contents of two rosbags are equal."""
|
||||||
|
|
||||||
# pylint: disable=import-error
|
# pylint: disable=import-error
|
||||||
|
|
||||||
@ -9,6 +9,7 @@ from __future__ import annotations
|
|||||||
import array
|
import array
|
||||||
import math
|
import math
|
||||||
import sys
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
from unittest.mock import Mock
|
from unittest.mock import Mock
|
||||||
|
|
||||||
@ -24,15 +25,15 @@ rosgraph_msgs.msg.TopicStatistics = Mock()
|
|||||||
import rosbag.bag # type:ignore # noqa: E402 pylint: disable=wrong-import-position
|
import rosbag.bag # type:ignore # noqa: E402 pylint: disable=wrong-import-position
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Any, List
|
from typing import Any, List, Union
|
||||||
|
|
||||||
from rosbag.bag import _Connection_Info
|
from rosbag.bag import _Connection_Info
|
||||||
|
|
||||||
|
|
||||||
class Reader: # pylint: disable=too-few-public-methods
|
class Reader: # pylint: disable=too-few-public-methods
|
||||||
"""Mimimal shim using rosbag2_py to emulate rosbag2 API."""
|
"""Mimimal shim using rosbag2_py to emulate rosbags API."""
|
||||||
|
|
||||||
def __init__(self, path: str):
|
def __init__(self, path: Union[str, Path]):
|
||||||
"""Initialize reader shim."""
|
"""Initialize reader shim."""
|
||||||
self.reader = SequentialReader()
|
self.reader = SequentialReader()
|
||||||
self.reader.open(StorageOptions(path, 'sqlite3'), ConverterOptions('', ''))
|
self.reader.open(StorageOptions(path, 'sqlite3'), ConverterOptions('', ''))
|
||||||
@ -106,7 +107,32 @@ def compare(ref: Any, msg: Any):
|
|||||||
assert ref == msg
|
assert ref == msg
|
||||||
|
|
||||||
|
|
||||||
def main(path1: str, path2: str):
|
def main_bag1_bag1(path1: Path, path2: Path):
|
||||||
|
"""Compare rosbag1 to rosbag1 message by message.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
path1: Rosbag1 filename.
|
||||||
|
path2: Rosbag1 filename.
|
||||||
|
|
||||||
|
"""
|
||||||
|
reader1 = rosbag.bag.Bag(path1)
|
||||||
|
reader2 = rosbag.bag.Bag(path2)
|
||||||
|
src1 = reader1.read_messages(raw=True, return_connection_header=True)
|
||||||
|
src2 = reader2.read_messages(raw=True, return_connection_header=True)
|
||||||
|
|
||||||
|
for msg1, msg2 in zip(src1, src2):
|
||||||
|
assert msg1.connection_header == msg2.connection_header
|
||||||
|
assert msg1.message[:-2] == msg2.message[:-2]
|
||||||
|
assert msg1.timestamp == msg2.timestamp
|
||||||
|
assert msg1.topic == msg2.topic
|
||||||
|
|
||||||
|
assert next(src1, None) is None
|
||||||
|
assert next(src2, None) is None
|
||||||
|
|
||||||
|
print('Bags are identical.') # noqa: T001
|
||||||
|
|
||||||
|
|
||||||
|
def main_bag1_bag2(path1: Path, path2: Path):
|
||||||
"""Compare rosbag1 to rosbag2 message by message.
|
"""Compare rosbag1 to rosbag2 message by message.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@ -135,4 +161,7 @@ if __name__ == '__main__':
|
|||||||
if len(sys.argv) != 3:
|
if len(sys.argv) != 3:
|
||||||
print(f'Usage: {sys.argv} [rosbag1] [rosbag2]') # noqa: T001
|
print(f'Usage: {sys.argv} [rosbag1] [rosbag2]') # noqa: T001
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
main(sys.argv[1], sys.argv[2])
|
arg1 = Path(sys.argv[1])
|
||||||
|
arg2 = Path(sys.argv[2])
|
||||||
|
main = main_bag1_bag2 if arg2.is_dir() else main_bag1_bag1
|
||||||
|
main(arg1, arg2)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user