文章目录
    
    
    
    前言
   
    
     环境说明:
     
     本过程采用Ubuntu18.04+ROS Melodic+Gazebo+yolo3
    
   
    
    
    一、前期准备
   
    
    
    (一)创建工作空间
   
- 
创建ros的工作区域 mkdir -p ~/robot_positioning_ws/src
- 
转换到工作区域目录 cd ~/robot_positioning_ws/src
- 
初始化ROS工作空间 catkin_init_workspace
    
    
    (二)功能包racecar
   
- 
下载Gazebo搭建赛道 git clone https://github.com/xmy0916/racecar.git  
- 
安装controllers相关 sudo apt-get install ros-melodic-controller-manager 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
- 
racecar功能包编译 cd .. catkin_make编译遇到的问题 
 
 ①
 
 Could not find a package configuration file provided by "driver_base" with any of the following names
 
  
 
 解决方法sudo apt-get install ros-melodic-driver-base② 
 
 Could not find a package configuration file provided by "OpenCV" with any of the following names
 
 
  
 
 解决方法locate OpenCVConfig.cmake 
 
 sudo gedit ~/robot_positioning_ws/src/racecar_gazebo/CMakeLists.txt
 
 修改第7行的路径成你的路径:set(OpenCV_DIR /opt/ros/kinetic/share/OpenCV-3.3.1-dev/) 
 
 ③
 
 ackermann_msgs/AckermannDrive.h: No such file or directory
 
 
  
 
 解决方法sudo apt-get install ros-melodic-ackermann-msgs编译成功 
 
   
    
    
    二、Gazebo搭建自己的虚拟环境
   
    
    
    (一)相关设置
   
- 
     设置环境变量
echo "source ~/robot_positioning_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc
    
    
    (二)运行小车模型
   
- 
     运行语句
roslaunch racecar_gazebo racecar.launch
- 
     运行效果
 
 说明:tk的控制界面小窗,控制小车的移动,W表示前进,D表示向左转,S表示后退,A表示右转
 
   
    
    
    (三)手动搭建环境
   
- 
打开gazebo roslaunch gazebo_ros empty_world.launch
- 
点击Edit->Build Editor,创建模型,保存该模型 
 
   
- 
导入刚自己创建的赛道模型框架 
 
 运行小车模型roslaunch racecar_gazebo racecar.launch导入创建环境模型 
 
 insert->选择对应保存的模型
 
  
 
 添加障碍物
 
  
 
 保存为world文件
 
   
    
    
    (四)运行创建环境
   
- 
     创建launch文件,配置赛道参数
cd ~/robot_positioning_ws/src/racecar/racecar_gazebo/launch sudo gedit lyy.launchlyy.launch内容 <?xml version="1.0"?> <launch> <!-- Launch the racecar --> <include file="$(find racecar_gazebo)/launch/racecar.launch"> <arg name="world_name" value="lyy"/> </include> </launch>
- 
     运行gazebo
roslaunch racecar_gazebo lyy.launch显示如下 
 
   
    
    
    三、进行gmapping建图
   
- 
gmapping建图 roslaunch racecar_gazebo slam_gmapping.launch问题描述: 
 
 ERROR: cannot launch node of type [gmapping/slam_gmapping]: gmapping
 
 
  
 
 解决方法sudo apt-get install ros-melodic-gmapping
- 
跑完整圈(通过kt控制小窗) 
 
 小车的起点
 
  
 
 小车终点
 
  
 
 Rviz中的轨迹显示
 
   
- 
保存gmapping创建的地图 sudo apt-get install ros-melodic-map-server cd ~/robot_positioning_ws/src/racecar/racecar_gazebo/map rosrun map_server map_saver -f lyy_map  
    
    
    四、小车自主定位导航
   
    
    
    (一)自己创建的环境
   
