TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

这篇具有很好参考价值的文章主要介绍了TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在TurtleBot3的机器人建模完成后,接下来就需要进行仿真。机器人建模之后,机器人的部件、关节的物理参数就确定了,但是还不能使用安装在其上的各种传感器来感知世界。所谓仿真就是要模仿真实环境中对象/机器人的行为,其主要目的,就是要让机器人通过摄像头、激光雷达、毫米波雷达、超声波雷达、惯性测量单元等传感器感知世界,从而对感知到的世界做出适当反应。

由此可知,仿真之前需要对机器人运行的外部环境建模,在turtlebot3开源代码中提供几个世界模型,其存放在以下目录中:

~/tb3_ws/src/turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/worlds

本文以文件名为turtlebot3_world.world的世界模型为例进行讲解,将其替换为不同世界模型文件,就变成了不同仿真:empty地图仿真、house地图仿真等等。

在ROS2中进行仿真的主要工具是gazebo,本文将利用gazebo就机器人的仿真环境搭建,仿真环境中的机器人的遥控,以及机器人在仿真环境的智控等诸多方面进行代码级深入剖析。

本文从以下三方面进行讲解:

一、仿真环境部署

二、机器人的遥控

三、机器人的智控

关于在ROS2 humble中TurtleBot3机器人建模,可参考下文:

(29条消息) TurtleBot3在ROS2 humble中的仿真解析之Fake Node_数据绿洲的博客-CSDN博客

一、仿真环境部署

1. 部署

部署命令:

ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

部署内容包括gazebo节点、robot_state_publish节点、机器人实体相关节点(差速轮、IMU、LiDAR、Camera、关节等)。

2. 代码解析

目录结构:

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

部署相关的文件有部署文件、仿真定义文件、世界模型文件等。

主部署脚本:

文件位置:

~/tb3_ws/src/turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/launch/turtlebot3_world.launch.py

部署脚本中包含:

- 通过gazebo_ros包部署gazebo节点

- 部署robot_state_publisher节点

- 通过gazebo_ros包spawn_entity服务部署新机器人实体节点

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

turtlebot3_gazebo包提供许多其他机器人部署脚本,其所在目录为:

~/tb3_ws/src/turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/launch

部署gazebo节点

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

部署robot_state_publisher节点

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

robot_state_publisher节点部署:

脚本文件:

~/tb3_ws/src/turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/launch/robot_state_publisher.launch.py

通过现有的robot_state_pubslisher包中的robot_state_pubslisher进行部署。

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

部署机器人实体节点:

机器人实体部署脚本文件:

~/tb3_ws/src/turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/launch/spawn_turtlebot3.launch.py

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

 TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

机器人实体节点部署是利用gazebo_ros包中spawn_entity服务来产生新的机器人实体节点,其主要利用仿真定义文件(sdf: simulation definition file)来定制机器人的部件、关节和插件。注意此文件中使用了如下四个gazebo提供的插件,这四个插件提供了标准化的fake node的所有功能 (参见(30条消息) TurtleBot3在ROS2 humble中的仿真解析之Fake Node_数据绿洲的博客-CSDN博客),还包括激光雷达模块、惯性测量单元模块、差速驱动轮和关节发布相关功能。

- 差速驱动轮插件:libgazebo_ros_diff_drive.so

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

- 关节状态发布插件:libgazebo_ros_joint_state_publish.so

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

- 惯性测量单元插件:libgazebo_ros_imu_sensor.so

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

- 激光雷达插件:libgazebo_ros_ray_sensor.so

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

3. 部署的结果

通过上述部署脚本的部署,由机器人模型、世界模型和传感器构成的仿真环境呈现如下:

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

相应的节点/话题图如下图(为了让话题的订阅者和发布者更加完整的呈现,在此先将作为/cmd_vel话题的发布者的teleop_keyboard加入其中):

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

二、机器人的遥控

由前面的讲解可知,对机器人发布的命令是通过写/cmd_vel话题来完成的,故对仿真机器人遥控,可以通过ROS2提供的turtlebot3_teleop包中的teleop_keyboard节点来进行(该节点就是发布命令到/cmd_vel话题)。

其命令如下:

ros2 run turtlebot3_teleop teleop_keyboard

当然,你也可以写一个自己的遥控节点,但是功能都一样,即通过向/cmd_vel话题写入速度命令,为机器人行走提供目标线速度和目标角速度。

