前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ROS2机器人编程简述humble-第三章-PERCEPTION AND ACTUATION MODELS .1

ROS2机器人编程简述humble-第三章-PERCEPTION AND ACTUATION MODELS .1

作者头像
zhangrelay
发布2023-02-10 09:27:49
4480
发布2023-02-10 09:27:49
举报

书中,第三章主题:

First Behavior: Avoiding Obstacles with Finite States Machines

本节旨在应用到现在为止所展示的一切来创建看似“聪明”的行为。这个练习将介绍的许多东西结合起来,并展示使用ROS2编程机器人的效率。此外,将解决机器人编程中的一些问题。凹凸(避开障碍物)行为使用机器人的传感器来检测机器人前方的附近障碍物。机器人向前移动,当它检测到障碍物时,它返回并转动一段固定的时间,再次向前移动。虽然这是一种简单的行为,但建议使用一些决策方法,因为代码即使很简单,在解决可能出现的问题时也会开始变得无序。在这种情况下,将使用有限状态机(FSM)。FSM是一种数学计算模型,可以使用它来定义机器人的行为。它由状态和过渡组成。机器人一直在一个状态下产生输出,直到满足输出转换的条件,并转换到该转换的目标状态。当实现简单行为时,应用FSM可以显著降低解决问题的复杂性。暂时,试着思考如何使用循环、if、临时变量、计数器和计时器来解决凹凸(避开障碍物)问题。要理解并遵循其逻辑,这将是一个复杂的程序。一旦完成,添加一些额外的条件可能会放弃已经做的事情,重新开始。将基于FSM的解决方案应用于凹凸(避开障碍物)问题很简单。想想机器人必须产生的不同输出(停止、前进、后退和转弯)。这些操作中的每一个都有自己的状态。现在考虑状态(连接和条件)之间的转换,获得如图所示的FSM。

3.1 PERCEPTION AND ACTUATION MODELS

3.1感知和驱动模型

线性速度应为m/s,旋转速度rad/s,线性加速度m/s2。

x向前增长,y向左增长,z向上增长。(图示红Y为Z)。角度定义为围绕轴的旋转。

感知:单线LaserScan

代码语言:javascript
复制
$ ros2 interface show /sensor msgs/msg/LaserScan
# Single scan from a planar laser range-finder
##
If you have another ranging device with different behavior (e.g. a sonar
# array), please find or create a different message, since applications
# will make fairly laser-specific assumptions about this data
std msgs/Header header # timestamp in the header is the acquisition time of
# the first ray in the scan.
##
in frame frame id, angles are measured around
# the positive Z axis (counterclockwise, if Z is up)
# with zero angle being forward along the x axis
float32 angle min # start angle of the scan [rad]
float32 angle max # end angle of the scan [rad]
float32 angle increment # angular distance between measurements [rad]
float32 time increment # time between measurements [seconds] - if your scanner
# is moving, this will be used in interpolating pos
# of 3d points
float32 scan time # time between scans [seconds]
float32 range min # minimum range value [m]
float32 range max # maximum range value [m]
float32[] ranges # range data [m]
# (Note: values < range min or > range max should be
# discarded)
float32[] intensities # intensity data [device-specific units]. If your
# device does not provide intensities, please leave
# the array empty.

angle min: -1.9198600053787231

angle max: 1.9198600053787231

驱动:左右轮

代码语言:javascript
复制
$ ros2 interface show geometry msgs/msg/Twist
Vector3 linear
Vector3 angular
$ ros2 interface show geometry msgs/msg/Vector3
float64 x
float64 y
float64 z

所有机器人都使用这种信息格式来接收速度,允许通用远程操作程序(包括键盘、操纵杆、手机等)和ROS中的导航。再次谈到标准化。

geometry msgs/msg/Twist消息比本章机器人支持的更通用。不能让它在Z方向移动(它不能飞),也不能只用两个轮子就横向移动。这是一个差动机器人。如果有一架四旋翼机,可能会做更多的平移和旋转。但本章只能让它向前或向后、旋转或两者结合。出于这个原因,只能使用linear.xangular.z字段。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档