ROS智能车定位导航仿真
- 一、前言
- 二、效果图
- 三、准备工作
- [1.在Ubuntu上安装ROS Kinetic](https://blog.csdn.net/qq_42585108/article/details/104327661)
- 2.创建ROS工作区间
- ①1创建racecar_ws和src文件夹
- ②初始化工作空间
- ③下载racecar源代码包,并编译工程
- 四、启动仿真
-
- 五、建图
- 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
创建成功如下:
四、启动仿真
1.设置环境变量
echo "source ~/racecar_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
2.启动地图
roslaunch racecar_gazebo racecar_runway.launch
五、建图
1.启动slam和rviz
新建终端
cd racecar_ws/
roslaunch racecar_gazebo slam_gmapping.launch
2 控制车辆(左侧有个控制窗口),WASD控制前左后右的运动就可以建图了:
原图:
成果图:
3.新建终端保存地图
保存地图的路径:/racecar_ws/src/racecar/racecar_gazebo/map
cd ~/racecar_ws/src/racecar/racecar_gazebo/map
rosrun map_server map_saver -f map_racecar
分析:在控制小车运动时,小车很容易翻车。不过最终能运行完地图。
六、自主定位导航
1.启动导航和环境地图:
新建终端
cd racecar_ws/
roslaunch racecar_gazebo racecar_runway_navigation.launch
2.启动rviz:
新建终端:
cd racecar_ws/
roslaunch racecar_gazebo racecar_rviz.launch
3.用2D Nav Goal发布目标:
4.启动导航脚本
新建终端
cd racecar_ws/
rosrun racecar_gazebo path_pursuit.py
上图,对比发现小车确实打导航定位成功。
七、用自己所建的地图赛道,来跑小车
1.打开gazebo
gazebo
2.点击Edit->Build Editor,进行模型创建
3.将创建好的地图模型保存
4.运行小车模型,导入刚刚的模型框架,然后保存world文件
roslaunch racecar_gazebo racecar.launch
点击insert—>track,即可将跑道模型拖到小车模型中。注意:将小车放到适当的位置。
为跑道添加障碍物
5.保存world文件到下载功能包中的racecar_gazebo包中的worlds文件夹中
选择File->Save World As
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>
7.运行跑道模型,控制小车跑图了
roslaunch racecar_gazebo mycar.launch
8.gmapping建图(上面一步的终端保持开启状态)
roslaunch racecar_gazebo slam_gmapping.launch
控制小车跑一圈地图,建好的地图如下:
新建终端,保存gmapping创建的地图
cd racecar_ws/src/racecar/racecar_gazebo/map
rosrun map_server map_saver -f mycar_map
八、自主定位导航(自己建的赛道)
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>
2.运行跑道
roslaunch racecar_gazebo mycar1.launch
3.新建终端,运行RVIZ进行手工导航
roslaunch racecar_gazebo racecar_rviz.launch
4.用2D Nav Goal发布目标:
5.启动导航脚本
rosrun racecar_gazebo path_pursuit.py
发现现车确实在自己定位
九、总结
通过这次实验很好的对ROS下智能车的仿真实验的完成,用仿真功能包自带的地图很好的能跑出来,而且能够用2D Nav Goal发布目标来实现智能车的自主定位,但在用自己所建的赛道时,用键盘确实能完成跑道,但在用2D Nav Goal发布目标实现智能车的自主定位,小车容易打滑,而且在遇到障碍物时,有时会发生侧翻现象。可能是相关代码还不够完善吧。不过最终还是跑出来了。注意事项:在构建地图时要注意地图尺寸大小,如果不合适,将会影响下车的导航,就会一直卡在某一个障碍物的前面。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)