ROS智能车实现darknet_ros检测物体

article/2025/8/18 21:05:50

文章目录

  • 一、搭建智能车环境
    • 1、下载包以及编译
      • 1.1、下载源码包
      • 1.2、编译
      • 1.3、错误解决
        • (1)、controllers相关
        • (2)、driver_base相关
        • (3)、ackermann_msgs相关
        • (4)、Could not find a package configuration file provided by "OpenCV"
        • (5)、findLine.cpp找不到头文件
    • 2、启动仿真
      • 2.1、运行小车模型
      • 2.2、运行赛道
    • 3、自己建立赛道
      • 3.1、建立与保存地图
      • 3.2、修改文件
    • 4、通过自己建立的赛道进行gmapping建图
      • 4.1、gmapping建图
      • 4.2、保存地图
    • 5、小车进行导航运动
      • 5.1、通过WASD控制小车运动
      • 5.2、小车导航运动
  • 二、下载darknet_ros包
    • 1、克隆包
    • 2、配置ssh
      • 2.1、生成密钥
      • 2.2、github中添加密钥
  • 三、编译
    • 1、下载权重文件
    • 2、编译
    • 3、解决错误
      • 3.1、第一个错
      • 3.2、第二个错
  • 四、运行程序
    • 1、修改yaml文件中的话题为智能车摄像头的话题
    • 2、首先需要修改/home/xx/catkin_ws/src/darknet_ros/darknet_ros/config/ros.yaml文件中订阅的话题,将话题改为我们需要订阅的话题,也就是智能车上摄像头发布的话题。
    • 3、运行程序
      • 3.1、启动rviz
      • 3.2、启动gazebo
      • 3.3、启动yolo3检测摄像头看到的物体
    • 4、运行结果
      • 4.1、在rviz启动过后,可以在里面添加一个image,这样从rviz中也能看到摄像头的图像
      • 4.2、最终运行结果(如果地图中物体比较单一或者比较少,也可以自己添加一些)
      • 4.3、yolov2的效果好像不是特别好,可以换成v3

智能车我之前博客里面也有写,不过这里还是写进来吧。

一、搭建智能车环境

1、下载包以及编译

1.1、下载源码包

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

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

在这里插入图片描述

1.2、编译

进入到工作空间下

cd catkin_ws/
catkin_make

1.3、错误解决

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

(1)、controllers相关

sudo apt-get install ros-melodic-gazebo-ros-control
sudo apt-get install ros-melodic-effort-controllers
sudo apt-get install ros-melodic-joint-state-controller

(2)、driver_base相关

sudo apt-get install ros-melodic-driver-base

(3)、ackermann_msgs相关

sudo apt-get install ros-melodic-ackermann-msgs

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

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

locate OpenCVConfig.cmake

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

执行

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

在这里插入图片描述

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

在这里插入图片描述
打开这个cpp文件,修改头文件

#include <opencv-3.4.1-dev/opencv2/core.hpp>
#include <opencv-3.4.1-dev/opencv/highgui.h>
#include <opencv-3.4.1-dev/opencv2/opencv.hpp>

替换成

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

2、启动仿真

2.1、运行小车模型

roslaunch racecar_gazebo racecar.launch 

这时回启动gazebo,在里面可以看到一个小车的模型
在这里插入图片描述

2.2、运行赛道

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

roslaunch racecar_gazebo racecar_runway.launch

在这里插入图片描述

3、自己建立赛道

3.1、建立与保存地图

运行

gazebo

在这里插入图片描述
将建立好的地图保存
在这里插入图片描述
关闭gazebo,随后在重新启动一次,选择前面保存好的模型
在这里插入图片描述
注意坐标点落在模型中的位置
在这里插入图片描述
在地图中加入障碍物
在这里插入图片描述
保存地图在这里插入图片描述

3.2、修改文件

将地图名字改为你保存好的地图名
在这里插入图片描述
再次运行赛道,就可以看到已经是你自己建立的赛道了
在这里插入图片描述

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

4.1、gmapping建图

运行

roslaunch racecar_gazebo slam_gmapping.launch
roslaunch racecar_gazebo racecar_runway_navigation.launch

在这里插入图片描述
通过WASD控制小车运动,来建图,不过小车运行比较慢,完整建立花费时间比较长
在这里插入图片描述
在这里插入图片描述

4.2、保存地图

rosrun map_server map_saver -f test_map

这两个文件会保存在你的主目录下,如/home/xx/下,需要将这两个文件文件复制到map文件下
在这里插入图片描述

5、小车进行导航运动

5.1、通过WASD控制小车运动

修改文件
在这里插入图片描述
启动导航和环境地图,启动rviz

roslaunch racecar_gazebo racecar_rviz.launch
roslaunch racecar_gazebo racecar_runway_navigation.launch

在这里插入图片描述
在这里插入图片描述
控制小车运行过后
在这里插入图片描述

5.2、小车导航运动

安装

sudo apt-get install ros-melodic-teb-local-planner

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

