前言

  首先,参考了以下链接,感谢这位博主详细的分享,如有需要请直接移步。
  传送门:Click
  关于Gazebo物理仿真平台与Rviz可视化工具,urdfxacro这里不再多做介绍。本文主要讲解如何利用开源Turtlebot3机器人模型和Gmapping算法,基于自己在Gazebo上building editor上构建的地图进行仿真实验。 后续考虑利用在此基础上进一步提升。

1、实验环境

  Ros-Noetic
  Gazebo 11

2、Turtlebot3功能包准备

  urtlebot3功能包中继承了了TurtleBot3的机器人文件、SLAM和导航功能包、遥控功能包和bringup功能包等,另一个功能包turtlebot3_simulations中包含了更丰富的仿真文件(如一些rviz和gazebo的launch文件)。后面将从这两个包中复制出我们需要的文件来集成,并进行仿真。

turtlebot3包下载地址:https://github.com/ROBOTIS-GIT/turtlebot3

turtlebot3_simulations包下载地址:https://github.com/ROBOTIS-GIT/turtlebot3_simulations

turtlebot3 wiki简介:http://wiki.ros.org/turtlebot3
主要是两种型号:Burger 和 Waffle Pi

下面是关于他们的主要规格列表(略),主要参考其传感器:

可以看到Waffle Pi传感器主要包括机械激光传感器(采样频率5hz以上)、树莓派摄像头模组 v2.1和三轴陀螺仪和三轴加速度计的IMU。

3、创建workspace和功能包

相关命令如下:

mkdir -p catkin_turtlebot3/src
cd ~/catkin_turtlebot3/src
catkin_init_workspace
catkin_create_pkg turtlebot3_sim_test urdf xacro gazebo_ros ##添加urdf xacro gazebo_ros依赖

在turtlebot3_sim_test功能包下创建urdf(存储urdf模型文件)、meshes(存储模型渲染文件)、worlds(存储gazebo仿真环境文件)、models(用来存储gazebo仿真环境配置文件)、rviz(用来存储rviz环境下机器人配置文件)、launch(用来存储启动文件)文件夹。

将上面github项目中clone下来的文件:
1、turtlebot3项目中turtlebot3_description/urdf目录turtlebot3_waffle_pi.urdf.xacro文件拷贝到turtlebot3_sim_test功能包下urdf文件夹中;turtlebot3_description/meshes文件夹下所有文件拷贝到turtlebot3_sim_test功能包下meshes文件夹中。

2、turtlebot3_simulations 项目中turtlebot3_gazebo/worlds目录下turtlebot3_house.worldturtlebot3_world.world两文件到turtlebot3_sim_testworld文件夹;turtlebot3_gazebo/models/文件夹下turtlebot3_houseturtlebot3_world两个文件夹拷贝到turtlebot3_sim_testmodels文件夹下。

3、rviz和launch的配置文件后续再写
完成后turtlebot3_sim_test功能包目录如下:

4、在Rviz可视化工具下加载出机器人模型

  在turtlebot3_sim_test/launch文件夹下添加turtlebot3_sim_rviz.launch文件。

<launch><arg name="model" default="waffle_pi" /><!-- 在参数服务器载入xacro文件 --><param name="robot_description" command="$(find xacro)/xacro $(find turtlebot3_sim_test)/urdf/turtlebot3_$(arg model).urdf.xacro" /><!-- 启动rviz --><node name="rviz" pkg="rviz" type="rviz" /><!-- 启动机器人状态和关节状态发布节点 --><node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" /><node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" /></launch>

注意载入xacro文件路径写法,这里加载了turtlebot3_waffle_pi.urdf.xacro文件。

保存之后我们可以编译功能包。如果你的工作空间还有其他功能包,我们选择单独编译,相关代码如下:

cd ~/catkin_turtlebot3
catkin_make -DCATKIN_WHITELIST_PACKAGES="turtlebot3_sim_test"
source devel/setup.bash    ##每新开终端都需要source,可以考虑把这个写入.bashrc中

之后,运行rviz的launch文件可以加载出机器人的模型

$ roslaunch turtlebot3_sim_test turtlebot3_sim_rviz.launch

初始加载没有调整好接收数据,Rviz没有数据

右上角map改成base_link,同时,右下角Add中添加RobotModel,机器人就可以正常显示出来了。加上TF可以显示机器人上存在的不同坐标系(包括不同传感器、左右轮等)。

因为每次运行该机器人模型的launch文件时,Rviz会自动处于一种初始化状态,这时我们可以将配置信息保存,这样下次运行launch就不需要再重新配置。配置信息主要保存在turtlebot3_sim_test功能包下rviz文件夹中。点击右上角file->save config as,然后取一个文件名称,这里命名为turtlebot3_pi。

