文章目录

一、搭建智能车环境

1、下载包以及编译

1.1、下载源码包

我是使用的别人github上开源出来的代码
进入到你的ros工作空间下的src文件下,打开终端,下载源码包

  1. git clone https://github.com/xmy0916/racecar.git
  2. 1

ROS智能车实现darknet_ros检测物体 - 图1

1.2、编译

进入到工作空间下

  1. cd catkin_ws/
  2. 1
  1. catkin_make
  2. 1

1.3、错误解决

这时候编译会遇到许多错误,依次解决吧
主要安装的版本需要与你自己的ubuntu版本相对应,我的ubuntu版本是18,下面装的是melodic,16的话改成kinetic即可

(1)、controllers相关

  1. sudo apt-get install ros-melodic-gazebo-ros-control
  2. sudo apt-get install ros-melodic-effort-controllers
  3. sudo apt-get install ros-melodic-joint-state-controller
  4. 1
  5. 2
  6. 3
  7. 4

(2)、driver_base相关

  1. sudo apt-get install ros-melodic-driver-base
  2. 1

(3)、ackermann_msgs相关

  1. sudo apt-get install ros-melodic-ackermann-msgs
  2. 1

(4)、Could not find a package configuration file provided by “OpenCV”

通过执行下面代码得到opencv的路径

  1. locate OpenCVConfig.cmake
  2. 1

应该会得到多条路径,选择结尾为OpenCVConfig.cmake的
执行

  1. gedit ~/catkin_ws/src/racecar-master/racecar_gazebo/CMakeLists.txt
  2. 1
  3. 2
修改第七行为你的opencv路径

ROS智能车实现darknet_ros检测物体 - 图2

(5)、findLine.cpp找不到头文件

ROS智能车实现darknet_ros检测物体 - 图3
打开这个cpp文件,修改头文件

  1. #include <opencv-3.4.1-dev/opencv2/core.hpp>
  2. #include <opencv-3.4.1-dev/opencv/highgui.h>
  3. #include <opencv-3.4.1-dev/opencv2/opencv.hpp>
  4. 1
  5. 2
  6. 3
  7. 4

替换成

  1. #include <opencv2/core/core.hpp>
  2. #include <opencv2/highgui/highgui.hpp>
  3. 1
  4. 2

2、启动仿真

2.1、运行小车模型

  1. roslaunch racecar_gazebo racecar.launch
  2. 1

这时回启动gazebo,在里面可以看到一个小车的模型
ROS智能车实现darknet_ros检测物体 - 图4

2.2、运行赛道

运行出来的地图是作者已经做好的,我们后续可以自己创建地图

  1. roslaunch racecar_gazebo racecar_runway.launch
  2. 1

ROS智能车实现darknet_ros检测物体 - 图5

3、自己建立赛道

3.1、建立与保存地图

运行

  1. gazebo
  2. 1

ROS智能车实现darknet_ros检测物体 - 图6
将建立好的地图保存
ROS智能车实现darknet_ros检测物体 - 图7
关闭gazebo,随后在重新启动一次,选择前面保存好的模型
ROS智能车实现darknet_ros检测物体 - 图8
注意坐标点落在模型中的位置
ROS智能车实现darknet_ros检测物体 - 图9
在地图中加入障碍物
ROS智能车实现darknet_ros检测物体 - 图10
保存地图ROS智能车实现darknet_ros检测物体 - 图11

3.2、修改文件

将地图名字改为你保存好的地图名
ROS智能车实现darknet_ros检测物体 - 图12
再次运行赛道,就可以看到已经是你自己建立的赛道了
ROS智能车实现darknet_ros检测物体 - 图13

4、通过自己建立的赛道进行gmapping建图

4.1、gmapping建图

运行

  1. roslaunch racecar_gazebo slam_gmapping.launch
  2. roslaunch racecar_gazebo racecar_runway_navigation.launch
  3. 1
  4. 2

ROS智能车实现darknet_ros检测物体 - 图14
通过WASD控制小车运动,来建图,不过小车运行比较慢,完整建立花费时间比较长
ROS智能车实现darknet_ros检测物体 - 图15
ROS智能车实现darknet_ros检测物体 - 图16