roslaunch racecar_gazebo racecar_rviz.launch
roslaunch racecar_gazebo racecar_runway_navigation.launch

在启动py文件

rosrun racecar_gazebo path_pursuit.py

接着在rviz中选择2D Nav Goal给小车发布运动位置小车即可运动(但是运动速度堪忧!!慢的不行。再想想怎么提速吧!!)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

到达目的后终端会显示信息
在这里插入图片描述

二、下载darknet_ros包

1、克隆包

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

2、配置ssh

2.1、生成密钥

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

在这里插入图片描述

cat ~/.ssh/id_rsa.pub

该内容就是密钥
在这里插入图片描述

2.2、github中添加密钥

进入github网站,点击右上角,选择settings
在这里插入图片描述
在这里插入图片描述
点击过后,title随便填,Key就填前面终端中获得的密钥
在这里插入图片描述
最在克隆即可,会弹出一个窗口,输入密码即可
在这里插入图片描述

三、编译

1、下载权重文件

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

在这里插入图片描述
下载地址:yolov3.weights
yolov2.weights
yolov2-tiny.weights

2、编译

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

catkin_make -DCMAKE_BUILD_TYPE=Release

在这里插入图片描述

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

3、解决错误

3.1、第一个错

在这里插入图片描述

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

在这里插入图片描述
改了过后再去编译,还会遇到一个错误!!

3.2、第二个错

在这里插入图片描述

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

找到大概139行左右,将cv::Rect修改为CvRect
在这里插入图片描述

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

在这里插入图片描述

四、运行程序

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

可以先启动gazebo

roslaunch racecar_gazebo racecar_runway_navigation.launch

然后使用rostopic查看发布的话题
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

3、运行程序

3.1、启动rviz

roslaunch racecar_gazebo racecar_rviz.launch

在这里插入图片描述

3.2、启动gazebo

roslaunch racecar_gazebo racecar_runway_navigation.launch

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述
再重新运行一次即可。

4、运行结果

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

改成你需要改的即可
在这里插入图片描述
个人博客地址

参考链接


http://chatgpt.dhexx.cn/article/nsrloWO6.shtml

相关文章

智能车仿真 —— 2020室外光电组仿真指导(一)

前言 今天推出了官方的仿真文件&#xff0c;我也参与了部分仿真模型的设计&#xff0c;提供一个简单的参考思路。 完整文章地址&#xff1a;古月居博客网站 模型下载地址 https://pan.baidu.com/s/1TFBTbCeyQMuKnxemCbyNSw 提取码: crm5 安装依赖工具 sudo apt-get instal…

教程 | 阿克曼结构移动机器人的gazebo仿真(五)

第四章、用xacro优化URDF并配置gazebo仿真插件 1►前言 上节用简易模型写了一个小车的URDF代码&#xff0c;这一节将用xacro对其进行优化&#xff0c;这里我并不打算用宏对参数进行封装&#xff0c;因为我个人觉得这样看起来会比较直观&#xff0c;方便读者阅读。 2►配置主x…

利用Gazebo搭建赛道,控制小车完成比赛(大学生智能车大赛室外光电组赛道仿真模拟)

ROS学习【18】-----利用Gazebo搭建赛道&#xff0c;控制小车完成比赛目录 一、 ROS仿真功能包下载编译1、racecar功能包下载2、安装该功能包运行需要的控件3、racecar功能包编译4、测试是否编译成功 二、 运行功能包自带的赛道1、运行赛道&#xff0c;控制小车进行位移2、进行g…

ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)

文章目录 0.视频演示1.智能车环境&#xff0c;空间&#xff0c;资源准备a.初始化b.克隆 racecar 源代码包&#xff0c;并编译(1)遇到问题&#xff1a;Could NOT find driver_base_DIR(2)遇到问题&#xff1a;Could NOT find OpenCV (missing: OpenCV_DIR)(3)随带把环境变量添加…

AR rc漂移车

文章目录 前言一、物料准备二、车辆安装三、舵机调试1.舵机控制原理2.舵机供电及连线3.PWM控制舵机 四、电机调试1.电机控制原理2.电机供电及连线3.PWM控制电机4.附 五、单片机独立供电六、蓝牙遥控 前言 前几天偶然看到了《马里奥赛车 Live:家庭巡回赛》这款运行在switch上的A…

ROS学习记录(二)阿克曼转向车运动学模型及在gazebo中搭建仿真环境

前言&#xff1a;该篇是ROS学习记录的第二篇&#xff0c;如果还没关注过之前文章的读者&#xff0c;如有需要可以通过下方传送门去看之前的文章&#xff1a; ROS学习记录&#xff08;一&#xff09; Plugin插件 这两天关注了古月老师的公众号&#xff0c;看到了其中一篇课程推…

(ROS)ROS智能车自主导航roslaunch racecar_gazebo racecar_runway_navigation.launch报错

前提&#xff1a; 修改修改racecar_runway_navigation.launch文件后&#xff0c;运行roslaunch racecar_gazebo racecar_runway_navigation.launch 出现红色报错。 ERROR: cannot launch node of type [move_base/move_base]: move_base ROS path [0]/opt/ros/indigo/share/ro…

