如何给定两个gps坐标 算出航向角_机器人开发如何配置ROS中的TF变换关系?

97905026bc432670abefa92d0de051de.png

当我们进行机器人开发时,常常需要面对TF坐标转换,本文以 Autolabor Pro1 与思岚激光雷达为例,介绍ROS TF的使用。


Autolabor Pro1是什么?

Autolabor Pro1是一款室内外通用机器人移动底盘。

e37dd60143de0358e0fdf09b6d76ad37.png

该平台上可集成激光雷达、摄像头、GPS等传感器,云台、机械臂、抓持器等附件设备,基于平台可实现SLAM、自主路径规划导航、障碍物避障等功能,适用于巡检、抓取、智能驾驶、协同控制、计算机视觉、深度学习等技术的研究与应用。提供底层驱动和基于ROS平台的API接口,精准的PID控制与运动模型,方便硬件集成和二次开发。

详细了解 | Autolabor Pro1


TF是什么?

tf介绍​wiki.ros.org
tf is a package that lets the user keep track of multiple coordinate frames over time. tf maintains the relationship between coordinate frames in a tree structure buffered in time, and lets the user transform points, vectors, etc between any two coordinate frames at any desired point in time.

简单来说是将坐标系与坐标系连接起来,使用tf树定义不同坐标系之间的平移与旋转变换关系,并且持续追踪多个坐标系内的变化情况。

为什么需要坐标变换?

在ROS中定义了许多坐标系,有机器人坐标系(base_link),有雷达坐标系(base_laser),地图坐标系(map),里程计坐标系(odom)等。

以机器人中心为原点的坐标系,称为base_link坐标系,以激光雷达中心为原点的坐标系,称为base_laser坐标系。

以下图机器人与激光雷达为例

0959d18227ff5e280043960cef66fadc.png
假设在机器人运行过程中,激光雷达可以采集到距离前方障碍物的数据,这些数据当然是以激光雷达为原点的测量值,换句话说,也就是base_laser参考系下的测量值。
现在,如果我们想使用这些数据帮助机器人完成避障功能,当然,由于激光雷达在机器人之上,直接使用这些数据不会产生太大的问题,但是激光雷达并不在机器人的中心之上,在极度要求较高的系统中,会始终存在一个雷达与机器人中心的偏差值。
这个时候,如果我们采用一种坐标变换,将激光数据从base_laser参考系变换到base_link参考下,问题不就解决了么。这里我们就需要定义这两个坐标系之间的变换关系。

下面以思岚激光雷达为例,讲解Autolabor Pro1与激光雷达的tf坐标变换。


补充知识:ROS坐标系

在ROS中,坐标轴规定可以参考 ROS-REP 103 ,坐标系可以参考 ROS-REP 105,常规用来表示三维位置关系时,使用的是右手坐标系,对于一个三维空间里面的旋转,可以分解成绕着坐标轴的旋转,旋转的方向使用右手法则定义。

6e7d985a5e8061b52530939954d509cd.png
右手坐标系定义
把右手放在原点的位置,使大姆指,食指和中指互成直角,把 大姆指 指向 Z轴 的正方向,食指指向X轴的正方向时向时,中指所指的方向就是 Y轴 的正方向

通常相对于我们的身体而言

  • X -> 朝前
  • Y -> 朝左
  • Z -> 朝上

75609448fe6f93b46cfddb7b50ec2268.png
绕坐标轴旋转定义 用右手握住坐标轴,大拇指 的方向朝着坐标轴朝向的正方向四指环绕的方向定义沿着这个坐标轴旋转的正方向

一般来说

  • Z轴 旋转,称之为 航向角,使用yaw表示;
  • X轴 旋转,称之为 横滚角,使用roll表示;
  • Y轴 旋转,称之为 俯仰角,使用pitch表示;

我们通常用来表述小车运动的二维平面指的是 X-Y平面,也就是X轴和Y轴张成的平面,在这个平面中,用来描述 小车转弯的角就是绕Z轴的旋转,也就是经常说的航向角。Z轴朝上,所以按照右手法则可以知道小车向 左转为正,右转为负。

详细了解 | ROS坐标转换讲解 | Autolabor Simulation


Autolabor Pro1 base_link坐标系

