利用Gazebo搭建赛道,控制小车完成比赛(大学生智能车大赛室外光电组赛道仿真模拟)

article/2025/8/18 21:02:08

ROS学习【18】-----利用Gazebo搭建赛道,控制小车完成比赛目录

  • 一、 ROS仿真功能包下载编译
    • 1、racecar功能包下载
    • 2、安装该功能包运行需要的控件
    • 3、racecar功能包编译
    • 4、测试是否编译成功
  • 二、 运行功能包自带的赛道
    • 1、运行赛道,控制小车进行位移
    • 2、进行gmapping建图
  • 三、 自行进行赛道搭建
    • 1、新建终端,打开Gazebo
    • 2、运行小车模型,导入刚刚的模型框架,然后保存world文件
    • 3、创建launch文件,填写赛道配置参数
    • 4、运行我们的地图
    • 5、进行gmapping建图
  • 四、 实现 小车自主定位导航
    • 1、创建手工导航launch文件
    • 2、运行手工导航
    • 3、选择2D Nav Goal指针,进行手工导航

现在很多小伙伴在为全国大学生智能车比赛做准备,但在进行小车组装之前,一定会通过ROS进行赛道模拟,调试,一切准备就绪后才会进行现实中小车的组装,因此,测试是非常重要的,本次博客,林君学长主要带大家利用Gazebo搭建全国大学生智能车比赛的规则赛道,控制小车,跑完赛道,虽然只是简单的模拟,但对参赛的小伙伴来说,可以说非常重要了,有了一个入门的基础,接下来,一起看步骤了解吧!

  • ubuntu版本:ubuntuKylin-16.04
  • ROS版本:ROS-kinetic
  • Gazebo版本:Gazebo-7.16

一、 ROS仿真功能包下载编译

一下ROS的仿真功能包需要通过GitHub克隆下载,当然是网络的大佬写好了的,小伙伴如需要自己写,可以参考其中的代码,进行自行构建,这里,林君学长推荐模仿该仿真功能包,进行自行搭建,毕竟对于才参赛的同学来说,动手能力非常的重要!

1、racecar功能包下载

1)、新建终端进入ROS工作空间的src目录下

cd ~/lenovo/ros/src

2)、下载Gazebo搭建赛道功能包racecar

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

在这里插入图片描述
3)、racecar功能包中资源展示
在这里插入图片描述
4)、建议及推荐
(1)、小伙伴如果下载过慢,可以尝试通过手机开热点后,通过电脑进行连接,然后下载,这样可能会下载成功,因为林君学长就是这样下载成功的
(2)、小伙伴如果实在不能够下载,林君学长已经将该源码资源包啥贯穿到我的资源模块,小伙伴可以去林君学长的后台下载,下载链接如下所示:
https://download.csdn.net/download/qq_42451251/12483862
在这里插入图片描述
以上资源包的内容和林君学长下面讲解资源包的内容完全一样哦,接下来,让我们进入正题吧!

2、安装该功能包运行需要的控件

在上面的终端不关闭的情况下,新建一个终端,进行控件的安装,控件的安装是为了本次实验任务需要,不安装,在编译或者运行的时候会出现错误的哦!
1)、driver_base的控件安装

sudo apt-get install ros-kinetic-driver-base

在这里插入图片描述
输入y进行下载,以上截图为操作现状,后面的控件下载将不给出截图了哦,输入y对应下载就好!
2)、controllers控件安装

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

3)、ackermann_msgs控件安装

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

4)、planner控件安装

sudo apt-get install ros-kinetic-global-planner
sudo apt-get install ros-kinetic-teb-local-planner

以上就是需要编译之前准备的控件安装啦,控件安装成功后,关闭这个终端;有些控件是之前在进行ROS学习的时候安装过的,但也是本次任务需要的控件,小伙伴对应安装就好,如果安装过,他会提示已安装的哦。接下来,我们开始进行编译吧!

3、racecar功能包编译

