智能车大赛ROS仿真和基于yolo识别物体(仿真实现2019年室外光电创意组比赛)

    技术2022-07-12  72

    目录

    一、准备工作1、创建racecar_ws和src文件夹2、初始化工作空间3、克隆程序并编译 二、开始仿真1、建立地图2、启动仿真 三、开始导航1、启动导航和环境地图2、启动rviz3、选择2D Nav Goal发布目标4、启动python文件进行导航 四、在智能车上添加YOLO摄像头识别物体文件准备1、配置SSH2、github添加密钥3、下载权重文件4、编译 运行程序1、修改话题2、开始运行程序 五、总结

    一、准备工作

    首先你得有一个ros的工作空间,如果没有就创建一个工作空间,步骤如下

    1、创建racecar_ws和src文件夹

    mkdir -p ~/racecar_ws/src

    src文件下以后可以存放我们所有的资源,mkdir命令用于创建文件夹,-p表示同时创建子目录,而racecar是我们ros的工作区间。

    2、初始化工作空间

    cd ~/racecar_ws/src catkin_init_workspace

    3、克隆程序并编译

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

    编译如果出现上面这个问题的,可以下载控件解决。

    sudo apt-get install ros-kinetic-driver-base sudo apt-get install ros-kinetic-gazebo-ros-control sudo apt-get install ros-kinetic-effort-controllers sudo apt-get install ros-kinetic-joint-state-controller sudo apt-get install ros-kinetic-ackermann-msgs sudo apt-get install ros-kinetic-global-planner sudo apt-get install ros-kinetic-teb-local-planner

    下载完控件再编译,出现下面这张图就编译成功。

    二、开始仿真

    1、建立地图

    首先自己建立一地图,如何建立地图可以参考这个链接https://blog.csdn.net/ZhangRelay/article/details/92799977 我建立好的地图是这样的 建立好点击左上角的File选择save as,随便取个名字(最好叫runway)保存之后重启gazebo,然后在insert中找到刚刚保存的文件,拖拽到右边,最好把地图的坐标轴放到小车的起点,这样就可以不用修改代码。然后增加路障,保存为world文件即可。

    2、启动仿真

    首先修改环境变量

    echo "source ~/racecar_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc

    然后就启动地图

    roslaunch racecar_gazebo racecar_runway.launch

    启动之后就看到地图 新开一个终端,启动slam和rviz

    roslaunch racecar_gazebo slam_gmapping.launch

    使tk窗口保持激活状态,使用wsad进行移动小车建立地图,在看到小车跑完整个地图后,保存地图。

    rosrun map_server map_saver -f ~/racecar_ws/src/racecar_gazebo/map/map_runway

    保存好的地图文件在这个位置,因为我在移动小车的时候有撞墙和小车翻转的情况,所以有的地方不是很完整。

    三、开始导航

    1、启动导航和环境地图

    首先启动自己的launch文件,把原文件的这个三个地方改为自己的文件名字即可。 然后运行launch文件

    roslaunch racecar_gazebo racecar_runway_navigation.launch

    2、启动rviz

    roslaunch racecar_gazebo racecar_rviz.launch

    3、选择2D Nav Goal发布目标

    在这里选择要到达的目标位置,通过2D Nav Goal指针选择地图上面的一个点进行导航。

    4、启动python文件进行导航

    可以通过这句代码

    rosrun racecar_gazebo path_pursuit.py

    也可以python命令启动

    cd ~/racecar_ws/src/racecar_gazebo/scripts python path_pursuit.py

    我是直接启动的。 小车运行的很慢,我就没有一直移动小车,最后出现以下文件就代表导航结束,成功到达目标点了。

    四、在智能车上添加YOLO摄像头识别物体

    文件准备

    1、配置SSH

    首先生成密钥

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

    打完这三个命令之后首先按空格,然后输入设置密码,然后再次输入刚刚的密码即可. 使用该命令生成密钥

    cat ~/.ssh/id_rsa.pub

    2、github添加密钥

    在github网站上登录自己的账号,然后选择setting 然后依次选择 title自己随便取一个,key就是前面生成的密钥,全部复制下来粘贴即可 然后就生成以下内容 之后就可以开始下载了,下载的时候会弹出一个窗口,输入设置的密码即可。 下载完成。

    3、下载权重文件

    下载下面三个文件 yolov3.weights下载 yolov2.weights下载 yolov2-tiny.weights下载 下载好之后放在这个目录下

    4、编译

    编译最开始遇到问题No module named ‘catkin_pkg’,可能是前面自己下载anaconda设置Python的问题。然后根据下面这个链接的解决办法成功解决。 https://blog.csdn.net/qq_43786066/article/details/104513996 然后编译就很顺利了,

    运行程序

    1、修改话题

    查看这个文件此处的名字,后面要用。 然后修改darknet_ros/darknet_ros/config/ros.yaml文件中订阅的话题。

    2、开始运行程序

    启动gazebo

    roslaunch racecar_gazebo racecar_runway_navigation.launch

    这里运行程序我遇到了问题,但是只有我会遇到这个问题,这里就顺便记录一下。因为之前配置anaconda环境的时候切换了版本,而ros需要的版本是Python2.7,之前自己是学会了怎么切换版本,但是因为自己一些操作的失误,切换版本过多,导致符号连接数过多的问题,而且进入usr/bin的文件夹都会直接闪退出来,然后自己在网上到处找解决办法,然而并没有和我一样的状况,自己就综合了一下。 首先虽然我通过界面进不去usr/bin,可以通过终端进入,然后通过以下命令删除符号连接数过多的文件。

    sudo rm -rf /usr/bin/python3 sudo rm -rf /usr/bin/python sudo rm -rf /usr/bin/python2.7

    这三个文件都是我ls查看usr/bin标红的文件,于是我把这三个全删了 然后重新建立即可

    sudo ln -s /usr/bin/python3.5 /usr/bin/python3 sudo ln -s /usr/bin/python2.7 /usr/bin/python sudo ln -s /usr/bin/python2.7 /usr/bin/python2.7

    然后就能成功运行了,这里可能对很多人来说都没什么用,如果有遇到和我同样问题的,或许可以参考一下,下面继续这个实验。

    然后启动rviz 启动yolo3 运行效果如下

    五、总结

    这次做这个智能车是了解一下智能车大赛的一些东西,如果有机会参加比赛,会熟悉一点。过程中我觉得最困难的一点就是自己建图这一方面,如果是简单的地图还好,但是我选择建的图和智能车竞赛的图类似,所以会很麻烦,还要考虑坐标等得问题,一条线没建好,前面的线都会变的畸形起来,可能也是自己没有熟悉建图,毕竟才建了几次,也可能是自己没掌握到简便的方法吧。建图之后,修改launch啥的都挺简单的,因为代码前面的前辈和很多教程比如古月居的网站都提供了,自己只需要改几个地方就可以了。然后后面运行小车建图时,因为小车运行太慢了,建图很烦,一不注意小车还翻了,后面可以改一下提升一下小车的速度。通过做这个了解了智能车比赛的一些相关信息,并且也知道了怎么建立赛道和仿真,对我的帮助很大。然后基于YOLO识别物体自己其实遇到了很多问题,但是都不是YOLO本身的问题,是之前安装anaconda切换Python环境后,运行ros相关的代码出现的版本问题,还有切换Python版本过于频繁导致的符号数连接过多等问题花费了我很多时间。还好最后都解决了,成功的运行了程序。

    Processed: 0.036, SQL: 9