以机器人四轮接触面为X-Y平面,四轮轴心连线的点做垂线,与x-y平面的交点为base_link坐标系原点,车头朝向方向为X轴,正左方向为Y轴,向上为Z轴。

81894460e611047ab354b5f6f7446321.png

以思岚激光雷达为例,我们一般在安装时都习惯将雷达不带线的一端朝车头方向,雷达USB端的朝车尾方向(如下图)。

e2b33f282d42ffed5f8dbe1c16134d8b.png

思岚激光雷达base_laser坐标系

雷达正中心为坐标原点,USB端的方向为X轴正方向,正左方向为Y轴,向上为Z轴。

10557a5b1131fb7d25f37ce02137ff2d.png

测量雷达中心相对机器人坐标原点(0,0,0)的距离,得到雷达在机器人坐标系中(x:0.1,y:0.0,z:0.2)(ROS中长度单位为米/m)。

前面我们提到,思岚雷达的X轴正方向与机器人的X轴正方向为相反方向,雷达坐标系需要绕Z轴顺时针旋转180度才能与机器人base_link坐标系重合 ,旋转(yaw:3.14,roll:0,pitch:0)(ROS中角度单位为弧度/rad)。

根据这些数据,当我们获取激光数据后,采用(x: 0.1m, y: 0.0m, z: 0.2m, yaw:3.14, roll:0, pitch:0)的坐标变换,就可以将数据从base_laser参考系变换到base_link参考系,这就定义出了两个参考系之间的变换关系。

从上边的示例看来,参考系之间的坐标变换好像并不复杂,但是在复杂的系统中,存在的参 考系可能远远大于两个,如果我们都使用这种手动的方式进行变换,估计很快你就会被繁杂的坐标关系搞蒙了。
ROS提供的tf变换就是为解决这个问题而生的,tf功能包提供了存储、计算不同数据在不同参考系之间变换的功能,我们只需要告诉tf树这些参考系之间的变换公式即可,这颗tf树就可以通过树的数据结构,管理我们所需要的参考系变换。
为了定义和存储base_link和base_laser两个参考系之间的关系,我们需要将他们添加到tf树中。从树的概念上来讲,tf树中的每个节点都对应一个参考系,而节点之间的边对应于参考系之间的变换关系。tf就是使用这样的树结构,保证每两个参考系之间只有一种遍历方式,而且所有变换关系,都是母节点到子节点的变换。
为了定义参考系,我们需要定义两个节点,一个对应于base_link参考系,一个对应于base_laser参考系。为了创建两个节点之间的边,我们首先需要决定哪一个节点作为母节点,哪一个节点作为子节点,这一点在tf树中是非常重要的。这里我们选择base_link作为母节点,这样会方便后边为机器人添加更多的传感器作为子节点。

详细了解 | TF坐标变换的学习

所以,从base_link节点到base_laser节点的变换关系为(x: 0.1m, y: 0.0m, z: 0.2m, yaw:3.14, roll:0, pitch:0),设置完毕后,我们就可以通过调用tf库,完成base_laser参考系到base_link参考系的数据坐标变换了。

如何发布tf变换关系

static_transform_publisher介绍​wiki.ros.org
static_transform_publisher is designed both as a command-line tool for manual use, as well as for use within roslaunch files for setting static transforms.

我们最常使用的是tf包中的static_transform_publisher,它即可在命令行直接运行,也可写在launch文件中配置坐标转换关系。

Publish a static coordinate transform to tf using an x/y/z offset in meters and yaw/pitch/roll in radians. (yaw is rotation about Z, pitch is rotation about Y, and roll is rotation about X). The period, in milliseconds, specifies how often to send a transform. 100ms (10hz) is a good value.

使用示例:

<node pkg="tf" type="static_transform_publisher" name="base_link_to_laser" args="0.065 0.0 0.245 1.57 0.0 0.0 /base_link /lidar 50" />

这是我们最常看到的使用方法,写在launch文件中。

pkg:包名,tf

type:类型,static_transform_publisher

name:名称,自定,便于理解

arg:tf参数, x y z yaw pitch roll frame_id child_frame_id period_in_ms.

1.x y z 分别代表着相应轴的平移,单位是 米。

2.yaw pitch roll 分别代表着绕z y x 三个轴的转动,单位是 弧度。

