一、说明
当您运行 ROS2 应用程序时,通常需要在不同机器的不同位置运行 ROS2 节点。由于 ROS2 在抽象的 DDS 层中使用节点之间的通信,因此我们可以非常轻松地安排通信。
为了充分理解 ROS2 的架构,我建议您熟悉本文。
为了充分理解 ROS2 的架构,我建议您熟悉本文。
出于本文的目的,我传达了Nvidia Jetson Xavier和我的PC。两个单元都运行ROS2狐狸。我将RGB相机连接到Jetso并运行了一个发布商(C++或Python)。PC 运行订阅者(C++ 或 Python)订阅主题并显示视频流。
源代码可以在GitHub上找到。
二、体系结构可以描述
下面我包括 ROS2 命令,用于根据上图运行您的应用程序。应用程序可以在同一台计算机或其他配置上运行,而无需更改。
然而,最重要的是运行应用程序(发布者 — 同一ROS_DOMAIN_ID上的订阅者。为了对齐,您必须导出相同的ID。
//check the ROS environment (both on publisher and subscriber)
env | grep ROS
// you should recive similar
ROS_VERSION=2
ROS_PYTHON_VERSION=3
ROS_DOMAIN_ID=5
ROS_LOCALHOST_ONLY=0
ROS_DISTRO=foxy
// as you can see I adjhsted DOMAIN to 5
//run
export ROS_DOMAIN_ID=5
如果在C++中运行应用程序,
mkdir -p open_dev_ws/src
cd open_dev_ws/src
//created ROS package
ros2 pkg create dev_opencv --dependencies rclcpp std_msgs sensor_msgs cv_bridge image_transport OpenCV
三、修改 CMakeList.txt
修改你的CMakeList.txt(另请参阅我的Github)。在这里,我显示CMakeList.txt以构建发布者和订阅者。您必须选择您的机器类型。
add_executable(pub_cam src/pub_cam.cpp)
ament_target_dependencies(pub_cam rclcpp std_msgs sensor_msgs cv_bridge image_transport OpenCV)
add_executable(sub_cam src/sub_cam.cpp)
ament_target_dependencies(sub_cam rclcpp std_msgs sensor_msgs cv_bridge image_transport OpenCV)
install(TARGETS
pub_cam
sub_cam
DESTINATION lib/${PROJECT_NAME}
)
四、修改源码
将pub_cam.cpp和sub_cam.cpp(从我的存储库)复制到 /dev_opencv/src。
cd open_dev_ws
colcon build
source ./install/setup.bash
// for publiser run
ros2 run dev_opencv pub_cam
// for subscriber
ros2 run dev_opencv sub_cam
如果你在 Python 中运行你的应用程序,
mkdir -p /dev_opencv_py/src
cd dev_opencv_py/src
//create ROS package
ros2 pkg create --build-type ament_python dev_opencv_py --dependencies rclpy image_transport cv_bridge sensor_msgs std_msgs opencv2
复制 Python 脚本以dev_opencv_py和修改 setup.py,
entry_points={
'console_scripts': [
'cam_pub = opencv_tools.cam_pub:main',
'cam_sub = opencv_tools.cam_sub:main',
],
},
五、修改在包中.xml更改
from
<depend>opencv2</depend>
to
<depend>opencv-python</depend>
六、运行以下命令
cd dev_open_py
colcon build
source ./install/setup.bash
// for publiser run
ros2 run dev_opencv_py cam_pub
// for subscriber
ros2 run dev_opencv_py cam_sub
七、后记
通过以上修改,系统执行正常。OK,感谢您的阅读。马库斯·布赫霍尔茨
·