这个时候还没有结束,因为要修改launch文件中自动加载该配置文件,所以需要修改功能包下launch文件夹中turtlebot3_sim_rviz.lanch

将启动rviz的代码修改如下:

<node name="rviz" pkg="rviz" type="rviz" args="-d $(find turtlebot3_sim_test)/rviz/turtlebot3_pi.rviz" />
## 注意这里的turtlebot3_pi.rviz以自己命名为准

5、在Gazebo中加载出机器人模型(非自定义仿真环境)

首先,我们需要修改turtlebot3_sim_test下的package.xml文件。因为原项目文件turtlebot3_house.world默认加载地址为gazebo下的地址(/usr/share/gazebo-11/models),而不是我们功能包下models文件夹中的地址。因此可以在package.xml中加入如下代码:

<gazebo_ros gazebo_model_path="${prefix}/models"/>


同时,在功能包的launch文件夹中加入启动gazebo的launch文件,命名为turtlebot3_sim_gazebo.launch,内容如下:

<launch><arg name="model" default="waffle_pi"/><arg name="x_pos" default="-2.0"/><arg name="y_pos" default="-0.5"/><arg name="z_pos" default="0.0"/><include file="$(find gazebo_ros)/launch/empty_world.launch"><arg name="world_name" value="$(find turtlebot3_sim_test)/worlds/turtlebot3_house.world"/><arg name="paused" value="false"/><arg name="use_sim_time" value="true"/><arg name="gui" value="true"/><arg name="headless" value="false"/><arg name="debug" value="false"/></include><param name="robot_description" command="$(find xacro)/xacro $(find turtlebot3_sim_test)/urdf/turtlebot3_$(arg model).urdf.xacro" /><node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf"  args="-urdf -model turtlebot3_$(arg model) -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos) -param robot_description" />
</launch>

这时,我们可以启动launch文件了,但第一次加载时间较长,注意耐心等待。第二次启动后加载速度很快。终端命令:

$ roslaunch turtlebot3_sim_test turtlebot3_sim_gazebo.launch


新开终端,利用rostopic list查看话题节点如下,通常我们比较关注的包含cmd_vel、tf 和一些传感器信息话题节点

利用rostopic info /cmd_vel查看该话题节点,可以看到gazebo订阅了这一话题节点,这样我们可以终端发布控制信息控制机器人的运动

6、键盘对机器人的控制

ros提供通用键盘控制包来操控机器人的运动。我们先安装相关命令:

sudo apt-get install ros-noetic-teleop-twist-keyboard

完成后可以通过键盘控制机器人运动,终端命令如下(已开gazebo仿真环境)

$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py

7、利用gazebo、rviz工具及开源Gmapping进行定位和建图

先启动gazebo仿真环境

$ roslaunch turtlebot3_sim_test turtlebot3_sim_gazebo.launch

启动Rviz可视化工具

$ roslaunch turtlebot3_sim_test turtlebot3_sim_rviz.launch

rviz启动以后,我们调整好相关配置。


其中map的topic暂时为空,因为我们还没有运行Gmapping节点,并没有发布地图节点信息。因此,我们需要新开终端运行开源Gmapping节点。在此之前先安装turtlebot3相关的slam算法包ros包,命令如下:

$ sudo apt-get install ros-noetic-turtlebot3-slam

完成之后,运行gamapping算法

roslaunch turtlebot3_slam turtlebot3_gmapping.launch

此时,我们在rviz中调整map接受/map的话题,可以看到gmapping算法已经正常运行


新开终端实现键盘控制机器人,完成初步建图工作。

$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py

经过一番操作之后,建出地图如图所示……效果有点一言难尽。

关于节点间流转关系,可以用rqt_grap命令查看计算图,后续再将机器人模型移植到自定义地图环境中。

