ROS智能车定位导航仿真

2023-10-09 04:59
文章标签 智能 仿真 ros 定位导航

本文主要是介绍ROS智能车定位导航仿真,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 准备工作(安装配置)
    • 下载源码包
    • 安装相应插件
    • 编译
  • 开始仿真
    • 环境变量添加
    • 运行小车模型
    • 启动地图
    • 建图
    • 保存地图
    • 导航
    • 注意
  • 搭建新模型并进行自主导航
    • 搭建新模型
    • 导航
  • 参考文献

准备工作(安装配置)

下载源码包

先进入ros的工作区域

cd ~/racecar_ws/src

下载:

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

在这里插入图片描述
解决办法:
可以直接进入https://github.com/xmy0916/racecar.git进行下载
在这里插入图片描述
在这里插入图片描述

安装相应插件

1.driver_base

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

在这里插入图片描述
2.controllers

sudo apt-get install ros-melodic-gazebo-ros-control
sudo apt-get install ros-melodic-effort-controllers
sudo apt-get install ros-melodic-joint-state-controller

在这里插入图片描述在这里插入图片描述在这里插入图片描述

3.ackermann_msgs

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

在这里插入图片描述
4.planner

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

在这里插入图片描述在这里插入图片描述

编译

cd ~/racecar_ws
catkin_make

