初试darknet_ros
1.安装darknet_ros
1.1下载源码
cd catkin_workspace/src
git clone --recursive git@github.com:leggedrobotics/darknet_ros.git
cd ../
推荐采用git clone
。
如果下载zip安装包,需在catkin_workspace/src/darknet_ros/darknet/
下载darknet。
建议提前下载好默认编译所需权重,放在catkin_workspace/src/darknet_ros/darknet_ros/yolo_network_config/weights/
中以减少编译时间,所需权重下载链接为:yolov2、yolov2-tiny、yolov3。
1.2编译
catkin_make -DCMAKE_BUILD_TYPE=Release
可能错误
问题1
YoloObjectDetector.cpp:516:49: error: no matching function for call to ‘_IplImage::_IplImage(cv::Mat&)’
则需对catkin_workspace/src/darknet_ros/darknet_ros/src/YoloObjectDetector.cpp
文件进行修改,应为line515至line519,但具体结合文件。
修改前:
// line515:ling519
IplImageWithHeader_ YoloObjectDetector::getIplImageWithHeader() {
IplImage* ROS_img = new IplImage(camImageCopy_);
IplImageWithHeader_ header = {.image = ROS_img, .header = imageHeader_};
return header;
}
修改后:
IplImageWithHeader_ YoloObjectDetector::getIplImageWithHeader() {
IplImage ROS_img = cvIplImage(camImageCopy_);
IplImageWithHeader_ header = {.image = &ROS_img, .header = imageHeader_};
return header;
}
修改后再次编译,应可成功编译。
2.安装usb_cam
sudo apt-get install ros-kinetic-usb-cam
3.修改darknet_ros配置文件
修改catkin_workspace/src/darknet_ros/darknet_ros/config/ros.yaml
,以订阅摄像头图像。
subscribers:
camera_reading:
topic: /camera/rgb/image_raw
queue_size: 1
...
修改为
subscribers:
camera_reading:
topic: /usb_cam/image_raw
queue_size: 1
...
4.运行测试
cd catkin_workspace/src
source devel/setup.bash
roslaunch darknet_ros darknet_ros.launch
roslaunch usb_cam usb_cam-test.launch
5.使用其它YOLO模型
以YOLO-s为例。
5.1yolos.yaml
yolos.yaml
路径为catkin_workspace/src/darknet_ros/darknet_ros/config/yolos.yaml
,其内容为
yolo_model:
config_file:
name: yolos.cfg
weight_file:
name: yolos_32000.weights
threshold:
value: 0.3
detection_classes:
names:
- soldier
5.2yolo_s.launch
yolo_s.launch
路径为catkin_workspace/src/darknet_ros/darknet_ros/launch/yolo_s.launc
,其内容为:
<?xml version="1.0" encoding="utf-8"?>
<launch>
<!-- Console launch prefix -->
<arg name="launch_prefix" default=""/>
<arg name="image" default="/camera/rgb/image_raw" />
<!-- Config and weights folder. -->
<arg name="yolo_weights_path" default="$(find darknet_ros)/yolo_network_config/weights"/>
<arg name="yolo_config_path" default="$(find darknet_ros)/yolo_network_config/cfg"/>
<!-- ROS and network parameter files -->
<arg name="ros_param_file" default="$(find darknet_ros)/config/ros.yaml"/>
<arg name="network_param_file" default="$(find darknet_ros)/config/yolos.yaml"/>
<!-- Load parameters -->
<rosparam command="load" ns="darknet_ros" file="$(arg ros_param_file)"/>
<rosparam command="load" ns="darknet_ros" file="$(arg network_param_file)"/>
<!-- Start darknet and ros wrapper -->
<node pkg="darknet_ros" type="darknet_ros" name="darknet_ros" output="screen" launch-prefix="$(arg launch_prefix)">
<param name="weights_path" value="$(arg yolo_weights_path)" />
<param name="config_path" value="$(arg yolo_config_path)" />
<remap from="camera/rgb/image_raw" to="$(arg image)" />
</node>
<!--<node name="republish" type="republish" pkg="image_transport" output="screen" args="compressed in:=/front_camera/image_raw raw out:=/camera/image_raw" /> -->
</launch>
5.3模型的yolos.cfg
文件和yolos.weights
文件
yolos.cfg
路径为catkin_workspace/src/darknet_ros/darknet_ros/yolo_network_config/cfg/yolos.cfg
。
yolos.cfg
路径为catkin_workspace/src/darknet_ros/darknet_ros/yolo_network_config/cfg/yolos.weights
。