2019年大学生智能车大赛室外光电组+在ROS下搭建仿真模拟环境,编程控制小车完成定位导航仿真
-
- 一、前言
- 二、准备工作
-
- 1.创建工作空间
- 2.下载racecar源代码包,并编译工程
- 三、启动仿真
-
- 1.设置环境变量
- 2.启动地图
- 四、建图
-
- 1.启动slam和rviz:
- 2.控制车辆(左侧有个控制窗口,图标是问号点开),WASD控制前左后右的运动就可以建图了:
- 3.保存地图
- 五、导航
-
- 1.启动导航和环境地图:
- 2.启动rviz:
- 3.利用2D Nav Goal发布目标
- 4.启动导航脚本
- 六、搭建自己的地图进行导航
-
- 1.打开新的终端输入命令gazebo,创建新的地图模型
- 2.点击左上角的Edit选择Building Edit:
- 3.点击Create Walls下面的Wall进行绘制地图:
- 4.画完后点击左上角的File选择save as:
- 5.重启gazebo,点击左上角的Insert可以看到刚刚建立的模型,点击一下拖到gazebo中:
- 6.插入锥桶,点击Insert选择Construction Cone拖入gazebo
- 7.保存世界文件,点击左上角File选择Save World As
- 8.创建launch文件,填写赛道配置参数
- 9. 运行跑道模型,进行建图操作
- 10. 启动slam和rviz
- 11.保存地图
- 七、用自己的地图进行导航
-
- 1. 创建myself.launch文件,并按照前面启动文件下入代码
- 2. 启动导航和环境地图
- 3. 运行RVIZ进行手工导航
- 4. 利用2D Nav Goal发布目标
- 5. 启动导航脚本
- 八、问题解决办法
-
- 1.报错控制器相关
- 2.报错driver_base相关
- 3.报错ackermann_msgs相关
- 4.报错findline.cpp找到opencv头文件
- 5.报错无法创建teb_local_planner / TebLocalPlannerROS规划器
- 6.没有laser相关话题,无法建图
一、前言
操作系统:ubuntu16.04
ROS版本:kinetic
Gazebo版本:7.16.0
二、准备工作
1.创建工作空间
mkdir -p ~/racecar_ws/srccd ~/racecar_ws/srccatkin_init_workspace
2.下载racecar源代码包,并编译工程
git clone https://github.com/xmy0916/racecar.gitcd ..catkin_make
创建成功如下:
三、启动仿真
1.设置环境变量
echo "source ~/racecar_ws/devel/setup.bash" >> ~/.bashrcsource ~/.bashrc
2.启动地图
roslaunch racecar_gazebo racecar_runway.launch
四、建图
1.启动slam和rviz:
roslaunch racecar_gazebo slam_gmapping.launch
2.控制车辆(左侧有个控制窗口,图标是问号点开),WASD控制前左后右的运动就可以建图了:
完成之后:
操作小车可能会出现打滑现象,可以多次尝试,跑慢点。
3.保存地图
rosrun map_server map_saver -f ~/racecar_ws/src/racecar_gazebo/map/map_runway
五、导航
1.启动导航和环境地图:
roslaunch racecar_gazebo racecar_runway_navigation.launch
2.启动rviz:
roslaunch racecar_gazebo racecar_rviz.launch
3.利用2D Nav Goal发布目标
4.启动导航脚本
rosrun racecar_gazebo path_pursuit.py或者cd ~/racecar_ws/src/racecar_gazebo/scriptspython path_pursuit.py
开始进行导航
效果图:
六、搭建自己的地图进行导航
1.打开新的终端输入命令gazebo,创建新的地图模型
2.点击左上角的Edit选择Building Edit:
3.点击Create Walls下面的Wall进行绘制地图:
4.画完后点击左上角的File选择save as:
保存完成可以看看是否成功
5.重启gazebo,点击左上角的Insert可以看到刚刚建立的模型,点击一下拖到gazebo中:
这里最好把坐标轴放到我们车的起点,如图画圈处(不改也没关系,可以在启动文件里定义车模的坐标)
我们可以先把有小车的地图拿出来再放模型:
roslaunch racecar_gazebo racecar.launch
这样就很简单的将小车放到模型起始位置!
6.插入锥桶,点击Insert选择Construction Cone拖入gazebo
7.保存世界文件,点击左上角File选择Save World As
8.创建launch文件,填写赛道配置参数
cd racecar_ws/src/racecar/racecar_gazebo/launch
touch myself.launch
gedit myself.launch
写入下面代码:
<?xml version="1.0"?>
<launch><!-- Launch the racecar --><include file="$(find racecar_gazebo)/launch/racecar.launch"><arg name="world_name" value="myself"/></include>
</launch>
9. 运行跑道模型,进行建图操作
roslaunch racecar_gazebo myself.launch
10. 启动slam和rviz
roslaunch racecar_gazebo slam_gmapping.launch
完成之后:
11.保存地图
rosrun map_server map_saver -f ~/racecar_ws/src/racecar_gazebo/map/myself
七、用自己的地图进行导航
1. 创建myself.launch文件,并按照前面启动文件下入代码
2. 启动导航和环境地图
roslaunch racecar_gazebo myselfnavigation.launch
3. 运行RVIZ进行手工导航
roslaunch racecar_gazebo racecar_rviz.launch
4. 利用2D Nav Goal发布目标
5. 启动导航脚本
rosrun racecar_gazebo path_pursuit.py或者cd ~/racecar_ws/src/racecar_gazebo/scriptspython path_pursuit.py
开始进行导航
效果图:
八、问题解决办法
1.报错控制器相关
sudo apt-get install ros-kinetic-gazebo-ros-control
sudo apt-get install ros-kinetic-effort-controllers
sudo apt-get install ros-kinetic-joint-state-controller
2.报错driver_base相关
sudo apt-get install ros-kinetic-driver-base
3.报错ackermann_msgs相关
sudo apt-get install ros-kinetic-ackermann-msgs
4.报错findline.cpp找到opencv头文件
执行:得到locate OpenCVConfig.cmake你的opencv的路径
执行:gedit ~/racecar_ws/src/racecar_gazebo/CMakeLists.txt
修改第7行的路径成你的路径:set(OpenCV_DIR /opt/ros/kinetic/share/OpenCV-3.3.1-dev/)
5.报错无法创建teb_local_planner / TebLocalPlannerROS规划器
sudo apt-get install ros-kinetic-teb-local-planner
6.没有laser相关话题,无法建图
/ racecar_ws / src / racecar_description / urdf / racecar.gazebo在这个文件中61行改成false即可,代码已修复,直接下载没有问题的。