ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)

文章目录

    • 0.视频演示
    • 1.智能车环境,空间,资源准备
        • a.初始化
        • b.克隆 racecar 源代码包,并编译
          • (1)遇到问题:Could NOT find driver_base_DIR
          • (2)遇到问题:Could NOT find OpenCV (missing: OpenCV_DIR)
          • (3)随带把环境变量添加了
    • 2.gazebo查看原环境
        • a.看一看小车
        • b.看一看地图
    • 3.手动导航,开启rviz画图
        • a.遇到问题:ImportError: No module named msg
        • b.将鼠标焦点放在tk弹窗上,可以进行移动操作
        • c.翻车,重启绘图
        • d.保存地图
    • 4.原赛道的小车自主导航
        • a.启动导航
        • b.遇到问题:Failed to create the teb_local_planner....
        • c.启动rviz
        • d.点击 2D Nav Goal,设置目标位置
        • e.新建终端,开启自动导航
    • 5.构建自己的环境模型
        • a.gazebo构建自己的模型
        • b.运行小车模型
        • c.加入自己的模型,设置一些障碍物
        • d.新建myWorld.launch
    • 6.自己绘制赛道的小车自主导航
        • a.制图
        • b.保存地图
        • c.自主导航
          • (1)创建autocar.launch文件
          • (2)两个终端分别运行
          • (3)2D Nav Goal设置目标
          • (4)运行运动脚本
        • d.运行过程
    • 7.总结

0.视频演示

地址链接

智能车自主导航

1.智能车环境,空间,资源准备

a.初始化

mkdir -p ~/		qianRuShi/racecar_ws/src
cd qianRuShi/racecar_ws/src
catkin_init_workspace

在这里插入图片描述

b.克隆 racecar 源代码包,并编译

git clone https://github.com/xmy0916/racecar.git
cd ..
catkin_make
(1)遇到问题:Could NOT find driver_base_DIR

ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第1张图片解决方案:更新apt-get,下载它

sudo apt-get update
sudo apt-get install ros-melodic-driver-base
  • 这里需要注意,如果更新慢的话,请更换国内源参考链接
  • 我的是Ubuntu18.04,所以是melodic,ros-你的版本-driver-base
  • 缺少其它包的话,相同道理,自行下载。
    ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第2张图片
(2)遇到问题:Could NOT find OpenCV (missing: OpenCV_DIR)

ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第3张图片解决方案:
查看你的opencv路径

locate OpenCVConfig.cmake

更改 racecar_gazebo/CMakeLists.txt如下:(截图的最后一行)

set(OpenCV_DIR /home/wangyang/opencv-3.4.1/build)

ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第4张图片

(3)随带把环境变量添加了
gedit ~/.bashrc

根据自己的路径,在末尾添加工作空间的环境变量,并保存:

source ~/qianRuShi/racecar_ws/devel/setup.bash

再次运行

source ~/.bashrc

2.gazebo查看原环境

a.看一看小车

roslaunch racecar_gazebo racecar.launch 

ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第5张图片关闭后

b.看一看地图

roslaunch racecar_gazebo racecar_runway.launch

效果如下:
ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第6张图片

3.手动导航,开启rviz画图

新建终端

roslaunch racecar_gazebo slam_gmapping.launch

a.遇到问题:ImportError: No module named msg

ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第7张图片

解决方案:镜像下载就行

pip install msg -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/

好吧,后来发现不是在python安装,如下安装:

sudo apt-get install ros-melodic-ackermann-msgs

b.将鼠标焦点放在tk弹窗上,可以进行移动操作

ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第8张图片
在racecar_ws/src/racecar/racecar_gazebo/scripts的keyboard_teleop.py可以看见
ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第9张图片

这里还容易翻车,大家注意了,开慢点,翻车了就重新来过

c.翻车,重启绘图

roslaunch racecar_gazebo racecar_runway.launch
roslaunch racecar_gazebo slam_gmapping.launch

好吧,我翻车两次了,大致样子是这样的:
地图:
ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第10张图片小车:
ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第11张图片

d.保存地图

你要是顺利完成地图,可以保存起来,后面自主导航用自己的(我尝试过用他的地图,但是莫名其妙的,图出来不了):
保存到racecar_gazebo/map吧,就不用了在移动了

cd racecar/racecar_gazebo/map
rosrun map_server map_saver -f map_racecar

ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第12张图片

4.原赛道的小车自主导航

ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第13张图片可关闭上面的rviz进程了,然后
修改racecar_runway_navigation.launch文件,更改地图:
ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第14张图片

a.启动导航

roslaunch racecar_gazebo racecar_runway_navigation.launch

b.遇到问题:Failed to create the teb_local_planner…

ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第15张图片解决方案:

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

c.启动rviz

roslaunch racecar_gazebo racecar_rviz.launch

ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第16张图片

d.点击 2D Nav Goal,设置目标位置

ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第17张图片

e.新建终端,开启自动导航

rosrun racecar_gazebo path_pursuit.py

过程图:
ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第18张图片

ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第19张图片
终端的显示:
ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第20张图片

5.构建自己的环境模型

a.gazebo构建自己的模型

我原本准备使用的我以前构建的模型,如何创建,请自行百度------gazebo构建模型
发现被我删了,于是自己又搞了一个。

之前的终端都可以ctrl+c了。

b.运行小车模型

roslaunch racecar_gazebo racecar.launch 

c.加入自己的模型,设置一些障碍物

然后点击左侧的insert,将自己的模型拖进
再加入一些障碍物 Construction Cone(这里以前导入的模型库,没有自行百度,或者不要障碍物就是)

选择File->Save World As,保存到racecar/racecar_gazebo/worlds下:
ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第21张图片ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第22张图片

d.新建myWorld.launch

cd racecar/racecar_gazebo/launch
sudo gedit myWorld.launch

添加下列代码

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

6.自己绘制赛道的小车自主导航

a.制图

重复上面的步骤,终端运行

roslaunch racecar_gazebo myWorld.launch

新建终端运行

roslaunch racecar_gazebo slam_gmapping.launch 

同上,移动小车,绘制地图得到:
ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第23张图片

b.保存地图

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

ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第24张图片

c.自主导航

(1)创建autocar.launch文件

在racecar/racecar_gazebo/launch/下

gedit autocar.launch

添加:

<?xml version="1.0"?>
<launch>
  <!-- Launch the racecar -->
  <include file="$(find racecar_gazebo)/launch/racecar.launch">
    <arg name="world_name" value="myworld2"/>
  </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>

前面的终端可以关了

(2)两个终端分别运行
roslaunch racecar_gazebo autocar.launch 
roslaunch racecar_gazebo racecar_rviz.launch
(3)2D Nav Goal设置目标

ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第25张图片

(4)运行运动脚本
rosrun racecar_gazebo path_pursuit.py 

d.运行过程

ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第26张图片ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第27张图片

ROS智能车定位导航仿真(原赛道自主导航,构建地图再导航)_第28张图片
至此包括一些扩展所有都已经全部完成,

7.总结

过程中,遇到了不少问题,但是好在github的源码地址有解决方案,在过程中,可能会有许多网络问题,如github资源下载慢,请参考我的另外一篇文章三步解决github下载慢的问题,另外,apt-get下载慢的话,也自己更换源,阿里,清华的都可以,参考这里。运行中途,小车容易翻车,开车慢点所以,不然要搞很久。更换地图,更换launch文件,一定记得修改相关的文件设置。

你可能感兴趣的:(嵌入式开发笔记,python,ubuntu,slam)