在ubuntu中安装darknet_ros发送yolo话题

创建的ros工作空间ros_ws

第一步:进入/ros_ws/src中,打开终端,克隆darknet_ros包到该目录中:

git clone https://github.com/leggedrobotics/darknet_ros.git

第二步:需要进入darknet_ros包的根目录,并更新子模块:

cd darknet_ros

git submodule update --init --recursive

但是我执行该命令时提示如下

xtark@xtark-robot:~/ros_ws/src/darknet_ros$ git submodule update --init --recursive Submodule 'darknet' (https://github.com/leggedrobotics/darknet) registered for path 'darknet' fatal: destination path '/home/xtark/ros_ws/src/darknet_ros/darknet' already exists and is not an empty directory. fatal: clone of 'https://github.com/leggedrobotics/darknet' into submodule path '/home/xtark/ros_ws/src/darknet_ros/darknet' failed Failed to clone 'darknet'. Retry scheduled fatal: destination path '/home/xtark/ros_ws/src/darknet_ros/darknet' already exists and is not an empty directory. fatal: clone of 'https://github.com/leggedrobotics/darknet' into submodule path '/home/xtark/ros_ws/src/darknet_ros/darknet' failed Failed to clone 'darknet' a second time, aborting

查询原因,如下所示:

根据提供的终端输出,提示`fatal: destination path '/home/xtark/ros_ws/src/darknet_ros/darknet' already exists and is not an empty directory.`提示当前目录下已经存在了名为'darknet'的子模块,并且不是个空目录,因此子模块无法被克隆。

这种情况可能是由于之前已经尝试过克隆子模块但未能成功,或者手动创建了'darknet'子目录导致的。可以尝试以下步骤来解决问题:

1. 在克隆的darknet_ros包中打开终端,删除'darknet'文件夹。

   ```
   rm -rf /home/xtark/ros_ws/src/darknet_ros/darknet
   ```

2. 重新初始化子模块并更新。

   ```
   cd /home/xtark/ros_ws/src/darknet_ros/
   git submodule init
   git submodule update
   ```

最终显示如下:

xtark@xtark-robot:~/ros_ws/src/darknet_ros$ git submodule update Cloning into '/home/xtark/ros_ws/src/darknet_ros/darknet'... Submodule path 'darknet': checked out 'd22bbf38bd012f13d2b50c8d98149cd4a9889b7a'

则命令git submodule update已经成功地将'darknet'子模块克隆到了您的ROS工作空间中的'darknet_ros'目录下。

最后进入ros_ws的终端执行catkin_make完成编译即可。

不过此时编译时间比较久,因为ros_ws/src/darknet_ros/darknet_ros/yolo_network_config/weights文件下有没有weights权重文件

这个最好自己下载粘贴在文件夹中,否则编译会漫长到怀疑人生。。。。

到这里darknet_ros的编译就结束了。下面是把自己训练出来的模型搬移过去,修改相关参数了。

第一步:需要把训练出来的权重文件放在ros_ws/src/darknet_ros/darknet_ros/yolo_network_config/weights中,将cfg文件放在ros_ws/src/darknet_ros/darknet_ros/yolo_network_config/cfg文件夹中。

第二步:编写你自己的yaml文件,在ros_ws/src/darknet_ros/darknet_ros/config中创建一个新的yaml文件,格式可以参照原有的yolo.yaml,都差不多。把里面的权重和cfg文件换为自己的,把类别名称也换为自己的(注意:顺序得与训练时写在names文件中的顺序一致)

第三步:下载摄像头驱动

sudo apt-get install ros-melodic-usb-cam

然后发布摄像头话题roslaunch usb_cam usb_cam-test.launch

会成功显示一个界面显示摄像头前的东西。。。。

第四步:修改ros.yaml文件

打开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

 第五步修改darknet_ros.launch 文件

文件详细如下:

<?xml version="1.0" encoding="utf-8"?>

<launch>

!-- Console launch prefix --> <arg name="launch_prefix" default=""/>

<!--<arg name="image" default="/camera/rgb/image_raw" />--> <arg name="image" default="/usb_cam/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/yolov3-tiny.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>

 黄色背景是修改的部分,红色字体是自己新建的yaml文件

执行该文件发现一直显示等待图像显示,怀疑无法正确连接摄像头,但是之前执行roslaunch usb_cam usb_cam-test.launch时,成功调用了摄像头。由此我在决定darknet_ros。launch文件中创建一个usb_cam节点,如下

<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen">

</node>

大致是这样的,黄色背景是后面修改的部分,省略号表示内容与上文一致。

<launch>

<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen">

...

<!-- 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="/usb_cam/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>

后边再执行roslaunch darknet_ros darknet_ros.launch 就成功啦

显示如下:

23年7月5日补充:本文中darknet_ros自动将输入的视频格式相互转换,实验中发现当输入视频格式为BRG时,它会自己转换为RGB格式的视频;反之,输入视频格式为RGB时,它会自己转换为BRG格式的视频,然后视频中原本红色就会变成蓝色。

  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值