Ubuntu 的 ROS 操作系统 turtlebot3 gazebo仿真

news2024/12/22 9:35:28

引言

在这里插入图片描述


学习目标

在这里插入图片描述


学习内容

1 注意事项


2 TurtleBot3模拟环境

TurtleBot3支持在模拟中使用虚拟机器人进行编程和开发,主要有以下两种开发环境:

2.1 Fake Node + RViz
  • 功能:Fake Node是一种轻量级的模拟方式,可以结合3D可视化工具RViz一起使用。这种环境可以对机器人的基本模型和运动进行测试,比如行进路线和旋转等基础行为。

  • 局限性:由于Fake Node不支持传感器,因此不适合涉及传感器数据的开发任务,比如环境感知、SLAM(即时定位与地图构建)、避障等。

  • 适用场景:适合需要快速验证机器人模型和基本运动功能的场景,但不支持复杂的传感器相关任务。

2.2 Gazebo
  • 功能:Gazebo是一个强大的3D机器人仿真平台,支持多种传感器(如IMU、激光测距仪LDS、摄像头等),并能够逼真地模拟物理环境。这使得Gazebo能够应用于包括SLAM、导航、避障等传感器依赖的复杂任务中。

  • 优点:Gazebo不仅支持TurtleBot3的物理行为模拟,还可以通过ROS接口来接收传感器数据、控制机器人动作,并实时监控机器人在仿真环境中的表现。广泛应用于ROS开发者的项目中,是研究导航、路径规划、环境感知等功能的首选平台。

  • 推荐用途:由于其全面的功能支持,Gazebo非常适合复杂的机器人开发任务,比如基于传感器数据的路径规划、自动导航和避障等。

2.3 Gazebo教程
  • 如果需要详细了解Gazebo的使用方法,建议访问 Gazebo官方教程。
  • 该教程提供了从基本安装、环境设置到高级开发功能的全面指导,适合各个水平的开发者。

3 安装Gazebo模拟包

  • 本教程使用ROS Gazebo包,因此需要安装适用于ROS1 Noetic的正确Gazebo版本。
  • 确保安装了TurtleBot3和TurtleBot3_msgs包,否则无法启动模拟。
# 克隆TurtleBot3仿真包
cd ~/catkin_ws/src/
git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git

# 编译工作空间
cd ~/catkin_ws
catkin_make


4 启动模拟环境

TurtleBot3提供了三个不同的车模型与模拟世界环境。启动新的环境前,确保完全终止其它模拟环境。

4.1 车模型环境

4.1.1 TurtleBot3 burger

export TURTLEBOT3_MODEL=burger

TurtleBot3 burger 模型如下图所示:

在这里插入图片描述

4.1.2 TurtleBot3 bwaffle

export TURTLEBOT3_MODEL=waffle

TurtleBot3 waffle 模型如下图所示:

在这里插入图片描述

4.1.3 TurtleBot3 waffle_pi

export TURTLEBOT3_MODEL=waffle_pi

TurtleBot3 waffle_pi 模型如下图所示:

在这里插入图片描述

4.1.3 便捷设置

如果我们仿真开发时只用其中某一款,例如只用TurtleBot3 burger 。但是每次启动一个终端都需要设置TurtleBot3 的车模型,为了方便,我们直接在终端的配置文件中写入,每次打开终端会自动加载设置的某一款车模型。

# 打开.bashrc文件
sudo gedit ~/.bashrc

# 在文件末尾添加以下内容(burger车模型,其他同理)
export TURTLEBOT3_MODEL=burger

4.2 模拟世界环境

4.2.1 空白环境

# 便捷设置后可不用设置车模型
export TURTLEBOT3_MODEL=burger
roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch

TurtleBot3 空白环境如下图所示:

在这里插入图片描述

4.2.2 TurtleBot3默认世界

# 便捷设置后可不用设置车模型
export TURTLEBOT3_MODEL=burger
roslaunch turtlebot3_gazebo turtlebot3_world.launch

TurtleBot3 默认世界环境如下图所示:

在这里插入图片描述

4.2.3 TurtleBot3房屋环境

# 便捷设置后可不用设置车模型
export TURTLEBOT3_MODEL=burger
roslaunch turtlebot3_gazebo turtlebot3_house.launch

提示:首次启动TurtleBot3房屋环境时,地图下载可能需要数分钟,具体时间取决于网络状况。

TurtleBot3 房屋环境如下图所示:

