This is a ROS 2 wrapper around darknet, an open source neural network framework.
This node can run object detectors like YOLO v3 or YOLO v7 on images and video streams.
~/images
(typesensor_msgs/msg/Image
) - Input mages to feed to the detector
~/detections
(typevision_msgs/msg/Detection2DArray
) - Objects detected in an image (if any)
network.config
- a path to a file describing a darknet detector networknetwork.weights
- a path to a file with weights for the given networknetwork.class_names
- a path to a file with names of classes the network can detect (1 per line)detection.threshold
- Minimum probability of a detection to be publisheddetection.nms_threshold
- Non-maximal Suppression threshold - controls filtering of overlapping boxes
This package depends on darknet. If you can't use CUDA but want to use your CPU instead make sure to build it with the flag -DENABLE_CUDA=OFF
and potentially also disabling multi-threading with -DCMAKE_DISABLE_FIND_PACKAGE_OpenMP=TRUE
.
Compiling this package with
$ colcon build --cmake-args -DDOWNLOAD_YOLO_CONFIG=ON
will automatically download the pretrained YOLO v3, v4 and v7 configuration files.
You can then launch the detector node with
$ ros2 launch openrobotics_darknet_ros detector_launch.py rgb_image:=/topic
optionally supplying a desired parameter file detector_parameters:=path/to/detector_node_params.yaml
.
You can also train YOLO to detect custom objects like described here and create the following as detector_node_params.yaml
:
/**:
ros__parameters:
network:
config: "./your-yolo-config.cfg"
weights: "./your-yolo-weights.weights"
class_names: "./your-cocos.names"
detection:
threshold: 0.25
nms_threshold: 0.45
Finally you can run the detector node with
$ ros2 run openrobotics_darknet_ros detector_node --ros-args --params-file path/to/detector_node_params.yaml
and publish images on ~/images
to get the node to detect objects. You can also manually remap an external topic to the ~/images
topic with:
$ ros2 run openrobotics_darknet_ros detector_node --ros-args --params-file path/to/detector_node_params.yaml -r '~/images:=/your/camera/topic'