草庐IT

Ubuntu20.04下Turtlebot3机器人仿真

小朱不秃 2023-08-15 原文

前言

  首先,参考了以下链接,感谢这位博主详细的分享,如有需要请直接移步。
  传送门: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. ruby - 如何在 Ubuntu 中清除 Ruby Phusion Passenger 的缓存? - 2

    我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:

  2. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  3. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  4. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  5. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  6. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

  7. ruby - ri 有空文件 – Ubuntu 11.10, Ruby 1.9 - 2

    我正在运行Ubuntu11.10并像这样安装Ruby1.9:$sudoapt-getinstallruby1.9rubygems一切都运行良好,但ri似乎有空文档。ri告诉我文档是空的,我必须安装它们。我执行此操作是因为我读到它会有所帮助:$rdoc--all--ri现在,当我尝试打开任何文档时:$riArrayNothingknownaboutArray我搜索的其他所有内容都是一样的。 最佳答案 这个呢?apt-getinstallri1.8编辑或者试试这个:(非rvm)geminstallrdocrdoc-datardoc-da

  8. ruby - 在 Ubuntu 14.04 中使用 Curl 安装 RVM 时出错 - 2

    我试图在Ubuntu14.04中使用Curl安装RVM。我运行了以下命令:\curl-sSLhttps://get.rvm.io|bash-sstable出现如下错误:curl:(7)Failedtoconnecttoget.rvm.ioport80:Networkisunreachable非常感谢解决此问题的任何帮助。谢谢 最佳答案 在执行curl之前尝试这个:echoipv4>>~/.curlrc 关于ruby-在Ubuntu14.04中使用Curl安装RVM时出错,我们在Stack

  9. ruby - rails 3.2.2(或 3.2.1)+ Postgresql 9.1.3 + Ubuntu 11.10 连接错误 - 2

    我正在使用PostgreSQL9.1.3(x86_64-pc-linux-gnu上的PostgreSQL9.1.3,由gcc-4.6.real(Ubuntu/Linaro4.6.1-9ubuntu3)4.6.1,64位编译)和在ubuntu11.10上运行3.2.2或3.2.1。现在,我可以使用以下命令连接PostgreSQLsupostgres输入密码我可以看到postgres=#我将以下详细信息放在我的config/database.yml中并执行“railsdb”,它工作正常。开发:adapter:postgresqlencoding:utf8reconnect:falsedat

  10. ruby-on-rails - Ubuntu 14.04 Rails 丢失文件 - 2

    安装Rails时,一切都很好,但后来,我写道:rails-v和输出:/home/toshiba/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in`require':cannotloadsuchfile--rails/cli(LoadError)from/home/toshiba/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in`r

随机推荐