前言
在学习了ROS 2官方教程之后,我决定以自导自演的方式,给自己出题来实践所学知识,以加深对ROS 2的各个概念和使用方式的理解。我将把我的学习过程记录在博客中,并将代码放在我的GitHub仓库中https://github.com/YuAndWang/ROS2_Case(当然博客中也会贴上代码),后面有新的案例将会放到对应的章节之后,供大家参考和学习。
欢迎━(`∀´)ノ亻! 大家一起出题,一起探讨!希望我的实践过程对你理解ROS 2有所帮助。如果你有任何问题或建议,欢迎提出!谢谢~~~
10.节点node
节点是ROS 2中最基本的通信单元。
10.1案例1:object_recognition_node
我想实现使用OpenCV库进行图像识别并显示识别结果。它加载一张图片,对其进行颜色识别,然后在图像中绘制识别结果的轮廓并显示出来。
实现过程如下:
建立功能包
打开一个新的终端,进入到我的工作空间目录,并且应该在 src 目录中创建包,而不是在工作空间的根目录中创建包。因此,进入到 my_ws/src
,并运行包创建命令:
cd my_ws/src
ros2 pkg create --build-type ament_python object_recognition_node_py
节点 object_recognition.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@作者: 王仰旭
@说明: 使用OpenCV进行图像识别并显示识别结果的节点代码, 无发布消息
"""
import rclpy
from rclpy.node import Node
import cv2
import numpy as np # Python数值计算库
lower_red = np.array([0, 90, 128])
upper_red = np.array([180, 255, 255])
def object_detect(image):
hsv_img = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # 图像从BGR颜色模型转换为HSV模型
mask_red = cv2.inRange(hsv_img, lower_red, upper_red) # 图像二值化
cv2.imshow("mask_red", mask_red)
contours, hierarchy = cv2.findContours(mask_red