Browse Source

Automatically convert from Python dict to arrow array in ROS2 publish

tags/v0.2.5-alpha.3
Philipp Oppermann 2 years ago
parent
commit
2a19044919
Failed to extract signature
2 changed files with 10 additions and 3 deletions
  1. +1
    -2
      examples/python-ros2-dataflow/random_turtle.py
  2. +9
    -1
      libraries/extensions/ros2-bridge/python/src/lib.rs

+ 1
- 2
examples/python-ros2-dataflow/random_turtle.py View File

@@ -51,8 +51,7 @@ for i in range(500):
},
}

direction_arrow = pa.scalar(direction)
twist_writer.publish(direction_arrow)
twist_writer.publish(direction)

case "external":
pose = event.inner()[0].as_py()


+ 9
- 1
libraries/extensions/ros2-bridge/python/src/lib.rs View File

@@ -11,7 +11,7 @@ use eyre::{eyre, Context, ContextCompat};
use futures::{Stream, StreamExt};
use pyo3::{
prelude::{pyclass, pymethods},
types::{PyList, PyModule},
types::{PyDict, PyList, PyModule},
PyAny, PyObject, PyResult, Python,
};
use typed::{
@@ -184,7 +184,15 @@ impl Ros2Publisher {
pub fn publish(&self, data: &PyAny) -> eyre::Result<()> {
let pyarrow = PyModule::import(data.py(), "pyarrow")?;

let data = if data.is_instance_of::<PyDict>() {
// convert to arrow struct scalar
pyarrow.getattr("scalar")?.call1((data,))?
} else {
data
};

let data = if data.is_instance(pyarrow.getattr("StructScalar")?)? {
// convert to arrow array
let list = PyList::new(data.py(), [data]);
pyarrow.getattr("array")?.call1((list,))?
} else {


Loading…
Cancel
Save