1)、返回ROS工作空间

cd ~/lenovo/ros

2)、编译

catkin_make

3)、编译成功如下所示:
在这里插入图片描述
编译过程中,如果遇到问题,则可根据提示修改,由于林君学长在编译之后,没有遇到过问题,编译很流畅,如果小伙伴遇到问题,可以给林君学长留言或者私信,看到后,能够解决的会帮大家解决的哦!

4、测试是否编译成功

1)、程序注册

source ./devel/setup.bash

2)、在终端输入以下命令,运行小车模型,测试编译是否成功

roslaunch racecar_gazebo racecar.launch 

以上命令运行之后,系统将会打开一个tk的控制界面小窗,控制小车的移动,同时,系统会打开Gazebo仿真软件,里面会有一个小车模型,如下所示:
在这里插入图片描述
该tk窗口可以通过键盘的WSAD来控制小车进行位移!

二、 运行功能包自带的赛道

1、运行赛道,控制小车进行位移

1)、在上面ctrl+c结束gazebo的运行,然后运行如下命令,运行赛道

roslaunch racecar_gazebo racecar_runway.launch

2)、运行结果如下:
在这里插入图片描述
3)、控制小车进行位移:
在这里插入图片描述

2、进行gmapping建图

1)、新建终端,运行rviz,进行gmapping建图

cd ~/lenovo/ros
source ./devel/setup.bash
roslaunch racecar_gazebo slam_gmapping.launch

在这里插入图片描述
3)、控制小车跑完全图,进行gmapping建图
(1)、赛道跑到一半
在这里插入图片描述
(2)、赛道跑完
在这里插入图片描述
现在gmapping地图就建立好了,操控小车进行跑图需要有点耐心,需要一定的时间,而且操作不到位,可能导致小车翻车,所以小心操控呀!接下来就进行地图的保存吧
4)、通过以下命令,保存gmapping图

rosrun map_server map_saver -f test_map

在这里插入图片描述
保存的地图如下所示:
在这里插入图片描述在这里插入图片描述
注意: 由于我们是在ros下运行的,所以地图在ros工作空间下,小伙伴也可以自行定位地图保存的位置例如:

rosrun map_server map_saver -f xxx/xxx/test_map

一般来说,地图需要保存到map文件夹内,该文件夹专门用来保存我们创建模型的gmapping地图,如下所示:
在这里插入图片描述
在这里插入图片描述
好了,接下来,我们关闭上面运行的所有程序及所有终端,然后我们就可以开始进行我们自己搭建地图了。
接下来,我们自己搭建一个地图,然后添加障碍物进行小车跑图吧!

三、 自行进行赛道搭建

为了区别刚刚的地图,我们自行创建一个较为简单的地图吧,这也是为了方便本次博客的讲解,下面,我们开始吧!

1、新建终端,打开Gazebo

1)、输入如下命令,打开gazebo

gazebo

在这里插入图片描述
2)、点击Edit->Build Editor,进行模型创建
在这里插入图片描述
3)、模型创建完成图如下所示:
对于gazebo怎么创建模型图,小伙伴们可以参考林君学长的另一篇博客,讲解了如何通过gazebo创建仿真模型图及对应的保存,博客链接如下所示:
https://blog.csdn.net/qq_42451251/article/details/105161520
在这里插入图片描述
4)、接下来,将创建好的地图模型保存
在这里插入图片描述
在这里插入图片描述
在对应的位置,我们便可以看到我们创建的赛道模型了:
在这里插入图片描述
5)、关闭gazebo

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

1)、通过以下代码运行小车模型

cd ~/lenovo/ros
source ./devel/setup.bash
roslaunch racecar_gazebo racecar.launch 

