Gazebo搭建虚拟环境完成ROS机器人定位导航仿真及YOLO检测识别标记物体


前言

环境说明:
本过程采用Ubuntu18.04+ROS Melodic+Gazebo+yolo3


一、前期准备

(一)创建工作空间

  1. 创建ros的工作区域

    mkdir -p ~/robot_positioning_ws/src
    
  2. 转换到工作区域目录

    cd ~/robot_positioning_ws/src
    
  3. 初始化ROS工作空间

    catkin_init_workspace
    

(二)功能包racecar

  1. 下载Gazebo搭建赛道

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

    在这里插入图片描述

  2. 安装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
    
  3. 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搭建自己的虚拟环境

(一)相关设置

  1. 设置环境变量
    echo "source ~/robot_positioning_ws/devel/setup.bash" >> ~/.bashrc
    source ~/.bashrc
    

(二)运行小车模型

  1. 运行语句
    roslaunch racecar_gazebo racecar.launch 
    
  2. 运行效果
    说明:tk的控制界面小窗,控制小车的移动,W表示前进,D表示向左转,S表示后退,A表示右转
    在这里插入图片描述

(三)手动搭建环境

  1. 打开gazebo

    roslaunch gazebo_ros empty_world.launch
    
  2. 点击Edit->Build Editor,创建模型,保存该模型
    在这里插入图片描述

  3. 导入刚自己创建的赛道模型框架
    运行小车模型

    roslaunch racecar_gazebo racecar.launch 
    

    导入创建环境模型
    insert->选择对应保存的模型
    在这里插入图片描述
    添加障碍物
    在这里插入图片描述
    保存为world文件
    在这里插入图片描述

(四)运行创建环境

  1. 创建launch文件,配置赛道参数
    cd ~/robot_positioning_ws/src/racecar/racecar_gazebo/launch
    sudo gedit lyy.launch
    
    lyy.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>
    
  2. 运行gazebo
    roslaunch racecar_gazebo lyy.launch 
    
    显示如下
    在这里插入图片描述

三、进行gmapping建图

  1. gmapping建图

    roslaunch racecar_gazebo slam_gmapping.launch
    

    问题描述:ERROR: cannot launch node of type [gmapping/slam_gmapping]: gmapping
    在这里插入图片描述
    解决方法

    sudo apt-get install ros-melodic-gmapping
    
  2. 跑完整圈(通过kt控制小窗)
    小车的起点
    在这里插入图片描述
    小车终点
    在这里插入图片描述
    Rviz中的轨迹显示
    在这里插入图片描述

  3. 保存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
    

    在这里插入图片描述

四、小车自主定位导航

(一)自己创建的环境

  1. launch文件的编辑

    cd ~/robot_positioning_ws/src/racecar/racecar_gazebo/launch
    sudo gedit lyy_auto.launch
    

    lyy_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>
    

    在这里插入图片描述

  2. 运行创建的环境

    roslaunch racecar_gazebo lyy_auto.launch
    
  3. 启动rviz

    roslaunch racecar_gazebo racecar_rviz.launch
    

    在这里插入图片描述

  4. 设计小车行车轨迹
    采用2D Nav Goal发布目标
    在这里插入图片描述
    问题描述:使用2D Nav Goal发布目标时,始终没有反应
    解决方式

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

    由于起点和终点之间没有做墙隔开,所以现在将终点移到对面

  5. 启动path_pursuit.py脚本文件

    rosrun racecar_gazebo path_pursuit.py
    

    实际出现情况
    在这里插入图片描述
    暂时不清楚是什么原因造成的。

(二)下载的功能包中自带环境

  1. 运行环境

    roslaunch racecar_gazebo racecar_runway_navigation.launch 	
    
  2. 启动rviz

    roslaunch racecar_gazebo racecar_rviz.launch
    
  3. 设计小车行车轨迹
    采用2D Nav Goal发布目标位置

  4. 启动path_pursuit.py脚本文件

    rosrun racecar_gazebo path_pursuit.py
    

    运行结果(一部分运动过程)
    在这里插入图片描述

五、使用YOLO检测识别标记物体

(一)加载YOLO

  1. 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,密匙设置完成。

  2. 下载darknet-ros

    cd ~/robot_positioning_ws/src
    git clone --recursive [email protected]:leggedrobotics/darknet_ros.git
    
  3. 编译

    cd ~/robot_positioning_ws
    catkin_make -DCMAKE_BUILD_TYPE=Release
    

    在这里插入图片描述
    说明:
    开始编译整个项目,编译完成后会检查./darknet_ros/darknet_ros/yolo_network_config/weights文件下有没有yolov2-tiny.weights和yolov3.weights两个模型文件,默认下载好的代码里面为了节省体积是不带这两个模型文件的。因此编译之后会自动开始下载模型文件,此时又是一段漫长的等待时间。在开始编译之前,可以提前下载好,把模型文件拷贝到上述文件夹下,就不会再次下载了。

(二)实现检测标记物体

  1. 打开gazebo

    roslaunch racecar_gazebo racecar_runway_navigation.launch
    
  2. 打开racecar.gazebo文件查看话题
    在这里插入图片描述

  3. 修改ros.yaml文件中订阅的话题
    原文件
    在这里插入图片描述
    修改后文件
    在这里插入图片描述

  4. 启动YOLO V3

    roslaunch darknet_ros darknet_ros.launch
    

    这个给过程非常容易卡住,所以需要多尝试几次。
    在这里插入图片描述
    最终,识别的结果不是很准确,可能的原因是摄像头没有捕获到全部的物体,部分识别成为其他的物体。这个过程确实弄了好久,太容易卡了。需要比较有耐心,才能够的到最终的效果。自己构建环境的时候,需要注意起点与终点之间有有什么东西隔开,不然后面规划路径的时候,就不会绘制。


参考连接

  1. Ubuntu18.04下利用Gazebo搭建赛道完成ROS机器人定位导航仿真 + 加载YOLO检测识别标记物体【智能车】
  2. Ubuntu18.04下实现ROS智能车定位导航仿真
  3. ROS下实现darknet_ros(YOLO V3)检测
  4. 嵌入式系统应用开发·大作业——ROS机器人定位导航仿真

猜你喜欢

转载自blog.csdn.net/qq_43279579/article/details/115262778