3.frame_id 为坐标系变换中的父坐标系, child_frame_id为坐标系变换中的子坐标系。

4.period_in_ms 为发布频率,单位为 毫秒。通常取100。一毫秒为一秒的千分之一,100毫秒即为0.1秒,也就是10Hz。

按照前文的数据,args处参数修改为

0.1 0.0 0.2 3.14 0.0 0.0 /base_link /lidar 50

说明:传感器的frame_id的名称根据厂商或有不同,一般在驱动启动launch可查看,思岚激光雷达的frame_id为/lidar。

详细了解 | tf之static_transform_publisher


关注Autolabor公众号,第一时间获取最新文章。

3316f4c6a755cfc763d3a15c61e3e6a5.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409910.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat架构与原理

Tomcat架构与原理 架构图 原理 ①、用户点击网页内容&#xff0c;请求被发送到本机端口8080&#xff0c;被在那里监听的Coyote HTTP/1.1 Connector获得。 ②、Connector把该请求交给它所在的Service的Engine来处理&#xff0c;并等待Engine的回应。 ③、Engine获得请求localhos…

[html] 微软雅黑是有版权的,在页面中使用font-family:Microsoft YaHei会不会有版权问题呢?

[html] 微软雅黑是有版权的&#xff0c;在页面中使用font-family:Microsoft YaHei会不会有版权问题呢&#xff1f; font-family: Microsoft YaHei的写法&#xff0c;个人、商用都不会有版权问题&#xff0c;可以放心使用&#xff01;但是如果是通过font-face引用微软雅黑的话&…

aodv路由协议分析

1 AODV 报文格式 AODV 有三种基本的协议报文类型&#xff1a;RREQ 报文、RREP 报文和RRER 报文。 1.1 RREQ 报文 a. 对RREQ 的处理 接收到RREQ 的结点做如下处理&#xff1a; &#xff08;1&#xff09;创建一个表项&#xff0c;先不分配有效序列号&#xff0c;用于记录反向路径…

rfid射频前端的主要组成部分有_第4章 RFID的射频前端(simple).ppt

(1)阅读器天线电路 * Microchip 公司的13.56 MHz应答器(无源射频卡)MCRF355和MCRF360芯片的天线电路 无源应答器的天线电路多采用并联谐振回路 * 并联谐振回路 在研究并联谐振回路时&#xff0c;采用恒流源(信号源内阻很大)分析比较方便。 并联谐振 谐振条件 - 实际中线圈的电…

c语言转换为python语言_python和c语言

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; c语言是编译型语言&#xff0c;经过编译后&#xff0c;生成机器码&#xff0c;然后再运行&#xff0c;执行速…

Tomcat安装与使用

Tomcat安装与使用 Tomcat是JAVA语言编写的&#xff0c;需要jdk环境。jdk从Oracle官网下载&#xff0c;不过要求登录后才能下载。 Tomcat的主配置文件&#xff1a;安装路径下的 conf/server.xml。 Tomcat默认监听8080端口。 下载&安装jdk #卸载或升级自带的java环境。 #查找…

COJ1196(Staginner 去爬山)

题目大意&#xff1a;给定一个n*m的只含0和1的矩阵&#xff0c;从矩阵的最后一行中的某个1出发&#xff0c;每步只能走到相邻的且是1的格子中&#xff0c;求能达到的最大高度&#xff08;最小行数&#xff09;。 这题直接DFS即可&#xff0c;复杂度为O(N*M)。 View Code 1 #in…

[html] 对一个元素设置浮动后,它的特征是什么?

[html] 对一个元素设置浮动后&#xff0c;它的特征是什么&#xff1f; 浮动元素脱离正常的文档流浮动元素后的内联元素&#xff0c;将围绕在浮动元素周围浮动元素会造成父元素的高度坍塌个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但…

python网格划分_在python中创建一个2d网格

我真的很喜欢编程……但这是我的问题&#xff1a;我不能发布图像,但我想要的图是一个“冠”(两个半径为a的同心圆)我的意思是,在数学上讲这很容易定义,但我怎么能用python程序呢&#xff1f;我想到了这样的事情&#xff1a;def Fm1(X, Y):r r sqrt(1.*X**21.*Y**2)cos 1.*X/r…

