ROS智能车定位导航仿真

  • 一、前言
  • 二、效果图
  • 三、准备工作
  • [1.在Ubuntu上安装ROS Kinetic]()
  • 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

监控电子地图的前端模板 地图监控app下载_linux

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

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

创建成功如下:

监控电子地图的前端模板 地图监控app下载_深度学习_02

监控电子地图的前端模板 地图监控app下载_智能车_03


监控电子地图的前端模板 地图监控app下载_深度学习_04

四、启动仿真

1.设置环境变量

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

source ~/.bashrc

2.启动地图

roslaunch racecar_gazebo racecar_runway.launch

监控电子地图的前端模板 地图监控app下载_linux_05

五、建图

1.启动slam和rviz

新建终端

cd racecar_ws/
roslaunch racecar_gazebo slam_gmapping.launch

监控电子地图的前端模板 地图监控app下载_python_06

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

监控电子地图的前端模板 地图监控app下载_linux_07

原图:

监控电子地图的前端模板 地图监控app下载_智能车_08


成果图:

监控电子地图的前端模板 地图监控app下载_python_09

3.新建终端保存地图

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

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

监控电子地图的前端模板 地图监控app下载_监控电子地图的前端模板_10


监控电子地图的前端模板 地图监控app下载_深度学习_11

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

六、自主定位导航

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

新建终端

cd racecar_ws/
roslaunch racecar_gazebo racecar_runway_navigation.launch

监控电子地图的前端模板 地图监控app下载_python_12

2.启动rviz:

新建终端:

cd racecar_ws/
roslaunch racecar_gazebo racecar_rviz.launch

监控电子地图的前端模板 地图监控app下载_监控电子地图的前端模板_13

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

监控电子地图的前端模板 地图监控app下载_智能车_14

4.启动导航脚本

新建终端

cd racecar_ws/
rosrun racecar_gazebo path_pursuit.py

监控电子地图的前端模板 地图监控app下载_深度学习_15


监控电子地图的前端模板 地图监控app下载_深度学习_16


上图,对比发现小车确实打导航定位成功。

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

1.打开gazebo

gazebo

监控电子地图的前端模板 地图监控app下载_智能车_17

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

监控电子地图的前端模板 地图监控app下载_linux_18


监控电子地图的前端模板 地图监控app下载_深度学习_19

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

监控电子地图的前端模板 地图监控app下载_监控电子地图的前端模板_20


监控电子地图的前端模板 地图监控app下载_监控电子地图的前端模板_21


监控电子地图的前端模板 地图监控app下载_智能车_22

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

roslaunch racecar_gazebo racecar.launch

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

监控电子地图的前端模板 地图监控app下载_智能车_23


为跑道添加障碍物

监控电子地图的前端模板 地图监控app下载_智能车_24

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

选择File->Save World As

监控电子地图的前端模板 地图监控app下载_监控电子地图的前端模板_25


监控电子地图的前端模板 地图监控app下载_智能车_26

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>

监控电子地图的前端模板 地图监控app下载_深度学习_27

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

roslaunch racecar_gazebo mycar.launch

监控电子地图的前端模板 地图监控app下载_智能车_28

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

roslaunch racecar_gazebo slam_gmapping.launch

监控电子地图的前端模板 地图监控app下载_监控电子地图的前端模板_29


控制小车跑一圈地图,建好的地图如下:

监控电子地图的前端模板 地图监控app下载_智能车_30


新建终端,保存gmapping创建的地图

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

监控电子地图的前端模板 地图监控app下载_监控电子地图的前端模板_31


监控电子地图的前端模板 地图监控app下载_监控电子地图的前端模板_32

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

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>

监控电子地图的前端模板 地图监控app下载_智能车_33

2.运行跑道

roslaunch racecar_gazebo mycar1.launch

监控电子地图的前端模板 地图监控app下载_linux_34

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

roslaunch racecar_gazebo racecar_rviz.launch

监控电子地图的前端模板 地图监控app下载_linux_35

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

监控电子地图的前端模板 地图监控app下载_监控电子地图的前端模板_36

5.启动导航脚本

rosrun racecar_gazebo path_pursuit.py

发现现车确实在自己定位

监控电子地图的前端模板 地图监控app下载_linux_37

九、总结

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