一、说明
当您运行 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 similarROS_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(TARGETSpub_camsub_camDESTINATION lib/${PROJECT_NAME})
四、修改源码
将pub_cam.cpp和sub_cam.cpp(从我的存储库)复制到 /dev_opencv/src。
cd open_dev_ws
colcon build
source ./install/setup.bash// for publiser runros2 run dev_opencv pub_cam// for subscriberros2 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 runros2 run dev_opencv_py cam_pub// for subscriberros2 run dev_opencv_py cam_sub
七、后记
通过以上修改,系统执行正常。OK,感谢您的阅读。马库斯·布赫霍尔茨
·