在这里插入图片描述
2)、拖入刚刚我们创建的地图到合适的位置
在这里插入图片描述
3)、添加障碍物
在这里插入图片描述
4)、保存world文件到下载功能包中的racecar_gazebo包中的worlds文件夹中
(1)、选择File->Save World AS
在这里插入图片描述
(2)、选择racecar_gazebo包中的worlds文件夹进行保存,自己命名吧,不要和里面的名字重复就好,学长命名为track1
在这里插入图片描述
在这里插入图片描述
(3)、查看是够保存成功
在这里插入图片描述
可以看到模型导入成功,接下来,我们就创建launch文件运行自己的地图吧!

3、创建launch文件,填写赛道配置参数

1)、新建终端,进入racecar_gazebo工程包中的launch文件夹

cd ~/lenovo/ros/src/racecar/racecar_gazebo/launch

2)、创建track1.launch文件

touch track1.launch

3)、打开track1.launch文件,写入配置参数

gedit track1.launch

写入如下代码:

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

然后点击保存后关闭!接下来就可以运行我们自己的赛道了

4、运行我们的地图

1)、运行地图

source ./devel/setup.bash
roslaunch racecar_gazebo track1.launch 

在这里插入图片描述
2)、控制小车跑图
在这里插入图片描述

5、进行gmapping建图

1)、上面运行的终端不关闭,新建终端,接着输入如下命令,进行gmapping建图

roslaunch racecar_gazebo slam_gmapping.launch

在这里插入图片描述
2)、控制小车,跑完全图,全图如下所示:
在这里插入图片描述
3)、新建终端,保存gmapping创建的地图

cd ~/lenovo/ros/src/racecar/racecar_gazebo/map
rosrun map_server map_saver -f track1_map

在这里插入图片描述
4)查看地图是否保存成功
在这里插入图片描述
可以看到,地图已经完整的保存了哦;到这里,我们的基本任务就完成了哦,关闭以上运行的所有软件,及所有终端;接下来,我们就让小车自动导航吧,避免人工操作过于繁琐,让它自己跑起来!

四、 实现 小车自主定位导航

1、创建手工导航launch文件

1)、新建终端,创建track2.launch文件

cd ~/lenovo/ros/src/racecar/racecar_gazebo/launch
touch track2.launch
gedit track2.launch

2)、写入配置文件代码

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

3)、如何改为你们的?
小伙伴只需要如下图所示,该其中两个地方,改为你们自己的模型名和保存地图的yaml文件就可以了:
在这里插入图片描述

2、运行手工导航

1)、输入如下命令,运行我们的赛道

cd ~/lenovo/ros
source ./devel/setup.bash
roslaunch racecar_gazebo track2.launch

在这里插入图片描述
2)、新建终端,运行RVIZ进行手工导航

cd ~/lenovo/ros
source ./devel/setup.bash
roslaunch racecar_gazebo racecar_rviz.launch

在这里插入图片描述
3)、新建终端,启动导航的path_pursuit.py文件

cd ~/lenovo/ros
source ./devel/setup.bash
rosrun racecar_gazebo path_pursuit.py

3、选择2D Nav Goal指针,进行手工导航

1)、选择2D Nav Goal指针
在这里插入图片描述
2)、通过2D Nav Goal指针选择地图上面的一个点进行手工导航
在这里插入图片描述
3)、新建终端,运行路径python文件,提示是否到达终点

cd ~/lenovo/ros
source ./devel/setup.bash
rosrun racecar_gazebo path_pursuit.py

在这里插入图片描述

4)、观察小车的移动情况
在这里插入图片描述
到达终点之后,运行路径python文件的终端就会显示已到达:
在这里插入图片描述
小车自动导航很慢的,小伙伴耐心等待就行了!
以上就是本次博客的全部内容啦,希望小伙伴通过对本次博客的阅读,可以帮助小伙伴理解,如何进行赛道搭建并进行小车吧比赛建模,对小伙伴参加全国智能车大赛是非常有帮助的哦!
遇到问题的小伙伴评论区留言,林君学长看到会为大家解答的,这个学长不太冷!

陈一月的又一天编程随岁月^ _ ^


