micro-ROS / micro-ROS/micro_ros_setup

Continuous Serialization and Image Data Streaming

Offen
#676 12 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Shell
Sterne
509
Forks
183
Ø Merge
22 Std. 26 Min.
Gemergte PRs (30 T.)
7

Beschreibung

Issue template

  • Hardware description: MAX78000 / Custom board
  • RTOS: FreeRTOS
  • Installation type: micro_ros_setup / custom static library
  • Version or commit hash: Humble

Hello - I'm an engineer with Analog Devices and I've been working on micro-ros support for our microcontrollers, starting with our embedded AI micros. I've completed the port and custom transports following the excellent tutorials, so first off thank you for the great documentation and project. I would eventually like to open a PR with official part support for our MSDK microcontrollers, and I'm building up a cool demo using an OpenManipulator-X running some custom object detection on our MAX78000.

Let me know if there's a better channel/repo to go through for questions. I couldn't get the Slack channel invite to work.

My current challenge is related to the topic of continuous serialization mentioned in the bottom part of this tutorials page.

I'm currently publishing a sensor_msgs/image image successfully, but the transmissions are very slow since the message is broken up into many packets. I would like some way to continuously stream the image data instead, but still comply with the expected message framing protocol. So...

  1. Is "continuous serialization" what I'm looking for?
  2. The tutorial says the ping_uros_agent example shows an example for continuous serialization of image data, but I don't see it. Are there any examples for this?
  3. I can sort of guess at what the APIs do based on the tutorial, but the API documentation for the microcdr and continuous_serialization modules are somewhat limited. I'm confused about what the ucdr_alignment functions do, and also whether it's possible stream image data row by row from the serialization callback. In the given example does writing into the ucdr buffer push the data out into the transport layer?
// Implementation example:
void serialization_cb(ucdrBuffer * ucdr){
    size_t len = 0;
    micro_ros_fragment_t fragment;

    // Serialize array size
    ucdr_serialize_uint32_t(ucdr, IMAGE_BYTES);

    while(len < IMAGE_BYTES){
      // Wait for new image "fragment"
      ...

      // Serialize data fragment
      ucdr_serialize_array_uint8_t(ucdr, fragment.data, fragment.len); // <-- (JC):  Does this go out to the transport layer?...
      len += fragment.len;
    }
}  // ... or is the data finally sent here, when the callback returns?  

I also have some more general suggestions/questions related to some challenges I had in developing the custom transports, and would love to contribute back to the project in any way I can.

Thank you,
Jake

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit dem Abschnitt zur kontinuierlichen Serialisierung im micro-ROS-Programmier-Tutorial und vergleiche ihn mit rclc/ping_uros_agent/main.c. Sieh dir anschließend die API-Dokumentation von microcdr und continuous_serialization an. Als abgeschlossen gilt die Aufgabe, wenn das Verhalten von Puffer und Transport dokumentiert, ucdr_alignment erklärt und ein funktionierendes Image-Streaming-Beispiel hinzugefügt oder darauf verwiesen wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
c
Bereich
embedded-iot, networking
Issue-Typ
Dokumentation
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
22/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.