Skip to content

Commit 45239f7

Browse files
atofetti-botbotbjsowa
authored andcommitted
fix: numpy.ndarray not handled in CBOR serialization (backport #1161)
* Fix numpy.ndarray not handled in CBOR serialization * Add test for numpy.ndarray handling in CBOR conversion
1 parent b548546 commit 45239f7

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

rosbridge_library/src/rosbridge_library/internal/cbor_conversion.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ def extract_cbor_values(msg: ROSMessage) -> dict[str, Any]:
9898
packed = struct.pack(fmt_to_length, *val)
9999
out[slot] = CBORTag(tag=tag, value=packed)
100100

101+
# fixed-size primitive arrays
102+
elif hasattr(val, "tolist"):
103+
out[slot] = val.tolist()
104+
101105
# array of messages
102106
elif type(val) in LIST_TYPES:
103107
out[slot] = [extract_cbor_values(i) for i in val]

rosbridge_library/test/internal/test_cbor_conversion.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
TAGGED_ARRAY_FORMATS,
1212
extract_cbor_values,
1313
)
14+
from sensor_msgs.msg import Imu
1415
from std_msgs.msg import (
1516
Bool,
1617
Float32,
@@ -203,6 +204,13 @@ def test_unicode_keys(self) -> None:
203204
for key in keys:
204205
self.assertEqual(type(key), str)
205206

207+
def test_numpy_array(self) -> None:
208+
msg = Imu()
209+
extracted = extract_cbor_values(msg)
210+
covariance = extracted["orientation_covariance"]
211+
self.assertEqual(type(covariance), list)
212+
self.assertEqual(len(covariance), 9)
213+
206214

207215
if __name__ == "__main__":
208216
unittest.main()

0 commit comments

Comments
 (0)