ROS2数据流
确保ROS2环境已正确安装和配置
Dora通过ros2-client与ROS进行交互 C++ API为了与ROS通信,需要启用ROS2桥接功能。
准备相关依赖
由于例子与turtlesim和AddTwoInts相关
$ 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
- 当需要使用新的消息接口时,即包更新或
AMENT_PREFIX_PATH更新时需要重新进行生成- 在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
- 在v0.3.13版本前,所有的消息及与Dora相关的API生成在
dora-node-api.h和dora-ros2-bindings.h中,其对应的.cc需要与使用了该接口的C++源文件一起编译- 在v0.3.13版本后,不同的ROS2消息生成在独立的文件中,具体可以查看生成API后查看
target/cxxbridge/dora-node-api-cxx/install。请根据需要自行编译需要的C++源文件- 截至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