在这里插入图片描述

4.3 Gazebo启动失败原因

4.3.1 环境变量未自动加载

  • 默认情况下,Gazebo 的环境变量(如路径设置等)可能没有在系统启动时加载,可以手动加载,也可类似4.1.3 便捷设置。
# 终端输入
source /usr/share/gazebo/setup.sh

4.3.2 Gazebo 与 ROS 环境的兼容性问题

  • Gazebo 与 ROS 有各自的环境配置,运行 ROS 的环境时可能会缺少 Gazebo 所需的一些特定配置,导致 Gazebo 启动失败。

4.3.3 多版本冲突

  • 如果系统中存在多个版本的 Gazebo 或相关依赖包,可能会导致 Gazebo 找不到正确的库文件或路径。
  • 手动执行 source /usr/share/gazebo/setup.sh 有助于指定正确的 Gazebo 配置。

5 键盘控制与自主避障

5.1 键盘远程控制TurtleBot3

要使用键盘远程控制TurtleBot3,在新终端窗口中启动teleoperation节点。

# 启动teleoperation节点
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

键盘远程控制方法如下图所示:

在这里插入图片描述

5.2 自主避障操作

一个简单的避障节点已准备好,可让机器人在遇到障碍时自动保持一定距离并转弯以避免碰撞。Ctrl + C结束teleop节点后,启动自主避障节点。

# 启动自主避障节点
roslaunch turtlebot3_gazebo turtlebot3_simulation.launch

5.3 使用RViz可视化数据

RViz可视化仿真运行时发布的主题数据。在新终端窗口中启动RViz。

# 启动RViz
roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch

TurtleBot3 RViz可视化数据如下图所示:

在这里插入图片描述


小结

  • 本文通过详细的操作步骤,在TurtleBot3仿真环境中配置和运行机器人,并通过远程控制、避障等功能实现基本的机器人行为。
  • 利用RViz进行传感器数据的可视化展示,以便实时监控仿真过程。掌握这些技能为实际机器人应用开发和算法验证提供有力支持。

欢迎大家评论留言!!!


友情提示:

  • 专栏:Turtlebot3 PC端ROS环境搭建与仿真
  • 下一节:Ubuntu 的 ROS 2 操作系统 turtlebot3 gazebo仿真

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2241995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp vuex的使用

实现组件全局(数据)管理的一种机制,可以方便的实现组件之间共享数据,不同于上述三种传递值的方式。 可以把vuex当成一个store仓库,可以集中管理共享的数据,并且存储在vuex中的数据都是响应式的&#xff0c…

uniapp适配暗黑模式配置plus.nativeUI.setUIStyle适配DarkMode配置

uniapp适配暗黑模式配置 目录 uniapp适配暗黑模式配置setUIStyleDarkMode 适配app-plus manifest.json配置theme.json配置pages.json配置页面切换代码实现同步手机暗黑配置额外适配 参考官方文档:https://uniapp.dcloud.net.cn/tutorial/darkmode.html 主要用到api…

element ui table进行相同数据合并单元格

示例如图 //要合并的项(自定义) const columnArr ["dq","sj","xj","zj","zjj","zjfzr","nhxm","nhsjh","nhsfzh","","",""…

uniapp 实现 ble蓝牙同时连接多台蓝牙设备,支持app、苹果(ios)和安卓手机,以及ios连接蓝牙后的一些坑