http://chatgpt.dhexx.cn/article/NWO2GCZf.shtml

相关文章

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

文章目录 0.视频演示1.智能车环境&#xff0c;空间&#xff0c;资源准备a.初始化b.克隆 racecar 源代码包&#xff0c;并编译(1)遇到问题&#xff1a;Could NOT find driver_base_DIR(2)遇到问题&#xff1a;Could NOT find OpenCV (missing: OpenCV_DIR)(3)随带把环境变量添加…

AR rc漂移车

文章目录 前言一、物料准备二、车辆安装三、舵机调试1.舵机控制原理2.舵机供电及连线3.PWM控制舵机 四、电机调试1.电机控制原理2.电机供电及连线3.PWM控制电机4.附 五、单片机独立供电六、蓝牙遥控 前言 前几天偶然看到了《马里奥赛车 Live:家庭巡回赛》这款运行在switch上的A…

ROS学习记录(二)阿克曼转向车运动学模型及在gazebo中搭建仿真环境

前言&#xff1a;该篇是ROS学习记录的第二篇&#xff0c;如果还没关注过之前文章的读者&#xff0c;如有需要可以通过下方传送门去看之前的文章&#xff1a; ROS学习记录&#xff08;一&#xff09; Plugin插件 这两天关注了古月老师的公众号&#xff0c;看到了其中一篇课程推…

(ROS)ROS智能车自主导航roslaunch racecar_gazebo racecar_runway_navigation.launch报错

前提&#xff1a; 修改修改racecar_runway_navigation.launch文件后&#xff0c;运行roslaunch racecar_gazebo racecar_runway_navigation.launch 出现红色报错。 ERROR: cannot launch node of type [move_base/move_base]: move_base ROS path [0]/opt/ros/indigo/share/ro…

用ROS来做无人测试平台系列之国外的一些RACECAR

MIT RACECAR&#xff0c;最早开始做racecar的&#xff0c;主要基于双目摄像头激光雷达: http://fast.scripts.mit.edu/racecar/hardware/ UPENN F1 TENTH&#xff0c;同MIT racecar特别像&#xff0c;不过很多东西需自己组装&#xff0c;电调模块需自己焊接: http://f1tenth.o…

多移动机器人(阿克曼小车)在gazebo中的配置

多移动机器人&#xff08;阿克曼小车&#xff09;在gazebo中的配置 前言 最近需要进行异构多机器人方面的工作&#xff0c;在之前的工作中已经实现了多麦克纳姆轮小车在gazebo中的仿真。 &#xff08;如何在Gazebo中实现多机器人仿真 https://www.guyuehome.com/4889&#xf…

记实现多racecar仿真过程中遇到的问题(一)

最近尝试过使用多turtlebot3仿真之后&#xff0c;想测试一下多Ackermann结构车的仿真效果&#xff0c;在一番寻找下将目光锁定到了MIT-racecar。但是在使用过程中遇到了许多问题&#xff0c;在此记录一下。 运行环境&#xff1a; Ubuntu18.04(虚拟机)&#xff0c;ROS-melodic…

HackTheBox You know racecar 格式化字符串漏洞pwn题目

题目网址&#xff1a; https://app.hackthebox.com/challenges/racecar解压密码为hackthebox 文件信息收集 file racecar这是一个32位的程序&#xff0c;动态链接的 checksec vuln防护都开着的&#xff0c;从上到下依次是 32位程序 全部RELRO 开启栈保护 启用数据执行防护…

什么是Race Condition?

简介 race condition是多线程的应用程序中经常遇到的问题&#xff0c;本文章接下来会解释什么是race condition&#xff0c;如何检测到它们以及如何解决这类问题。 Race condition 从定义来说&#xff0c;race condition是代码中一些执行结果取决于其执行的相对时间或者多线…

免费教程·开源 | 从零开始制作ROS无人竞速车RACECAR教程