用ROS来做无人测试平台系列之国外的一些RACECAR

MIT RACECAR&#xff0c;最早开始做racecar的&#xff0c;主要基于双目摄像头激光雷达: http://fast.scripts.mit.edu/racecar/hardware/ UPENN F1 TENTH&#xff0c;同MIT racecar特别像&#xff0c;不过很多东西需自己组装&#xff0c;电调模块需自己焊接: http://f1tenth.o…

多移动机器人(阿克曼小车)在gazebo中的配置

多移动机器人&#xff08;阿克曼小车&#xff09;在gazebo中的配置 前言 最近需要进行异构多机器人方面的工作&#xff0c;在之前的工作中已经实现了多麦克纳姆轮小车在gazebo中的仿真。 &#xff08;如何在Gazebo中实现多机器人仿真 https://www.guyuehome.com/4889&#xf…

记实现多racecar仿真过程中遇到的问题(一)

最近尝试过使用多turtlebot3仿真之后&#xff0c;想测试一下多Ackermann结构车的仿真效果&#xff0c;在一番寻找下将目光锁定到了MIT-racecar。但是在使用过程中遇到了许多问题&#xff0c;在此记录一下。 运行环境&#xff1a; Ubuntu18.04(虚拟机)&#xff0c;ROS-melodic…

HackTheBox You know racecar 格式化字符串漏洞pwn题目

题目网址&#xff1a; https://app.hackthebox.com/challenges/racecar解压密码为hackthebox 文件信息收集 file racecar这是一个32位的程序&#xff0c;动态链接的 checksec vuln防护都开着的&#xff0c;从上到下依次是 32位程序 全部RELRO 开启栈保护 启用数据执行防护…

什么是Race Condition?

简介 race condition是多线程的应用程序中经常遇到的问题&#xff0c;本文章接下来会解释什么是race condition&#xff0c;如何检测到它们以及如何解决这类问题。 Race condition 从定义来说&#xff0c;race condition是代码中一些执行结果取决于其执行的相对时间或者多线…

免费教程·开源 | 从零开始制作ROS无人竞速车RACECAR教程

一、课程前提 自动驾驶汽车即将成为交通出行的主流工具之一&#xff0c;它以计算机、现代汽车产业技术为基础&#xff0c;以数字化、智能化为依托实现自动化驾驶&#xff0c;学习自动驾驶需要了解架构、环境感知、行为决策、规划路径&#xff0c;多传感器融合等一系列技术&…

Racecar 基于ROS通信机制的多点导航实验

基于ROS通信机制的多点导航实验 一、实验目的二、实验环境三、实验原理四、实验内容五、实验步骤1.获取rviz发送目标点的topic&#xff1b;2.对已经建好的图获取相应目标点的坐标&#xff08;多个&#xff0c;即小车要去的目标&#xff09;&#xff0c;还没建图先完成建图&…

C语言的整数除法

c语言的整数除法是向下取整的。

C语言 从5~100之间找出能被5或7整除的数

从5~100之间找出能被5或7整除的数 算法分析&#xff1a;注意“或”的理解&#xff1a;或此或彼或彼此 #include "stdio.h" main( ) { int i;for(i5;i<100;i)if(i%50||i%70)printf("%d\t",i); }有伙伴问倒序输出&#xff1a; 在线编译C语言&#xff1a;…

C语言实现计算数字能否被3个数整除

C语言实现计算数字能否被3个数整除 编程实现&#xff1a;输入一个整数&#xff0c;判断它能否被3&#xff0c;5&#xff0c;7整除&#xff0c;并输出以下信息之一&#xff1a; ①能同时被3&#xff0c;5&#xff0c;7整除&#xff1b; ②能被其中两数(要指出哪两个)整除&#x…

C语言-求能被7或11整除的整数

本关任务&#xff1a;编写程序求[1&#xff0c;1000]范围内能被7或11整除&#xff0c;但不能同时被7和11整除的整数。按每行8个数&#xff0c;每个数占5个字符且以左对齐的格式进行输出。 #include<stdio.h> int main() {int i1;int count0;for(i1;i<1000;i){if((i%7…

c语言学习-判断一个数是否能被3整除

判断一个数是否能被3整除 在主函数中输入整型数据n,判断该数是否能被3整除&#xff0c;如果能被3 整除&#xff0c;输出“yes”,否则输出“no” 程序流程图&#xff1a; void main() { int a; printf("please enteraguess number:\n"); scanf("%d",&…

C语言--编写程序,输入一个整数,判断它能否被3,5,7整除

编写程序&#xff0c;输入一个整数&#xff0c;判断它能否被3,5,7整除&#xff0c;并输出下列信息之一&#xff1a; 能同时被3,5,7整除&#xff1b;能被x和y两个数整除&#xff1b;能被x整除&#xff1b;不能被3,5,7任一个数整除。 #include <stdio.h> void main() { in…