4.2、保存地图

  1. rosrun map_server map_saver -f test_map
  2. 1

这两个文件会保存在你的主目录下,如/home/xx/下,需要将这两个文件文件复制到map文件下
ROS智能车实现darknet_ros检测物体 - 图17

5、小车进行导航运动

5.1、通过WASD控制小车运动

修改文件
ROS智能车实现darknet_ros检测物体 - 图18
启动导航和环境地图,启动rviz

  1. roslaunch racecar_gazebo racecar_rviz.launch
  2. roslaunch racecar_gazebo racecar_runway_navigation.launch
  3. 1
  4. 2

ROS智能车实现darknet_ros检测物体 - 图19
ROS智能车实现darknet_ros检测物体 - 图20
控制小车运行过后
ROS智能车实现darknet_ros检测物体 - 图21

5.2、小车导航运动

安装

  1. sudo apt-get install ros-melodic-teb-local-planner
  2. 1

启动导航和环境地图,启动rviz

  1. roslaunch racecar_gazebo racecar_rviz.launch
  2. roslaunch racecar_gazebo racecar_runway_navigation.launch
  3. 1
  4. 2

在启动py文件

  1. rosrun racecar_gazebo path_pursuit.py
  2. 1

接着在rviz中选择2D Nav Goal给小车发布运动位置小车即可运动(但是运动速度堪忧!!慢的不行。再想想怎么提速吧!!)
ROS智能车实现darknet_ros检测物体 - 图22
ROS智能车实现darknet_ros检测物体 - 图23
ROS智能车实现darknet_ros检测物体 - 图24
ROS智能车实现darknet_ros检测物体 - 图25
到达目的后终端会显示信息
ROS智能车实现darknet_ros检测物体 - 图26

二、下载darknet_ros包

1、克隆包

需要注意的是,不能直接到github网站上去下载,那样下载下来的darknet文件夹里面是空的,只能通过git clone下载,且必须要加上—recursive才能够下载完全。但是这样克隆会报错误。因为需要配置ssh以及生成密匙
这个包是需要放在ros工作空间下的,因此最好是在工作空间下的src文件夹里面进行克隆。不过都行,你不在里面克隆最后复制进去也可以,看个人习惯。
  1. git clone --recursive git@github.com:leggedrobotics/darknet_ros.git
  2. 1

2、配置ssh

2.1、生成密钥

  1. git config --global user.name "填写用户名"
  2. 1
  1. git config --globa user.email "填写邮箱"
  2. 1
  1. ssh-keygen -t rsa -C "填写邮箱"
  2. 1

ROS智能车实现darknet_ros检测物体 - 图27

  1. cat ~/.ssh/id_rsa.pub
  2. 1

该内容就是密钥
ROS智能车实现darknet_ros检测物体 - 图28

2.2、github中添加密钥

进入github网站,点击右上角,选择settings
ROS智能车实现darknet_ros检测物体 - 图29
ROS智能车实现darknet_ros检测物体 - 图30
点击过后,title随便填,Key就填前面终端中获得的密钥
ROS智能车实现darknet_ros检测物体 - 图31
最在克隆即可,会弹出一个窗口,输入密码即可
ROS智能车实现darknet_ros检测物体 - 图32

三、编译

1、下载权重文件

下载这几个权重文件,放在/home/xx/catkin_ws/src/darknet_ros/darknet_ros/yolo_network_config/weights

ROS智能车实现darknet_ros检测物体 - 图33
下载地址:yolov3.weights
yolov2.weights
yolov2-tiny.weights

2、编译

回到ros工作空间下,进行编译

  1. catkin_make -DCMAKE_BUILD_TYPE=Release
  2. 1

ROS智能车实现darknet_ros检测物体 - 图34

不出意外,肯定是会遇到错误的!!!哈哈哈哈哈哈

3、解决错误

3.1、第一个错

ROS智能车实现darknet_ros检测物体 - 图35