- 
launch文件的编辑 cd ~/robot_positioning_ws/src/racecar/racecar_gazebo/launch sudo gedit lyy_auto.launchlyy_auto.launch文件内容 <?xml version="1.0"?> <launch> <!-- Launch the racecar --> <include file="$(find racecar_gazebo)/launch/racecar.launch"> <arg name="world_name" value="lyy"/> </include> <!-- Launch the built-map --> <node name="map_server" pkg="map_server" type="map_server" args="$(find racecar_gazebo)/map/lyy_map.yaml" /> <!--Launch the move base with time elastic band--> <param name="/use_sim_time" value="true"/> <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen"> <rosparam file="$(find racecar_gazebo)/config/costmap_common_params.yaml" command="load" ns="global_costmap" /> <rosparam file="$(find racecar_gazebo)/config/costmap_common_params.yaml" command="load" ns="local_costmap" /> <rosparam file="$(find racecar_gazebo)/config/local_costmap_params.yaml" command="load" /> <rosparam file="$(find racecar_gazebo)/config/global_costmap_params.yaml" command="load" /> <rosparam file="$(find racecar_gazebo)/config/teb_local_planner_params.yaml" command="load" /> <param name="base_global_planner" value="global_planner/GlobalPlanner" /> <param name="planner_frequency" value="0.01" /> <param name="planner_patience" value="5.0" /> <!--param name="use_dijkstra" value="false" /--> <param name="base_local_planner" value="teb_local_planner/TebLocalPlannerROS" /> <param name="controller_frequency" value="5.0" /> <param name="controller_patience" value="15.0" /> <param name="clearing_rotation_allowed" value="false" /> </node> </launch>  
- 
运行创建的环境 roslaunch racecar_gazebo lyy_auto.launch
- 
启动rviz roslaunch racecar_gazebo racecar_rviz.launch  
- 
设计小车行车轨迹 
 
 采用2D Nav Goal发布目标
 
  
 
 问题描述:
 
 使用2D Nav Goal发布目标时,始终没有反应
 
 
 解决方式sudo apt-get install ros-melodic-teb-local-planner由于起点和终点之间没有做墙隔开,所以现在将终点移到对面 
- 
启动path_pursuit.py脚本文件 rosrun racecar_gazebo path_pursuit.py实际出现情况 
 
  
 
 暂时不清楚是什么原因造成的。
    
    
    (二)下载的功能包中自带环境
   
- 
运行环境 roslaunch racecar_gazebo racecar_runway_navigation.launch
- 
启动rviz roslaunch racecar_gazebo racecar_rviz.launch
- 
设计小车行车轨迹 
 
 采用2D Nav Goal发布目标位置
- 
启动path_pursuit.py脚本文件 rosrun racecar_gazebo path_pursuit.py运行结果(一部分运动过程) 
 
   
    
    
    五、使用YOLO检测识别标记物体
   
    
    
    (一)加载YOLO
   
- 
ssh设置 ssh-keygen ##输入之后根据提示输入两次回车,两次密码 ls ~/.ssh eval `ssh-agent` ssh-add ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub #得到一串密匙登陆GitHub,在账户下拉选项中选择settings,ssh and GPG keys,选择new ssh key,输入名字Default public key,然后将得到的密匙复制到文本框中,然后点击add ssh key,密匙设置完成。 
- 
下载darknet-ros cd ~/robot_positioning_ws/src git clone --recursive git@github.com:leggedrobotics/darknet_ros.git
- 
编译 cd ~/robot_positioning_ws catkin_make -DCMAKE_BUILD_TYPE=Release 
 
 
 说明:
 
 
 开始编译整个项目,编译完成后会检查./darknet_ros/darknet_ros/yolo_network_config/weights文件下有没有yolov2-tiny.weights和yolov3.weights两个模型文件,默认下载好的代码里面为了节省体积是不带这两个模型文件的。因此编译之后会自动开始下载模型文件,此时又是一段漫长的等待时间。在开始编译之前,可以提前下载好,把模型文件拷贝到上述文件夹下,就不会再次下载了。
    
    
    (二)实现检测标记物体
   
- 
打开gazebo roslaunch racecar_gazebo racecar_runway_navigation.launch
- 
打开racecar.gazebo文件查看话题 
 
   
- 
修改ros.yaml文件中订阅的话题 
 
 原文件
 
  
 
 修改后文件
 
   
- 
启动YOLO V3 roslaunch darknet_ros darknet_ros.launch这个给过程非常容易卡住,所以需要多尝试几次。 
 
  
 
 最终,识别的结果不是很准确,可能的原因是摄像头没有捕获到全部的物体,部分识别成为其他的物体。这个过程确实弄了好久,太容易卡了。需要比较有耐心,才能够的到最终的效果。自己构建环境的时候,需要注意起点与终点之间有有什么东西隔开,不然后面规划路径的时候,就不会绘制。
    
    
    参考连接
   
 