Ubuntu20.04下Turtlebot3机器人仿真相关推荐

  1. Ubuntu20.04下 PC机对Locobot机器人的ROS远程通讯

    写在最前面:   最近参加了机器人导航的项目,前前后后配了好几次的ROS远程通讯,在这里把步骤.遇到的问题.教程什么的都汇总一下.   先明确我们要做的事情--实现在我们自己的PC机(之后简称Moni ...

  2. 13.在Ubuntu20.04下,chromium无法输入中文以及如何卸载chromium浏览器

    因为chromium安装比较简单,所以在Ubuntu20.04下直接安装了chromium,但是最近发现,无法在chromium中输入中文了,经过一顿折腾,最终也没搞定,解决办法就是安装Chrome ...

  3. U盘在Ubuntu20.04下只能读取文件不能向U盘复制文件

    背景 U盘在Ubuntu20.04下只能读取文件不能向该U盘复制文件,该U盘在其余电脑上一点问题不存在. Ubuntu系统插入其余U盘也能正确读取,只对该U盘无法处理. 处理过程 在CSDN中找了许多 ...

  4. ubuntu20.04下安装qq和微信(最新)

    ubuntu20.04下安装qq和微信(最新) 在ubuntu(debian系列)下安装软件,一般可以通过这两种简单的方式: sudo apt install 软件包 或者 sudo dpkg -ℹ ...

  5. 关于Ubuntu20.04下向日葵远程软件连接中断的解决方法

    关于Ubuntu20.04下向日葵远程软件连接中断的解决方法 一.安装并登陆好Ubuntu的向日葵客户端后 二.切换lightdm图形页面 一.安装并登陆好Ubuntu的向日葵客户端后 在终端下运行以 ...

  6. 【学习mysql】ubuntu20.04下彻底删除mysql8.0

    ubuntu20.04下安装mysql8.0配置出错次数到吐血,却熟练了删除mysql的基本操作.记录一下 1.保证mysql进程停止 sudo service mysql stop 2.查看mysq ...

  7. Ubuntu20.04下安装 R 及 CRAN 软件包(命令行操作)

    文章目录 前言 一.R 的安装 1. 确定软件包版本 2. 安装CRAN中的R二进制文件 3. 安装 R 及其依赖项 4. 检查安装情况 二.添加CRAN软件包 1. 添加当前的 R4.1.0 或更高 ...

  8. LeGO-LOAM:Ubuntu20.04下的编译与运行

    LeGO-LOAM在Ubuntu20.04下的编译与运行 一.源码及数据集下载 二.安装gtsam 三.建立ROS工作空间 四.LeGO-LOAM的编译 五.LeGO-LOAM的运行 六.可能会遇到的 ...

  9. Ubuntu20.04下的编译与运行LeGO-LOAM【问题解决】

    LeGO-LOAM在Ubuntu20.04下编译和运行的问题 一.OpenCV 版本问题 二.pcl问题 1. C++14环境 2. 报错:'Index' is not a member of 'Ei ...

最新文章

  1. 蚌埠计算机对口招学生谈谈,蚌埠市865人报名对口高考
  2. vue 自定义select下拉框样式(div模拟)
  3. 83. Leetcode 148. 排序链表 (排序)
  4. linux安装phoenix 5.1.0(对应hbase 2.2.6)
  5. php程序员可能不了解的编程细节
  6. 荣耀v20、荣耀20Pro、mate20、Nova5Pro选哪个?
  7. LeetCode 169 Majority Element 解题报告
  8. 单片机c语言编程定时,单片机C语言编程定时器的几种表达方式
  9. 数据结构之数组和列表
  10. R语言使用ggplot2包使用geom_density()函数绘制分组密度图(填充色配置、半透明填充色、添加均值线)实战(density plot)
  11. 常见的用户密码加密方式以及破解方法
  12. b B kb kB kbps KBps 换算
  13. 基于华为java编程规范的checkstyle.xml以及格式化模版,注释模版
  14. springBoot学习笔记(6)——@Valid和@Validated的使用
  15. 毛玻璃效果 php,CSS3打造磨砂玻璃背景效果
  16. 分享我见到的培训面试和就业的情况(同时给出建议)
  17. TCP/IP网络编程之多进程服务端(二)
  18. 湖南省工业职业技术学院 计算机,湖南工业职业技术学院
  19. revit模型怎么在手机上看_模型的查看和定位-Revit基础教程
  20. 微信小程序 用户中心界面(一)

热门文章

  1. 可爱粉红色情人节表白浪漫婚礼相册我们结婚啦PPT模板
  2. C++模板学习02(类模板)(类模板语法、类模板与函数模板的区别、类模板中的成员函数创建时机、类模板对象做函数参数、类模板与继承、类模板成员函数类外实现、类模板分文件编写、类模板与友元)
  3. 如何从Arxiv预出版网站导出论文到NoteExpress
  4. linux系统grep用法,linux中grep的用法
  5. pdf转换为ppt最佳转换方法
  6. PCB生产工艺流程二:图形电镀工艺流程说明
  7. linux sort 排序 1 99,Linux操作系统中排序命令Sort的使用方法
  8. 【毕业设计】自动泊车系统(APS)记录
  9. linux没有哪个文件类型,Linux系统中不存在以下哪个基本文件类型( )
  10. 最新用友U8V15.0全产品培训视频教程合集