![在这里插入图片描述](https://img-blog.csdnimg.cn/2020063015222840.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x4enlzeA==,size_16,color_FFFFFF,t_70出现的问题:
在这里插入图片描述
解决办法:
打开

gedit ~/catkin_ws/src/racecar-master/racecar_gazebo/CMakeLists.txt

在这里插入图片描述
修改成自己的OpenCV的位置
在这里插入图片描述
这个位置的确定可以采用locate OpenCVConfig.cmake查询,第一个即是
在这里插入图片描述
然后再编译,就成功了!
在这里插入图片描述这里的问题可以详细参考https://github.com/xmy0916/racecar往下拉,就可以看见可能出现的问题解决(BUG汇总)

开始仿真

环境变量添加

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

在这里插入图片描述

运行小车模型

roslaunch racecar_gazebo racecar.launch 

在这里插入图片描述
小车可以通过WASD来进行移动,在想移动的时候要点击这个tk窗口,才能进行移动操作
在这里插入图片描述
可以看到小车的位置,离坐标原点的位置,可以修改这个值,就可以改变小车的起始位置,如下:
(不过在这个地方不需要改变,因为源码包里面已经设计好了

但是自己在搭建模型运行的时候要注意这个问题,可以修改小车的位置也可以修改放置模型的位置,让小车在模型轨道内)
在这里插入图片描述

启动地图

这里采用的是源码包里面已经建立好的地图模型(我们也可以自己来创建地图模型,可以设计自己想要的样子,最后会介绍怎么建立地图模型)

roslaunch racecar_gazebo racecar_runway.launch

在这里插入图片描述在这里插入图片描述

建图

roslaunch racecar_gazebo slam_gmapping.launch

在这里插入图片描述进行绘图,绘图过程要注意小车的移动,小车不是很稳,小心翻车
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

建图完成
在这里插入图片描述

保存地图

rosrun map_server map_saver -f test_map

在这里插入图片描述
保存在主目录里面(红色框)
在这里插入图片描述
然后将这两个文件复制到map文件下
在这里插入图片描述

导航

由于前面保存的地图名字为test_map,所以这里要修改文件里面的内容
在这里插入图片描述
修改为保存的地图的名字

在这里插入图片描述
然后,启动导航和环境地图:

roslaunch racecar_gazebo racecar_runway_navigation.launch

在这里插入图片描述启动rviz

roslaunch racecar_gazebo racecar_rviz.launch

在这里插入图片描述就打开了保存的地图,可以进行导航了
在这里插入图片描述用2D Nav Goal发布目标:设计小车行车轨迹
在这里插入图片描述
启动导航脚本

rosrun racecar_gazebo path_pursuit.py

在这里插入图片描述
开始自主导航(红线部分就是小车导航走过的路)
在这里插入图片描述在这里插入图片描述在这里插入图片描述

注意

在用2D Nav Goal发布目标的时候,要把导航路线设置好,拐角的地方要注意,不然就会出现下面的情况,就会卡在这里不动
在这里插入图片描述

搭建新模型并进行自主导航

搭建新模型

打开gazebo

gazebo

在这里插入图片描述选择
在这里插入图片描述
设计一个自己想要的模型

在这里插入图片描述

然后保存

在这里插入图片描述

取一个名字,保存

在这里插入图片描述看见已经存在了
在这里插入图片描述
重新打开gazebo
这里有两种方法,一种是根据这个位置,估计小车的起始位置从而来放置模型,让小车在模型内
在这里插入图片描述
在这里插入图片描述

一种是修改参数,如下:也就是小车的起始位置在坐标原点(我这里采用这种方式)
在这里插入图片描述
放置模型就像这样
在这里插入图片描述

插入障碍物(我操作这个图不是很顺畅,不过大概就是这样画)
选择这个锥桶模型
在这里插入图片描述
放入

保存世界文件,点击左上角File选择Save World As

在这里插入图片描述
然后保存在这个路径下面
在这里插入图片描述
然后可以新建一个launch文件,跟上面racecar_runway.launch文件一样,只是修改一下,修改成保存的test_run.world的名字
在这里插入图片描述

导航

然后就可以跟上面一样,进行导航了

roslaunch racecar_gazebo test_run.launch
roslaunch racecar_gazebo slam_gmapping.launch

其余步骤与上述一样
在这里插入图片描述
在gazebo里面我的图不太清楚,这个时候摄像头就起到了很好的作用,可以进行路况的检测,看前面是否有障碍物
在这里插入图片描述
建图完成,然后就是保存
在这里插入图片描述
保存地图

rosrun map_server map_saver -f test_run_map

在这里插入图片描述
然后移入map文件夹下
在这里插入图片描述在这里插入图片描述
修改地图参数,以及修改模型
在这里插入图片描述
在这里插入图片描述就完成了自主导航(红线部分就是小车导航走过的路)

注意的是,轨道模型创建的起始位置最好区别开,像我最后自己设置的模型,是个环道,起始位置没有用墙隔开,就导致在2D Nav Goal规划路线的时候,小车后面半段路程就不好画,就会有点问题存在,所以可以避免这个问题。
在这里插入图片描述

参考文献

1.https://blog.csdn.net/lxzysx/article/details/105346419
2.https://www.guyuehome.com/6463
3.https://github.com/xmy0916/racecar.git

这篇关于ROS智能车定位导航仿真的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/170525

相关文章

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

智能交通(二)——Spinger特刊推荐

特刊征稿 01  期刊名称: Autonomous Intelligent Systems  特刊名称: Understanding the Policy Shift  with the Digital Twins in Smart  Transportation and Mobility 截止时间: 开放提交:2024年1月20日 提交截止日

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

perl的学习记录——仿真regression

1 记录的背景 之前只知道有这个强大语言的存在,但一直侥幸自己应该不会用到它,所以一直没有开始学习。然而人生这么长,怎就确定自己不会用到呢? 这次要搭建一个可以自动跑完所有case并且打印每个case的pass信息到指定的文件中。从而减轻手动跑仿真,手动查看log信息的重复无效低质量的操作。下面简单记录下自己的思路并贴出自己的代码,方便自己以后使用和修正。 2 思路整理 作为一个IC d

【C++】作用域指针、智能指针、共享指针、弱指针

十、智能指针、共享指针 从上篇文章 【C++】如何用C++创建对象,理解作用域、堆栈、内存分配-CSDN博客 中我们知道,你的对象是创建在栈上还是在堆上,最大的区别就是对象的作用域不一样。所以在C++中,一旦程序进入另外一个作用域,那其他作用域的对象就自动销毁了。这种机制有好有坏。我们可以利用这个机制,比如可以自动化我们的代码,像智能指针、作用域锁(scoped_lock)等都是利用了这种机制。

ROS - C++实现RosBag包回放/提取

文章目录 1. 回放原理2. 回放/提取 多个话题3. 回放/提取数据包,并实时发布 1. 回放原理 #include <ros/ros.h>#include <rosbag/bag.h>#include <std_msgs/String.h>int main(int argc, char** argv){// 初始化ROS节点ros::init(argc, argv,