02---控制移动底座7

我们到了吗?根据测量来到达目的距离

机器人的基处理器节点利用测程法和PID控制来把运行要求转化成现实世界的速度。这个过程的精确度和可靠性依赖于机器人内部的感应器、校准过程的精确度和周围环境的条件。

机器人通过对外部的测量获得自己的位置和方向,是可以对机器人的内部测量进行补充的。举例来说,机器人可以利用ROS的ar_pose包、ar_kinect包或ar_track_alvar包,根据诸如基准线等固定在墙上的可视标准,得到机器人在房间中相对精确的定位。一个相似的技术利用的是环境中的可视的标识来做定位,而不是人工标志物(ccny_rgbd_tools,rgbdslam)。还有一些包(laser_scan_matcher)使用激光扫描来定位。室外机器人通常使用GPS,而室内机器人可以使用其他主动定位技术,如Evolution Robotics的NorthStar系统。

本书中将会用“测量”这个词标识内部的位置数据。然而,不管测量数据从何而来,ROS都提供了一个消息类型来存储这些信息,即nav/msgs/Odometry。该消息的缩写版本定义如下:

Header header

string child_frame_id

geometry_msgs/PoseWithCovariance pose

geometry_msgs/TwistWithCovariance twist

可以看到它由一个头Hearder、一个标识符为child_frame_id的string以及两个分别名为PoseWithCovariance 和TwistWithCovariance的子消息组成。

运行以下命令,可以查看详细定义:

PoseWithCovariance子消息记录了机器人的位置和方向。而TwistWithCovariance子消息告诉了线速度和角速度。covariance矩阵为位置pose和速度twist补充了不同的测量的不确定性。

Header和child_frame_id定义了我们用来测量距离和角度的框架。它同时为每一个消息提供了一个时间戳,让我们知道在何时何地。ROS在测量中约定俗成地用/odom作为父框架的id,而用/base_link(或/base_footprint)作为子框架的id。框架/base_link代表的是现实中的机器人,而/odom则是由测量数据中平移与旋转定义的。这些变换是相对于/odom框架来移动机器人的。

如果我们在RViz上现实模拟机器人,并设置固定到/odom框架,机器人的位置表示的是机器人“觉得”它相对于开始位置的坐标。

 

posted on   gary_123  阅读(487)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示