一、课程前提 自动驾驶汽车即将成为交通出行的主流工具之一&#xff0c;它以计算机、现代汽车产业技术为基础&#xff0c;以数字化、智能化为依托实现自动化驾驶&#xff0c;学习自动驾驶需要了解架构、环境感知、行为决策、规划路径&#xff0c;多传感器融合等一系列技术&…

Racecar 基于ROS通信机制的多点导航实验

基于ROS通信机制的多点导航实验 一、实验目的二、实验环境三、实验原理四、实验内容五、实验步骤1.获取rviz发送目标点的topic&#xff1b;2.对已经建好的图获取相应目标点的坐标&#xff08;多个&#xff0c;即小车要去的目标&#xff09;&#xff0c;还没建图先完成建图&…

C语言的整数除法

c语言的整数除法是向下取整的。

C语言 从5~100之间找出能被5或7整除的数

从5~100之间找出能被5或7整除的数 算法分析&#xff1a;注意“或”的理解&#xff1a;或此或彼或彼此 #include "stdio.h" main( ) { int i;for(i5;i<100;i)if(i%50||i%70)printf("%d\t",i); }有伙伴问倒序输出&#xff1a; 在线编译C语言&#xff1a;…

C语言实现计算数字能否被3个数整除

C语言实现计算数字能否被3个数整除 编程实现&#xff1a;输入一个整数&#xff0c;判断它能否被3&#xff0c;5&#xff0c;7整除&#xff0c;并输出以下信息之一&#xff1a; ①能同时被3&#xff0c;5&#xff0c;7整除&#xff1b; ②能被其中两数(要指出哪两个)整除&#x…

C语言-求能被7或11整除的整数

本关任务&#xff1a;编写程序求[1&#xff0c;1000]范围内能被7或11整除&#xff0c;但不能同时被7和11整除的整数。按每行8个数&#xff0c;每个数占5个字符且以左对齐的格式进行输出。 #include<stdio.h> int main() {int i1;int count0;for(i1;i<1000;i){if((i%7…

c语言学习-判断一个数是否能被3整除

判断一个数是否能被3整除 在主函数中输入整型数据n,判断该数是否能被3整除&#xff0c;如果能被3 整除&#xff0c;输出“yes”,否则输出“no” 程序流程图&#xff1a; void main() { int a; printf("please enteraguess number:\n"); scanf("%d",&…

C语言--编写程序,输入一个整数,判断它能否被3,5,7整除

编写程序&#xff0c;输入一个整数&#xff0c;判断它能否被3,5,7整除&#xff0c;并输出下列信息之一&#xff1a; 能同时被3,5,7整除&#xff1b;能被x和y两个数整除&#xff1b;能被x整除&#xff1b;不能被3,5,7任一个数整除。 #include <stdio.h> void main() { in…

【C语言】数据整除判断

题目&#xff1a;C语言编程实现——输入一个整数&#xff0c;判断它能否被 3&#xff0c;5&#xff0c;7 整除&#xff0c;并输出以下信息之一&#xff1a; ①能同时被 3&#xff0c;5&#xff0c;7 整除&#xff1b; ②能被其中两数&#xff08;要指出哪两个&#xff09;整除…

C语言—整除问题、求余、赋值、逻辑运算符易错点

前言 &#x1f428;这一篇主要是讲那些老师可能不会讲&#xff0c;但是很多初学者都容易踩坑的地方 &#x1f914; 根据自己踩过的的坑整理了一下&#x1f927; 文章目录 前言一、整除问题1️⃣第一种情况&#xff1a;整数相除&#xff0c;抹去小数位2️⃣第二种情况&#xff…

东南大学本 硕 博论文中期答辩 毕业答辩ppt模板2021版

东南大学本硕博开题、中期、毕业论文答辩ppt模板 ppt模板样式如下&#xff1a; 如果对您有用 &#xff0c;欢迎点赞&#xff0c;关注和收藏&#xff0c;谢谢各位路官。 下载地址 https://download.csdn.net/download/Vertira/19026191