python 三维地球_用python生成地球运动的动态模拟动态图

python作为一门简单易学且应用范围极广的语言有着其他语言无法比拟的优势&#xff0c;通过python可以实现各种各样的功能&#xff0c;例如我们可以利用python matplotlib的绘图库实现各种动态模拟仿真&#xff0c;在科学实验中有着极大的应用价值。下列是通过python实现地球公转…

xmlhttprequest level 2

http://caniuse.com/xhr2转载于:https://www.cnblogs.com/fullhouse/archive/2012/04/24/2468892.html

tomcat常用功能

修改端口号 1024-655365 之间取端口号 Tomcat有3个重要端口&#xff1a; 默认访问端口&#xff1a;8080 默认监听关闭tomcat的端口&#xff1a;8005 默认AJP访问端口&#xff1a;8009 vim tomcat/conf/server.xml<Server port"8005" shutdown"SHUTDOWN&quo…

[html] 可以给内联元素设置宽和高吗?为什么?

[html] 可以给内联元素设置宽和高吗&#xff1f;为什么&#xff1f; 1.正常情况下不能设置宽高(可替换内容元素除外例如img)2.元素被浮动&#xff0c;绝对定位&#xff0c;固定定位后&#xff0c;可以设置宽高3.display:block,display:inline-block等后可以设置宽高4.内联元素的…

cve20190708补丁的kb名称_微软KB4495667补丁(CVE 2019-0708补丁)V1.1 官方版

微软KB4495667补丁(CVE 2019-0708补丁)是一款很优秀好用的微软升级补丁工具。这款微软KB4495667补丁是针对2019年新发现的Windows系统漏洞CVE-2019-0708的Windows修补程序。此漏洞很可能被新的勒索软件利用&#xff0c;但您只需下载此修补程序即可安装它。欢迎有需要的朋友来下…

enterFrame是什么意思?

影片剪辑脚本和按钮的脚本类似&#xff0c;它们都使用事件处理函数&#xff0c;与按钮的on关键字不同&#xff0c;影片剪辑使用 onClipEvent关键字。当某种影片剪辑事件发生时&#xff0c;就会触发相应的事件处理函数。影片剪辑最重要的两种事件是load和enterFrame&#xff0c;…

python网站模板下载_Python画图模板大全:从此画图不用愁

1、matplotlib具体参数介绍&#xff1a; 在介绍Python画图模板之前&#xff0c;先买个和大家卖个官司&#xff0c;首先介绍一下Python画图常用库matplotlib的参数&#xff0c;如果只介绍模板&#xff0c;如果你想改一些参数&#xff0c;首先要知道各个参数的含义&#xff0c;那…

tomcat多域名访问

多域名访问 配置虚拟主机&#xff0c;提高资源利用率。 tomcat的server.xml文件也可以配置多个虚拟主机&#xff0c;基于端口可以通过增加service节点实现&#xff0c;基于域名则可以同过增加host节点实现 基于域名的虚拟机 #编辑server.xml文件&#xff0c;在Engine段下添加Ho…

[html] 如何解决input在Firefox和Chrome中高度不一致的问题?

[html] 如何解决input在Firefox和Chrome中高度不一致的问题&#xff1f; 原因是firefox的input的border-width padding 受win10系统的文本大小设置影响设置一样的样式input{box-sizing:border-box;height:20px;}将win10 系统的文本大小设置为100%个人简介 我是歌谣&#xff0c…

工业机器人工具中心点标定的意义_如何理解工业机器人的工具中心点

工业现场的机器人实际上是有多个轴的机械手臂。要想让机器人完成指定的生产任务&#xff0c;通常需要在机器人的末端固定一个工具&#xff0c;比如焊接机器人的焊枪、涂胶机器人的胶枪、搬运机器人的夹具等。由于各工具的大小、形状各不相同&#xff0c;这样就产生一个问题&…

学习:重写hashCode()方法的必要性

当一个类有可能会和其他类发生比较的时候&#xff0c;我们会重写equals方法&#xff0c;但大多数情况下&#xff0c;都忽略了重写hashCode方法。 这里说一下重写hashCode的必要性。 当我们使用HashSet或者HashMap的时候&#xff0c;在比对value|key是否存在时&#xff0c;会调用…