0


Ubuntu20.04下Turtlebot3机器人仿真

前言

  首先,参考了以下链接,感谢这位博主详细的分享,如有需要请直接移步。
  传送门:Click
  关于Gazebo物理仿真平台与Rviz可视化工具,

urdf

xacro

这里不再多做介绍。本文主要讲解如何利用开源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.world

turtlebot3_world.world

两文件到turtlebot3_sim_test

world

文件夹;turtlebot3_gazebo/models/文件夹下

turtlebot3_house

turtlebot3_world

两个文件夹拷贝到turtlebot3_sim_testmodels文件夹下。
在这里插入图片描述
3、rviz和launch的配置文件后续再写
完成后turtlebot3_sim_test功能包目录如下:
在这里插入图片描述

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

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

<launch><argname="model"default="waffle_pi"/><!-- 在参数服务器载入xacro文件 --><paramname="robot_description"command="$(find xacro)/xacro $(find turtlebot3_sim_test)/urdf/turtlebot3_$(arg model).urdf.xacro"/><!-- 启动rviz --><nodename="rviz"pkg="rviz"type="rviz"/><!-- 启动机器人状态和关节状态发布节点 --><nodepkg="robot_state_publisher"type="robot_state_publisher"name="robot_state_publisher"/><nodepkg="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的代码修改如下:

<nodename="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_rosgazebo_model_path="${prefix}/models"/>

在这里插入图片描述
同时,在功能包的launch文件夹中加入启动gazebo的launch文件,命名为

turtlebot3_sim_gazebo.launch

,内容如下:

<launch><argname="model"default="waffle_pi"/><argname="x_pos"default="-2.0"/><argname="y_pos"default="-0.5"/><argname="z_pos"default="0.0"/><includefile="$(find gazebo_ros)/launch/empty_world.launch"><argname="world_name"value="$(find turtlebot3_sim_test)/worlds/turtlebot3_house.world"/><argname="paused"value="false"/><argname="use_sim_time"value="true"/><argname="gui"value="true"/><argname="headless"value="false"/><argname="debug"value="false"/></include><paramname="robot_description"command="$(find xacro)/xacro $(find turtlebot3_sim_test)/urdf/turtlebot3_$(arg model).urdf.xacro"/><nodepkg="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命令查看计算图,后续再将机器人模型移植到自定义地图环境中。

标签: github ubuntu

本文转载自: https://blog.csdn.net/qq_45980067/article/details/123585447
版权归原作者 小朱不秃 所有, 如有侵权,请联系我们删除。

“Ubuntu20.04下Turtlebot3机器人仿真”的评论:

还没有评论