teleop_keyboard节点能够手动操控机器人沿着命令指定的方向运动,操控界面如下图所示:

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

 操控机器人的结果直接反应到gazebo界面进行可视化,如下图:

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

三、机器人的智控

仿真机器人的智控就是设计一个遥控节点,不仅要提供机器人行走的目标线速度和目标角速度,而且要使机器人在运动过程中不要与环境中的物体发生碰撞。这就需要涉及到环境感知,检测机器人周边的障碍物,从而选择一个不发生碰撞的运动命令。相较于遥控操作是源于人通过感知机器人周边环境而利用键盘发布指令指挥、控制机器人运动不同,智控是机器人通过安装在其上的LiDAR传感器来感知环境,直接指挥、控制机器人。

turtlebot3开源代码中,实现机器人简单智控的节点是:turtlebot3_gazebo包中的turtlebot3_drive节点。

1. turtlebot3_drive节点启动命令

ros2 run turtlebot3_gazebo turtlebot3_drive

2. 代码解析

目录结构:

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

turtlebot3_drive节点是一个ROS2的C++客户端,从rcl库中继承而来,其实现包含一个头文件和.cpp实现文件。

头文件:

位置: ~/tb3_ws/src/turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/include/turtlebot3_gazebo/turtlebot3_drive.hpp

头文件定义如下:

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

其定义了一个Turtlebot3Drive类,该类从ROS2的C++客户库rclcpp::Node类继承而来。

.cpp实现文件:

位置:

~/tb3_ws/src/turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/src/turtlebot3_drive.cpp

==>构造函数

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

构造函数主要完成对象的初始化,包括LiDAR数据初始化,机器人位姿初始化,将要用到的所有话题发布器和订阅器对象的创建,以及用于话题发布的定时器的创建等。

订阅器的创建:

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

LiDAR传感器扫描周边环境、收集数据,并发布到话题/scan中,差速轮传感器发布测量信息到/odom话题。这两个传感器的实现由gazebo中的三方插件(libgazebo_ros_diff_drive.so,libgazebo_ros_joint_ray_sensor.so)提供,在机器人的仿真定义文件(model.sdf)中定义,参见“部署机器人实体节点:”小节。

发布器的创建:

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

更新定时器创建:

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

==>接收LiDAR数据的回调函数:

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

由此可见,机器人只检测其正前方和左右前方30度角的障碍物,具有一定局限性。

==>接收差速轮的测量数据回调函数:

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

机器人位姿信息也只保存了,偏航角yaw。

==>更新定时器超时回调函数:

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

该回调函数中实现了一个简单的状态机转移FSM程序,其中实现了4个状态:GET_TB3_DIRECTION,TB3_DRIVE_FORWARD,TB3_RIGHT_TURN,TB3_LEFT_TURN。其中GET_TB3_DIRECTION是基础规划状态,其他3个状态为执行状态。由此可知,每个机器人运动命令的发送需要两次定时器超时来完成的,共计20ms。

更新定时器超时2次,就会触发对机器人的操作命令发送,即向/cmd_vel话题写命令,写命令话题的代码如下:

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控

3. 结果展示

智控机器人的工作情况如下图所示,其能自动检测周边环境的障碍物,并作出规避碰撞的运动规划。

ros2-20221124智控机器人

该智控机器人部署后节点/话题图如下图所示,与遥控机器人不同的是话题/cmd_vel由turtlebot3_drive_node节点来发布,而不是teleop_keyboard节点。

TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控文章来源地址https://www.toymoban.com/news/detail-500695.html