根据错误提示的路径找到/usr/local/include/opencv2/core/cvdef.h这个文件。在/usr/local/include/opencv2/core/这个文件夹下打开终端,执行下面代码,这个文件好像是只读的,用管理员才能进行修改。
  1. sudo vim cvdef.h
  2. 1

ROS智能车实现darknet_ros检测物体 - 图36
改了过后再去编译,还会遇到一个错误!!

3.2、第二个错

ROS智能车实现darknet_ros检测物体 - 图37

与上类似,在/usr/local/include/opencv2/highgui/这个文件夹下打开终端,执行下面代码
  1. sudo vim highgui_c.h
  2. 1

找到大概139行左右,将cv::Rect修改为CvRect
ROS智能车实现darknet_ros检测物体 - 图38

在重新编译,应该就是能够通过的!!最好编译通过过后在将修改的地方改回去,万一后面那里用的上呢!!
成功过后截图

ROS智能车实现darknet_ros检测物体 - 图39

四、运行程序

1、修改yaml文件中的话题为智能车摄像头的话题

可以先启动gazebo

  1. roslaunch racecar_gazebo racecar_runway_navigation.launch
  2. 1

然后使用rostopic查看发布的话题
ROS智能车实现darknet_ros检测物体 - 图40

但是这么多与camera有关的话题,那个才是我们需要的呢?因此,我查看了一下小车的模型文件

ROS智能车实现darknet_ros检测物体 - 图41
ROS智能车实现darknet_ros检测物体 - 图42

2、首先需要修改/home/xx/catkin_ws/src/darknet_ros/darknet_ros/config/ros.yaml文件中订阅的话题,将话题改为我们需要订阅的话题,也就是智能车上摄像头发布的话题。

ROS智能车实现darknet_ros检测物体 - 图43

3、运行程序

3.1、启动rviz

  1. roslaunch racecar_gazebo racecar_rviz.launch
  2. 1

ROS智能车实现darknet_ros检测物体 - 图44

3.2、启动gazebo

  1. roslaunch racecar_gazebo racecar_runway_navigation.launch
  2. 1

ROS智能车实现darknet_ros检测物体 - 图45

3.3、启动yolo3检测摄像头看到的物体

  1. roslaunch darknet_ros darknet_ros.launch
  2. 1
如果出现这个错误

ROS智能车实现darknet_ros检测物体 - 图46

这个错误大概率是因为将这个包从windows移动到ubuntu上过后,有些cfg文件识别不到。(这个问题也太难解决了,还是在github上的issues找到解决办法的!!!!)。
回到/home/xx/catkin_ws/src/darknet_ros目录下,打开终端,执行
  1. git stash
  2. 1

ROS智能车实现darknet_ros检测物体 - 图47
再重新运行一次即可。

4、运行结果

4.1、在rviz启动过后,可以在里面添加一个image,这样从rviz中也能看到摄像头的图像

ROS智能车实现darknet_ros检测物体 - 图48
ROS智能车实现darknet_ros检测物体 - 图49

最后在修改Image订阅的话题即可
在你启动了gazebo与yolo过后,可以选择订阅的话题有两个,第一个就是没有进行检测的图像,而第二个就是yolo检测过后的图像

ROS智能车实现darknet_ros检测物体 - 图50

4.2、最终运行结果(如果地图中物体比较单一或者比较少,也可以自己添加一些)

ROS智能车实现darknet_ros检测物体 - 图51
ROS智能车实现darknet_ros检测物体 - 图52
ROS智能车实现darknet_ros检测物体 - 图53

4.3、yolov2的效果好像不是特别好,可以换成v3

找到路径/home/xx/catkin_ws/src/darknet_ros/darknet_ros/config,可以看到一些yaml文件

ROS智能车实现darknet_ros检测物体 - 图54

找到路径/home/xx/catkin_wsc/darknet_ros/darknet_ros/launch

ROS智能车实现darknet_ros检测物体 - 图55
改成你需要改的即可
ROS智能车实现darknet_ros检测物体 - 图56
但是我的用v3跑出来会报错,还在找问题!!
参考链接