首先对 uniapp BLE蓝牙API进行封装 这里我封装了一个类:bluetoothService.js 代码: import { throttle } from lodash export default class Bluetooth {constructor() {this.device {};this.connected false;// 使用箭头函数绑定类实例的上下文&am…

51单片机应用开发(进阶)---模块化编程

实现目标 1、掌握.h 文件的格式、extern 的用法; 2、握模块化编程方法步骤; 3、具体实现:(1)提供一个C文件,将其按照功能模块进行模块化。 一、为什么要进行模块化编程? 传统的编程方式&…

arkUI:水果选择与管理:基于 ArkUI 的长按编辑功能实现

水果选择与管理:基于 ArkUI 的长按编辑功能实现 1 主要内容说明2 相关内容2.1 相关内容2.1.1 源码1内容的相关说明2.1.1.1 数据结构与状态管理2.1.1.2 添加水果功能2.1.1.3 水果列表展示2.1.1.4 长按进入编辑模式2.1.1.5 复选框的多选功能2.1.1.6 删除水果功能2.1.1…

小程序20-样式:自适应尺寸单位 rpx

手机设备的宽度逐渐多元化,也就需要开发者开发过程中,去适配不同屏幕宽度的手机,为了解决屏幕适配问题,微信小程序推出了 rpx 单位 rpx:小程序新增的自适应单位,可以根据不同设备的屏幕宽度进行自适应缩放 …

unity3d————Resources异步加载

知识点一:Resources异步加载是什么? 在Unity中,资源加载可以分为同步加载和异步加载两种方式。同步加载会在主线程中直接进行,如果加载的资源过大,可能会导致程序卡顿,因为从硬盘读取数据到内存并进行处理…

C#/WinForm拖拽文件上传

一、首先创建一个上传文件的类,继承Control类,如下: public class UploadControl : Control{private Image _image;public UploadControl(){this.SetStyle(ControlStyles.UserPaint | //控件自行绘制,而不使用操作系统的绘制Cont…

2024 同一个网段,反弹shell四种方法【linux版本】bash、python、nc、villian反弹shell图解步骤

实验环境准备(同一个网段下,我是桥接的虚拟机) 一、bash反弹shell 二、python反弹shell 三、nc反弹shell 四、villain反弹shell 实验环境准备(同一个网段下,我是桥接的虚拟机) 一台kali的linux(攻击者)…

FPGA使用Verilog实现CAN通信

FPGA实现CAN通信(Verilog) 1.作者使用的方法是通过FPGA芯片(如Xilinx公司的型号为XC7K325TFFG676-2)控制SJA1000T芯片(CAN控制器芯片)实现CAN通信,如下图所示: 2.熟悉连接方式之后&…

已解决:spark代码中sqlContext.createDataframe空指针异常

这段代码是使用local模式运行spark代码。但是在获取了spark.sqlContext之后,用sqlContext将rdd算子转换为Dataframe的时候报错空指针异常 Exception in thread "main" org.apache.spark.sql.AnalysisException: java.lang.RuntimeException: java.lang.Nu…

jenkins用户在执行scp的时候如何做免密登录

一、背景 在jenkins job中执行scp的shell命令,当然不希望每次输入密码,另外处于出于安全考虑,也不建议在scp命令中指定。 所以,我们需要对远程机器进行免密登录。 本文遇到的问题是,在jenkins机器上执行scp已做到了…

HarmonyOS ArkUI(基于ArkTS) 开发布局 (中)

HarmonyOS ArkUI(基于ArkTS) 开发布局 (上) 四 层叠布局 (Stack) 层叠布局(StackLayout)用于在屏幕上预留一块区域来显示组件中的元素,提供元素可以重叠的布局。层叠布局通过Stack容器组件实现位置的固定定位与层叠&…

无线网络信号 6G、5G和2.4G 的一些小科普

无线网络信号划分为6G、5G和2.4G这几类信号,它们各自有不同的用途和区别: 1、 2.4G无线技术 - 用途:2.4G无线技术广泛应用于智能家居、物联网、WLAN和蓝牙设备等。它是一个全球性的工作频段,适用于低速率的应用,如普通…

什么是GCP kunernetes的Node Taints and Tolerations

在Kubernetes中,Node taints和Pod tolerations是两个相关的功能,它们用于控制Pods的调度,以确保Pods不会调度到不适当的节点上。以下是这两个概念的详细解释: Node Taints(节点污点) 定义:Node…

ROS进阶:使用URDF和Xacro构建差速轮式机器人模型

前言 本篇文章介绍的是ROS高效进阶内容,使用URDF 语言(xml格式)做一个差速轮式机器人模型,并使用URDF的增强版xacro,对机器人模型文件进行二次优化。 差速轮式机器人:两轮差速底盘由两个动力轮位于底盘左…

【Playwright + Python】系列(十)利用 Playwright 完美处理 Dialogs 对话框

哈喽,大家好,我是六哥!今天我来给大家分享一下如何使用playwight处理Dialogs对话框,面向对象为功能测试及零基础小白,这里我尽量用大白话的方式举例讲解,力求所有人都能看懂,建议大家先收藏&…

控制器ThinkPHP6

五、控制器中对数组值的返回 在做接口服务时,很多时候回使用数组作为返回值,那么数组如何返回成 json呢? 在 tp6 中返回json 很简单,直接使用 json 进行返回即可,例如: public function index(){$resarra…

基于Java Springboot城市交通管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数…