rknn_yolo_node
是一个ROS节点,使用RKNN(Rockchip NPU神经网络API)模型进行对象检测。它订阅一个图像话题,使用YOLO(You Only Look Once)对象检测算法处理图像,并发布检测结果。
- yolov5 detection
- yolov8 detection
- yolov8 detection with sahi
- yolov8 segmentation
- yolov8 pose
- yolov8 obb
目前只在rk3588中测试过,rk3588安装的是ubuntu22.04 gnome desktop版本,ros1安装的是o版本。在ubuntu22.04中,你可以通过apt安装ros-desktop-full-dev和https://wiki.debian.org/DebianScience/Robotics/ROS/Packages 中列出的大多数其他包(有些在Debian中,但还未在Ubuntu中,它落后于Debian的机器人技术发布)。可能你需要从https://github.com/ros-o 和官方的GitHub仓库(如rqt)中编译一些源代码包 - 如果有一个ros-o版本包含了一些还未在官方仓库中的补丁,请使用ros-o版本。
raw_img_topic_name
(sensor_msgs/Image
): 此话题可以动态配置。节点订阅此话题以接收用于对象检测的原始图像。默认话题名称是/camera_node/image_raw
。
yolo_output_msg
(vision_msgs/YoloResult
): 此话题发布YOLO对象检测的结果。每条消息包括检测到的对象及其边界框。yolo_output_img_msg
(sensor_msgs/Image
): 如果enable_draw
参数设置为True
,此话题将发布带有突出显示的检测对象的图像。
~do_yolo
(ros_rknn_yolo/DoYolo
): 此服务在提供的图像上执行YOLO对象检测,并返回检测结果。
~rknn_model_function
(字符串,默认值: 'yolov8_func'): RKNN模型后处理函数文件的名称。~rknn_model_path
(字符串,默认值: '/home/xiaoqiang/Documents/ros/src/ros_rknn_yolo/model/yolov8s.rknn'): RKNN模型文件的路径。~enable_streaming_detect
(布尔值,默认值:False
): 如果为True
,节点将连续处理来自raw_img_topic_name
话题的图像。~enable_crop
(布尔值,默认值:False
): 如果为True
,对象检测结果将包含其裁剪图像。~enable_draw
(布尔值,默认值:False
): 如果为True
,节点将发布带有突出显示的检测对象的图像到yolo_output_img_msg
话题。~drop_interval
(整数,默认值: 1): 丢弃帧的间隔,用于控制处理速度。~obj_thresh
(浮点数,默认值: 0.25): 对象检测的置信度阈值。~nms_thresh
(浮点数,默认值: 0.45): 对象检测中非最大抑制的阈值。~classes
(字符串列表): 模型可以检测的对象类别的列表。~tpes
(整数,默认值: 1): 用于并行处理的线程池执行器的数量。~npu_start_id
(整数,默认值: 0): NPU(神经处理单元)的起始ID。~hide_label
(布尔值,默认值:False
): 如果为True
,节点将不会发布带有检测对象名称的图像。
enable_crop
(布尔值): 启用或禁用对象检测结果图像裁剪。enable_draw
(布尔值): 启用或禁用在发布的图像中突出显示检测到的对象。enable_streaming_detect
(布尔值): 启用或禁用连续图像处理。drop_interval
(整数): 设置丢弃帧的间隔,以控制处理速度。raw_img_topic_name
(字符串): 设置要订阅的图像话题的名称。
git克隆然后catkin_make, 依赖的vision_msgs包在这里:http://git.bwbot.org/publish/vision_msgs.git
使用catkin编译后,您需要执行sudo ./fix_rknn2_runtime
来更新rknn2_runtime,以确保npu库函数版本的一致性。
xiaoqiang_yolo.launch
是一个参考文件,它启动了两个rknn_yolo_node
节点,名为yolo_node_1
和yolo_node_2
。这两个节点都使用ros_rknn_yolo
包中的rknn_yolo_node.sh
脚本。
请注意,rknn_yolo_node.sh
脚本在Python虚拟环境中运行。这是因为我们的rknn_yolo_node
节点依赖于特定版本的Python库,这些库安装在虚拟环境中。因此,当我们启动yolo_node_1
和yolo_node_2
节点时,我们实际上是在Python虚拟环境中启动rknn_yolo_node.sh
脚本,而不是直接启动rknn_yolo_node
。
每个节点在启动时加载一个默认的参数配置文件,位于ros_rknn_yolo
包的config
目录中。对于yolo_node_1
,默认配置文件是default.yaml
,对于yolo_node_2
,它是default2.yaml
。
如果use_custom_setting
参数设置为true
,每个节点还加载一个额外的参数配置文件。对于yolo_node_1
,这个文件是do_yolo_1.yaml
,对于yolo_node_2
,它是do_yolo_2.yaml
。这些文件位于startup
包的params
目录中。
每个节点发布两个话题:yolo_output_msg
和yolo_output_img_msg
。这些话题的名称在启动文件中被重映射。对于yolo_node_1
,yolo_output_msg
被重映射为/yolo_node_1/yolo_result
,yolo_output_img_msg
被重映射为/yolo_node_1/yolo_result_img
。对于yolo_node_2
,yolo_output_msg
被重映射为/yolo_node_2/yolo_result
,yolo_output_img_msg
被重映射为/yolo_node_2/yolo_result_img
。
要运行此启动文件,您可以在终端中输入以下命令:
roslaunch ros_rknn_yolo xiaoqiang_yolo.launch
如果您想使用自定义参数配置,可以在运行命令时添加use_custom_setting:=true
:
roslaunch ros_rknn_yolo xiaoqiang_yolo.launch use_custom_setting:=true
要运行基本测试,请按照以下步骤操作:
- 导航到
ros_rknn_yolo
包的测试目录:
roscd ros_rknn_yolo/test
- 运行
bus_do_yolo_srv.py
脚本。此脚本向~do_yolo
服务发送一个服务请求,触发YOLO对象检测过程:
python bus_do_yolo_srv.py
- 观察输出。脚本将把检测结果打印到控制台。每个结果包括检测对象的类别和边界框。
请注意,bus_do_yolo_srv.py
脚本需要一个正在运行的rknn_yolo_node
实例。在运行测试之前,请确保启动节点:
roslaunch ros_rknn_yolo xiaoqiang_yolo.launch