💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
摘要
与人类和动物在环境中移动的能力相比,机器人的导航能力还处于初级阶段。导航的核心过程之一是定位,即回答“当前自己处于何处”的问题。机器人定位是一门利用各种传感器告知机器人其在环境中的位置的科学。超宽带(UWB)无线电是一种能够返回绝对位置信息的传感器技术。实现这一功能的算法称为多边测量法,它通过测量多个机器人标签与环境锚点之间的距离来计算标签的位置。由于具备生成和检测短持续时间、高幅度脉冲的能力,UWB特别适合用于返回精确的距离测量。Decawave公司开发了一种用于测距的UWB集成电路,并推出了一系列支持该技术的产品。使用这种实现方法所声称并验证的精度可达10厘米。本论文描述了使用Decawave技术进行机器人定位的各种实验。论文章节的进展从商业产品的验证开始,然后转向在各种环境中开发和测试机器人操作系统(ROS)的开源驱动程序包,接着是开发一种新颖的相位差到达(PDoA)传感器,用于无需UWB锚点网格的三维机器人定位,最后探讨了UWB的未来研究方向和商业化潜力。本论文是作者在过去三年调查研究中通过第一手和第二手研究学到的所有知识的汇编。主要贡献包括:
-
一个模块化的ROS UWB驱动框架和一系列用于离线实验的多边测量算法的ROS数据包。
-
一个稳健的ROS框架,用于比较动作捕捉系统(MoCap)的真实数据与传感器数据,以便进行严格的统计分析和多种传感器的特性描述。
-
开发了一种新颖的UWB PDoA传感器阵列和数据模型,允许从单一点对目标进行三维定位,而无需部署天线网格。
第1章:引言
“我在哪里?”确定自己在空间中的位置和方向是人类最古老的问题之一。与生存密切相关,知道自己家在哪里、食物在哪里,定义了对环境中位置的依赖。要回答这个问题,需要有地图作为参考。人类自史前时代就开始绘制自己的地图:“一些曾经被认为是纯粹艺术表现的洞穴壁画、骨头和其他物品上的图案,根据最新的研究,实际上是狩猎区域、溪流、路线,甚至是星星的地图”。地图学是研究地图的学科,它主要是人类的活动。“作为内心精神世界与外在物理世界之间的中介,地图是帮助人类理解宇宙的基本工具……而且这种制图体验……无疑在我们称之为地图的物理物品出现之前就已经存在了”。
天文学
除了早期的人类地图,还有用于导航的环境地标,如岩石、地形、树木和其他景观标记,这些在人类进化过程中一直被使用。超越地球,星星是自人类诞生以来就存在的地图。天文学是最古老的自然科学之一,也是最早达到高度数学化和预测性复杂性的科学。公元前二千年末和公元前一千年初,巴比伦天文学家已经识别出行星与其他星星和夜空中的其他物体是不同的。在接下来的4000年里,天文学作为一门领先的科学不断发展,直至今日。星图,也称为星图,自古以来就是天文学的一部分。最早记录的星图可能是至少32,500年前雕刻的猎户座星座。总之,天文学是人类最古老的活动之一,并与定位和制图的历史紧密相连。
导航
除了生存,地图和定位对于探索新领土至关重要。文明自公元前3000年米诺人在克里特岛航行以来,就一直在使用天文导航探索海洋。从那时起,各种导航工具被开发出来,以帮助人类首先探索海洋,然后是空中,现在是太空。其中一些最著名的工具包括用于测量地球磁场的指南针、用于测量纬度的星盘和六分仪、用于测量时间的计时器,以及现代工具,如陀螺罗盘、雷达和全球导航卫星系统(GNSS),稍后将讨论。人类发明了无数工具,与地图一起使用,以确定时间和位置用于导航,但这些是创新而非与生俱来的。事实上,在人类感知范围之外,科学已经发现并仍有待发现的许多其他生物体的导航方法,包括磁场检测、利用太阳、月亮和星星的天文导航,以及天空光偏振跟踪。与地球和星星联系较少的方法包括气味寻找和使用认知地图进行一般地标识别。
机器人定位
与生物体不同,机器人没有数十亿年的进化来完善其生存和导航本能。相反,它们必须依赖工程师的智慧来设计传感器、执行器和算法,以定义它们在宇宙中的位置。尽管机器人导航涉及机器人学的多个子领域,包括感知、定位、认知和运动控制,但本论文专注于机器人定位的问题。与人类的努力类似,“机器人定位回答了这样一个问题:机器人现在在哪里?”。要回答这个问题,机器人必须提供传感器测量值,以确定其在环境中的当前位置和方向。因此,“机器人定位是确定机器人相对于给定环境地图的姿态的问题”。
任何刚体最多有六个自由度(DoF),这些自由度完全且唯一地定义了其在空间中的位置和方向。标准的ROS几何消息“Pose”结合了笛卡尔线性点位置和围绕该点的四元数角方向,本论文将使用相同的定义。
所有传感器提供绝对或相对测量值。绝对传感器提供直接引用机器人正在导航的环境的测量数据。相对传感器则提供引用机器人自身坐标系的测量数据。一种特殊的绝对传感器提供引用全局坐标系的测量数据。这个全局坐标系通常附着在地球上,但它也可以是任何可以相对于地球确定性计算的坐标系,例如另一个行星。这个定义与地图坐标系和地球坐标系之间的转换计算形成对比,因为地图坐标系可能附着在船只、飞机或其他可以独立于地球移动的环境中。
ROS REP 105为地球、地图、里程计(odom)和base_link等标准坐标系之间的父子关系提供了定义。在当前讨论中,绝对传感器将返回引用地图坐标系的测量值,相对传感器返回引用里程计坐标系的测量值。地图和里程计坐标系之间的关系是,里程计的姿态是连续的,并且相对于地图随时间漂移。这种漂移是由航位推算引起的,即通过积分自上次已知姿态以来的相对传感器测量值来确定当前姿态。航位推算可以在短时间内提供准确的姿态估计,这取决于相对传感器的精度,但由于传感器误差的积分,它总会随着时间的推移从真实姿态漂移。
里程计坐标系漂移的问题可以通过将绝对传感器信息与航位推算的姿态相结合来缓解,以得出更准确的机器人姿态估计。由于所有传感器都会引入测量噪声,估计的机器人姿态总会有一些误差,但状态噪声的相对幅度取决于传感器的质量。有几种方法可以从多个传感器测量值的融合中估计机器人姿态,包括扩展卡尔曼滤波和无迹卡尔曼滤波以及粒子滤波,但这些方法不是我们讨论的重点。让我们现在更仔细地看看一些用于机器人定位的传感器。
机器人定位的传感器
本论文是关于UWB的,但要理解为什么这项技术是相关的,首先必须了解其他可用的选项,以及它们的优势和局限性。这是对一些最相关和最有趣的用于机器人定位的传感器的简要介绍。
轮式里程计
轮式里程计利用旋转编码器测量机器人的轮子或其他旋转机构的运动,这些运动被转换成机器人的线性运动。使用轮子的半径或机器人的其他转换常数,以及旋转编码器的元素数量,可以计算出机器人的运动。这是航位推算的一个经典例子,机器人试图计算自上次已知位置以来走了多少“步”。这种方法最适合线性运动,但由于运动需要轮子打滑、轮子磨损、表面条件等因素,总是存在一定程度的误差。对于差分驱动机器人,尤其是那些有超过两个轮子的机器人,执行转弯过多需要的轮子打滑,这进一步降低了轮式里程计测量的精度。由于这些原因,仅通过轮式里程计进行的机器人定位将经历无界的位置误差增长。轮式里程计的好处是采样时间快,这使其成为机器人定位的标准传感器。
惯性测量单元
惯性测量单元(IMU)是一套传感器,旨在提供完整的六自由度信息,以确定机器人相对于过去姿态的当前姿态。典型的系统至少包括三轴加速度计以测量线性加速度,以及三轴陀螺仪以测量角速度。其他传感器也可能存在,例如三轴磁力计以绝对确定相对于地球磁场的方向,气压计以测量相对于海平面的垂直位移,以及温度计以补偿任何温度相关的传感器变化。IMU甚至可能包含一个内部卡尔曼滤波器,以提供增强的姿态信息。尽管理论上可以使用磁力计测量绝对方向,但机器人和环境通常相对于地球磁场的强度存在高水平的磁干扰。由于需要对加速度进行双重积分以计算位置,以及对角速度进行单次积分以计算方向,IMU航位推算也提供了相对于已知起始位置的无界姿态估计。采样率可以与电机控制回路所需的速率一样快,这允许实时更新姿态信息。与轮式里程计一样,IMU通常是执行机器人定位的基本系统。
超声波
超声波传感器利用声换能器发送和接收高频(超声波)压力波。这些声波通过空气传播,并在遇到表面时反射回传感器单元。传感器比较信号的发送时间和接收时间,并使用声速计算所行进的距离。这允许在从传感器单元扩展的锥形区域内检测物体。各种感测距离可供选择,范围至少为2厘米到5米。超声波传感器便于进行粗略的障碍物检测,并且可以检测一些红外传感器无法检测的透明材料,但它们有一些基本限制,限制了它们在机器人定位中的实用性。这些限制包括在较远距离处的低保真度、无法检测障碍物大小的开关状态、当障碍物以一定角度反射声波时容易丢失反射信号,以及反射特性取决于表面光洁度。由于空气是超声波的介质,风可能会引入这种传感器类型的外部干扰。总体而言,超声波传感器是粗略的障碍物检测器,但作为物体识别器较差,这对于准确的机器人定位是必要的。近年来,它们已经被更准确的传感器所取代。
第10章:结论
在本论文中,超宽带(UWB)技术从机器人定位的实际应用角度进行了深入研究。多个系统在多种不同环境中进行了统计特性分析。研究验证了,多边测量法UWB系统能够在足够大的空间中为机器人提供准确的姿态估计,并且在GNSS受限环境中,UWB几乎是唯一可选的类似系统。此外,还开发了其他新颖的机器人定位传感器,包括Trimble SX-10全站仪以及由Decawave测试版PDoA套件构建的相位差到达(PDoA)盾牌。论文还探讨了未来研究的方向,重点关注机器人定位中的实际应用和问题。论文讨论了UWB的商业化潜力,作者认为社会正处于UWB技术普及的边缘,它将在我们的日常生活中得到广泛应用,而不仅仅局限于机器人定位。
全部文章见第4部分。
📚2 运行结果
运行结果比较多,这里就不一一展示。
部分代码:
axis equal
grid on
set(gca,'Units','normalized','Position',[.16 .2 .75 .7],...
'FontUnits','points','FontWeight','normal','FontSize',axisFontSize,'FontName',Font)
title({'Comparison of VICON and Decawave TREK1000 UWB','Trilateration using Decawave TWR algorithm: 110kbps, Channel 2'},...
'FontUnits','points','FontWeight','normal','FontSize',titleFontSize,'FontName',Font)
xlabel({'$x[m]$'},'FontUnits','points','interpreter','latex','FontSize',axisFontSize,'FontName',Font)
ylabel({'$y[m]$'},'FontUnits','points','interpreter','latex','FontSize',axisFontSize,'FontName',Font)
zlabel({'$z[m]$'},'FontUnits','points','interpreter','latex','FontSize',axisFontSize,'FontName',Font)
legend({'VICON position','UWB tag0 position','UWB Anchors','VICON Cameras','Euclidean Error'},...
'Units','points','interpreter','latex','FontSize',legendFontSize,'FontName',Font,'Location','SouthWest')
text(Ax,Ay,aLabels,'VerticalAlignment','bottom','HorizontalAlignment','left',...
'FontUnits','points','FontWeight','normal','FontSize',axisFontSize,'FontName',Font)
ax = gca;
filename = 'figs/ECR-TREK1000-Data';
print(filename,'-depsc','-painters'); %print figure as eps for the infinite zoom
print(filename,'-dsvg','-painters'); %print figure as svg for powerpoint
print(filename,'-dpng','-opengl'); %print figure as png
%% error histogram
width = 6; %figure size in inches
height = 4;
figure('Units','inches','Position',[x0 y0 width height],'PaperPositionMode','auto');
edges = 0:0.01:0.7;
histogram(euclidean_error,edges)
set(gca,'Units','normalized',...'Position',[.15 .2 .75 .7],...
'FontUnits','points','FontWeight','normal','FontSize',axisFontSize,'FontName',Font)
title({'Histogram of Euclidean error difference between Vicon and UWB'},...
'FontUnits','points','FontWeight','normal','interpreter','latex','FontSize',titleFontSize,'FontName',Font)
xlabel({'euclidean error [m]'},'FontUnits','points','interpreter','latex','FontSize',axisFontSize,'FontName',Font)
ylabel({'count'},'FontUnits','points','interpreter','latex','FontSize',axisFontSize,'FontName',Font)
dim = [.45 .6 .0 .0]; %annotation
start_str = sprintf("Euclidean Metric:");
mean_str = sprintf('Error Mean = %0.1f cm', e_mean*100);
median_str = sprintf('Error Median = %0.1f cm', e_median*100);
mode_str = sprintf('Error Mode = %0.1f cm', e_mode*100);
stdev_str = sprintf('Error Std.Dev = %0.1f cm', e_std*100);
str = start_str + "\n" + mean_str + "\n" + stdev_str;
str = compose(str);
str = splitlines(str);
annotation('textbox',dim,'String',str,'FitBoxToText','on',...
'Units','points','interpreter','latex','FontSize',legendFontSize,'FontName',Font,'BackgroundColor','white');
filename = 'figs/Error_Histogram_ECR';
print(filename,'-depsc','-painters'); %print figure as eps for the infinite zoom
print(filename,'-dsvg','-painters'); %print figure as svg for powerpoint
print(filename,'-dpng','-opengl'); %print figure as png
%% Plot Angles UWB
% Figure properties
width = 6; %figure size in inches
height = 8;
x0 = 10; %position on screen
y0 = 4;
titleFontSize = 12;
axisFontSize = 9;
legendFontSize = 9;
Font = 'Times';
close all
figure('Units','inches','Position',[x0 y0 width height],'PaperPositionMode','auto');
plot(xVICON,yVICON)
hold on
quiver(x_UWBpose,y_UWBpose,u_UWBpose, v_UWBpose, 1,'Color',[0.8500 0.3250 0.0980]);
hold on
plot(Ax,Ay,'g*',xCAM,yCAM,'mo')
xlim([-4 4])
ylim([-7 5])
yticks([-7:5])
axis equal
grid on
set(gca,'Units','normalized','Position',[.16 .2 .75 .7],...
'FontUnits','points','FontWeight','normal','FontSize',axisFontSize,'FontName',Font)
title({'ECR UWB Pose Angle on the Jackal Robot'},...
'FontUnits','points','FontWeight','normal','FontSize',titleFontSize,'FontName',Font)
xlabel({'$x[m]$'},'FontUnits','points','interpreter','latex','FontSize',axisFontSize,'FontName',Font)
ylabel({'$y[m]$'},'FontUnits','points','interpreter','latex','FontSize',axisFontSize,'FontName',Font)
zlabel({'$z[m]$'},'FontUnits','points','interpreter','latex','FontSize',axisFontSize,'FontName',Font)
legend({'VICON position','UWB Pose Heading','UWB Anchors','VICON Cameras'},...
'Units','points','interpreter','latex','FontSize',legendFontSize,'FontName',Font,'Location','South')
text(Ax,Ay,aLabels,'VerticalAlignment','bottom','HorizontalAlignment','left',...
'FontUnits','points','FontWeight','normal','FontSize',axisFontSize,'FontName',Font)
ax = gca;
filename = 'figs/Angle_UWB_ECR';
print(filename,'-depsc','-painters'); %print figure as eps for the infinite zoom
print(filename,'-dsvg','-painters'); %print figure as svg for powerpoint
print(filename,'-dpng','-opengl'); %print figure as png
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)
🌈4 Matlab代码、数据、文章下载
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取