Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ROS2数据流

确保ROS2环境已正确安装和配置

Dora通过ros2-client与ROS进行交互 C++ API为了与ROS通信,需要启用ROS2桥接功能。

准备相关依赖

由于例子与turtlesimAddTwoInts相关

$ sudo apt install ros-jazzy-turtlesim ros-jazzy-examples-rclcpp-minimal-service

生成带有ROS2 message 的 Dora API

$ source /opt/ros/jazzy/setup.bash
$ cargo build --package dora-node-api-cxx --features ros2-bridge

Note

  1. 当需要使用新的消息接口时,即包更新或AMENT_PREFIX_PATH更新时需要重新进行生成
  2. 在v0.3.13前,环境变量中残留的无消息ROS2 package会导致默认的--debug构建失败,请尝试在使用cargo生成API时添加--release参数

整理需要用到的头文件、C++源文件

$ mkdir build
$ cp ../../target/cxxbridge/dora-node-api-cxx/dora-node-api.cc ./build/dora-node-api.cc
$ cp ../../target/cxxbridge/dora-node-api-cxx/dora-node-api.h ./build/dora-node-api.h
$ cp ../../target/cxxbridge/dora-node-api-cxx/dora-ros2-bindings.cc ./build/dora-ros2-bindings.cc
$ cp ../../target/cxxbridge/dora-node-api-cxx/dora-ros2-bindings.h ./build/dora-ros2-bindings.h

Note

  1. 在v0.3.13版本前,所有的消息及与Dora相关的API生成在dora-node-api.hdora-ros2-bindings.h中,其对应的.cc需要与使用了该接口的C++源文件一起编译
  2. 在v0.3.13版本后,不同的ROS2消息生成在独立的文件中,具体可以查看生成API后查看target/cxxbridge/dora-node-api-cxx/install。请根据需要自行编译需要的C++源文件
  3. 截至v0.3.13版本(2025-11-24),Dora C++ API尚未支持ROS2中的Action通信机制

编译

$ alias CXX=g++ # clang++ 也可以
$ CXX ./node-rust-api/main.cc ./build/dora-ros2-bindings.cc ./build/dora-node-api.cc -std=c++17 -lm -lrt -ldl -lz -pthread -ldora_node_api_cxx -L ../../target/debug/ -o ./build/node_rust_api

Note

如果生成时使用了--release参数则需将链接目录target/debug/改为target/release

运行

打开另外两个终端

需要使用rmw_fastrtps_cppJazzy 中应该是默认的,如果在.bashrc等地方设置成了别的注意要设置回来。 更改设置后重启daemon,ros2 daemon stop, ros2 daemon start

启动turtlesim

$ source /opt/ros/jazzy/setup.bash
$ ros2 run turtlesim turtlesim_node

启动AddTwoInts服务

$ source /opt/ros/jazzy/setup.bash
$ ros2 run examples_rclcpp_minimal_service service_main

启动Dora节点

$ dora run dataflow.yml

源码

完整源码请参考:dora-examples/cxx-ros2-dataflow