ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现

ROS智能车定位导航仿真

  • 一、前言
  • 二、效果图
  • 三、准备工作
    • [1.在Ubuntu上安装ROS Kinetic](https://blog.csdn.net/qq_42585108/article/details/104327661)
    • 2.创建ROS工作区间
      • ①1创建racecar_ws和src文件夹
      • ②初始化工作空间
      • ③下载racecar源代码包,并编译工程
  • 四、启动仿真
    • 1.设置环境变量
    • 2.启动地图
  • 五、建图
    • 1.启动slam和rviz
    • 2 控制车辆(左侧有个控制窗口),WASD控制前左后右的运动就可以建图了:
    • 3.新建终端保存地图
  • 六、自主定位导航
    • 1.启动导航和环境地图:
    • 2.启动rviz:
    • 3.用2D Nav Goal发布目标:
    • 4.启动导航脚本
  • 七、用自己所建的地图赛道,来跑小车
    • 1.打开gazebo
    • 2.点击Edit->Build Editor,进行模型创建
    • 3.将创建好的地图模型保存
    • 4.运行小车模型,导入刚刚的模型框架,然后保存world文件
    • 5.保存world文件到下载功能包中的racecar_gazebo包中的worlds文件夹中
    • 6.创建launch文件,填写赛道配置参数
    • 7.运行跑道模型,控制小车跑图了
    • 8.gmapping建图(上面一步的终端保持开启状态)
  • 八、自主定位导航(自己建的赛道)
    • 1.新建终端,创建mycar1.launch文件
    • 2.运行跑道
    • 3.新建终端,运行RVIZ进行手工导航
    • 4.用2D Nav Goal发布目标:
    • 5.启动导航脚本
  • 九、总结

一、前言

操作系统:ubuntu16.04

ROS版本:kinetic

Gazebo版本:7.0.0

二、效果图

三、准备工作

1.在Ubuntu上安装ROS Kinetic

2.创建ROS工作区间

①1创建racecar_ws和src文件夹

mkdir -p ~/racecar_ws/src

②初始化工作空间

cd ~/racecar_ws/src
catkin_init_workspace

在这里插入图片描述

③下载racecar源代码包,并编译工程

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

创建成功如下:
在这里插入图片描述ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第1张图片
ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第2张图片

四、启动仿真

1.设置环境变量

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

source ~/.bashrc

2.启动地图

roslaunch racecar_gazebo racecar_runway.launch

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第3张图片

五、建图

1.启动slam和rviz

新建终端

cd racecar_ws/
roslaunch racecar_gazebo slam_gmapping.launch

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第4张图片

2 控制车辆(左侧有个控制窗口),WASD控制前左后右的运动就可以建图了:

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第5张图片

原图:
ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第6张图片
成果图:
ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第7张图片

3.新建终端保存地图

保存地图的路径:/racecar_ws/src/racecar/racecar_gazebo/map

cd ~/racecar_ws/src/racecar/racecar_gazebo/map
rosrun map_server map_saver -f map_racecar

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第8张图片
ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第9张图片

分析:在控制小车运动时,小车很容易翻车。不过最终能运行完地图。

六、自主定位导航

1.启动导航和环境地图:

新建终端

cd racecar_ws/
roslaunch racecar_gazebo racecar_runway_navigation.launch

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第10张图片

2.启动rviz:

新建终端:

cd racecar_ws/
roslaunch racecar_gazebo racecar_rviz.launch

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第11张图片

3.用2D Nav Goal发布目标:

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第12张图片

4.启动导航脚本

新建终端

cd racecar_ws/
rosrun racecar_gazebo path_pursuit.py

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第13张图片
ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第14张图片
上图,对比发现小车确实打导航定位成功。

七、用自己所建的地图赛道,来跑小车

1.打开gazebo

gazebo

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第15张图片

2.点击Edit->Build Editor,进行模型创建

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第16张图片
ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第17张图片

3.将创建好的地图模型保存

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第18张图片
ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第19张图片
ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第20张图片

4.运行小车模型,导入刚刚的模型框架,然后保存world文件

roslaunch racecar_gazebo racecar.launch 

点击insert—>track,即可将跑道模型拖到小车模型中。注意:将小车放到适当的位置。

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第21张图片
为跑道添加障碍物
ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第22张图片

5.保存world文件到下载功能包中的racecar_gazebo包中的worlds文件夹中

选择File->Save World As
ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第23张图片
ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第24张图片

6.创建launch文件,填写赛道配置参数

cd racecar_ws/src/racecar/racecar_gazebo/launch
touch mycar.launch
gedit mycar.launch

写入如下代码:

<?xml version="1.0"?>
<launch>
  <!-- Launch the racecar -->
  <include file="$(find racecar_gazebo)/launch/racecar.launch">
    <arg name="world_name" value="mycar"/>
  </include>
</launch>

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第25张图片

7.运行跑道模型,控制小车跑图了

roslaunch racecar_gazebo mycar.launch

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第26张图片

8.gmapping建图(上面一步的终端保持开启状态)

roslaunch racecar_gazebo slam_gmapping.launch 

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第27张图片
控制小车跑一圈地图,建好的地图如下:
ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第28张图片
新建终端,保存gmapping创建的地图

cd racecar_ws/src/racecar/racecar_gazebo/map
rosrun map_server map_saver -f mycar_map

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第29张图片
ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第30张图片

八、自主定位导航(自己建的赛道)

1.新建终端,创建mycar1.launch文件

cd racecar_ws/src/racecar/racecar_gazebo/launch/
touch mycar1.launch
gedit mycar1.launch

并写入以下代码:

<?xml version="1.0"?>
<launch>
  <!-- Launch the racecar -->
  <include file="$(find racecar_gazebo)/launch/racecar.launch">
    <arg name="world_name" value="mycar"/>
  </include>
  
  <!-- Launch the built-map -->
  <node name="map_server" pkg="map_server" type="map_server" args="$(find racecar_gazebo)/map/mycar_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>

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第31张图片

2.运行跑道

roslaunch racecar_gazebo mycar1.launch 

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第32张图片

3.新建终端,运行RVIZ进行手工导航

roslaunch racecar_gazebo racecar_rviz.launch

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第33张图片

4.用2D Nav Goal发布目标:

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第34张图片

5.启动导航脚本

rosrun racecar_gazebo path_pursuit.py 

发现现车确实在自己定位
ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现_第35张图片

九、总结

通过这次实验很好的对ROS下智能车的仿真实验的完成,用仿真功能包自带的地图很好的能跑出来,而且能够用2D Nav Goal发布目标来实现智能车的自主定位,但在用自己所建的赛道时,用键盘确实能完成跑道,但在用2D Nav Goal发布目标实现智能车的自主定位,小车容易打滑,而且在遇到障碍物时,有时会发生侧翻现象。可能是相关代码还不够完善吧。不过最终还是跑出来了。注意事项:在构建地图时要注意地图尺寸大小,如果不合适,将会影响下车的导航,就会一直卡在某一个障碍物的前面。

你可能感兴趣的:(ROS学习,python,linux,深度学习,智能车)