到了这里,关于TurtleBot3在ROS2 humble中的仿真解析之仿真、遥控与智控的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Turtlebot4 和 Turtlebot3 和 Turtlebot2 ROS开源机器人说明及参数对比

    一、TB4和TB3产品参数对比: 二、Turtlebot 3和Turtlebot 4的比较: 很多未接触过Turtlebot ROS机器人系列的用户,看到TB3和TB4两型号,就会很自然地认为TB4肯定比TB3高级,会问到TB4和TB3的区别,TB4进行了哪些升级?其实接触过后,就会明白Turtlebot只是代表 ROS机器人系列 的统称,2/3

    2024年02月06日
    浏览(31)
  • 基于turtlebot3实现SLAM建图及自主导航仿真

    一、turtlebot3依赖安装 1、安装turtlebot3 sudo apt-get install ros-noetic-turtlebot3-* //安装gmapping建图算法依赖 apt-get install ros-noetic-gmapping //安装dwa局部路径规划算法 apt-get install ros-noetic-dwa-local-planner 2、安装键盘依赖 sudo apt-get install ros-noetic-gazebo-ros-pkgs ros-noetic-gazebo-ros-control turtlebot3键盘

    2024年02月04日
    浏览(31)
  • 机器人操作系统ROS(11)Turtlebot3自动避障及其地图构建和导航

    该节需要完成前面一节内容实现turtlebot3正常创建新地图,才可以实现本节的自动避障和导航 启动虚拟机器人有环境的仿真 键盘控制 打开新端口 3. 自动避障 打开新端口 4. 调用rviz 注意:可以通过修改size来变化激光扫描边缘的粗细 之前已经启动无需再起世界地图 启动好后可

    2024年02月02日
    浏览(30)
  • ROS2 Humble如何使用串口驱动?(Serial)

    目录 1. 串口库(Serial Library)简介: 2.  源码及主页 3.  国内git仓库(ROS2 humble已测试可用) 4. 可能出现的问题

    2024年02月16日
    浏览(28)
  • ros2官方文档(基于humble版本)学习笔记

    由于市面上专门讲ROS 2开发的书籍不多,近期看完了《ROS机器人开发实践》其中大部分内容还是基于ROS 1写的,涉及topic,service,action等一些重要的概念,常用组件,建模与仿真,应用(机器视觉,机器语音,SLAM,机械臂),最后一章写了ROS 2的安装,话题通信和服务通信的示

    2024年02月11日
    浏览(30)
  • 木叶飞舞之【机器人ROS2】篇章_第一节、ROS2 humble及cartorgrapher安装

    假如长期使用ros2,建议是ubuntu系统或者双系统下安装操作,不要在虚拟机中进行。 ubuntu系统能用最新的大系统就用最新的,比如22.04。等明年24.04出来可以用24.04 ros版本选择humble版本,比较稳定,各公司用的多一点。 2.1、一键安装 利用鱼香ROS的安装指令一键安装即可 (1)

    2024年02月10日
    浏览(34)
  • 【ROS2】带你避坑安装ROS2最新版本Humble Hawksbill(本人一个坑一个坑踩过来的)(unable to locate package ros-humble-desktop问题解决)

    写在前面 可以不看,但是 重要提示 十分建议看一下。如果心急的话可以直接跳到 安装步骤 。 可以从这个网站查看ROS2的各个发行版本的介绍信息。 本人使用的是Ubuntu20.04,原来安装了ros2 foxy,为了体验一下今年也即2022年5月份发布的Humble Hawksbill版本,于是先把ros2 foxy给卸载

    2023年04月13日
    浏览(40)
  • (Ubuntu22.04 Jammy)安装ROS2 Humble

    提示:以下内容是已经安装了ubuntu22.04 下进行安装ros2 请确保区域设置支持UTF-8,我们使用以下设置进行测试。 需要将ROS2 apt存储库添加到您的系统中,首先确保Ubuntu Universe存储库已启用。 接着添加带有apt的ROS 2 GPG密钥 然后将存储库添加到源列表中 设置存储库后,更新您的a

    2024年02月01日
    浏览(34)
  • 树莓派4B+Ubuntu22.04 Server安装ROS2 Humble

    通过本章学习,了解ROS2相关版本,能够熟练掌握ROS2安装相关操作,最终让 Talker-listener 实例跑起来。 参考网站: ROS2官网:https://www.ros.org/ ROS2 Humble版本:https://docs.ros.org/en/humble/Installation.html 注意:如果对ROS已经有一定的了解,可以忽略此章节。 更多更具体的ROS介绍请查看

    2024年02月11日
    浏览(30)
  • ROS2 humble版本安装gazebo提示:没有可安装候选或无法定位安装包

    错误提示如下所示: 或者: 解决方法: 如果大家使用这条指令依然无法解决问题,请大家注意发帖时间,是否与您当前使用的时间相隔过久,可能官方又更换安装指令了 方法来源:How to install Gazebo for Ubuntu 22.04 with ROS2 Humble - Gazebo: QA Forum

    2024年02月08日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包