77、机器人足球与救援机器人的开源解决方案

机器人足球与救援机器人的开源解决方案

1. RoboCupJunior 足球赛的低成本图像处理方案

在 RoboCupJunior 足球比赛中,使用的足球会发射红外信号,直径为 74 毫米。系统在检测球门时,上一步计算出的众数代表球门的高度,选择众数是为了在球门有障碍物的情况下确保结果准确。

接下来,系统会利用众数和已知的球门高度(约 12 厘米)计算像素与厘米的比例,并查看图像中心是否有足够空间让球进入。若没有,系统会比较 lsum 和 rsum 的值,建议机器人向左或向右移动。若 lsum 和 rsum 都为零(例如未检测到球门时),系统会建议机器人依靠其他传感器数据。结果会存储在状态变量中,该变量有四种状态:K(踢球)、L(向左移动)、R(向右移动)或 N(无动作)。

以下是状态判断的流程:

graph TD;
    A[检测球门] --> B[计算众数代表球门高度];
    B --> C[计算像素:厘米比例];
    C --> D{图像中心是否有空间让球进入};
    D -- 是 --> E[状态设为 K];
    D -- 否 --> F{比较 lsum 和 rsum};
    F -- lsum > rsum --> G[状态设为 L];
    F -- lsum < rsum --> H[状态设为 R];
    F -- lsum = rsum = 0 --> I[状态设为 N];
1.1 姿态估计

利用检测球门时计算的值,还能估算出机器人与球门的大致距离。这需要知道相机的焦距,可通过相机配置过程得到,也可通过以下简单方法计算:
考虑一个已知高度为 H、与相机距离为 d 的物体,测量其在像素中的表观高度为 h,根据针孔相机模型,相机焦距 f 为:
[f = \frac{hd}{H}]
若已知物体在像素中的表观高度为 (h’),要计算与该物体(即对手球门)的大致距离 D,根据三角形相似原理可得:
[D = \frac{Hf}{h’}]
其中 D 是与物体的大致距离(Y 坐标)。不过,尝试用类似方法计算机器人与球门中心的水平距离(X 坐标)并不实际,因为很多情况下无法正确计算该值,且在策略中的作用较小,所以系统不计算该值。

1.2 系统校准

为在比赛中获得精确结果,每场半场前校准系统很重要。这主要是因为“上半场结束后,两队会交换场地”,且光照条件可能改变。
校准过程是改变球门颜色的范围,即改变 HSV 模型中的最小和最大色调、饱和度和值。这些值分别由变量 minH、minS、minV 和 maxH、maxS、maxV 表示。
为使校准简单直接,使用 OpenCV High - GUI 库,通过滑动条改变这些变量并立即看到结果。校准后,将值存储在使用 YAML 格式的配置文件中,下次运行系统时加载该文件。具体操作步骤如下:
1. 打开 OpenCV High - GUI 库提供的界面。
2. 通过滑动条调整 minH、minS、minV 和 maxH、maxS、maxV 的值。
3. 观察调整后的效果,直到达到满意的结果。
4. 将调整好的值保存到 YAML 格式的配置文件中。

1.3 在策略中的应用

图像处理系统每次迭代后,会向 Arduino 控制器发送两个变量:球门状态和与球门的大致距离。球门状态变量使用更频繁,可提高机器人的射门效率。以下是使用该值的示例代码:

switch (status) {
case 'K':
    kick();
    break;
case 'R':
    move_right();
    break;
case 'L':
    move_left();
    break;
default:
    break;
}

尽管代码简单,但对机器人策略的改进显著。机器人不再盲目射门,而是移动到球门有足够空间时再射门。而且,由于能知道机器人与球门的距离,还可创建更复杂有效的策略。

2. 救援机器人的 Hector 开源模块

在城市搜索和救援(USAR)任务中,机器人的关键能力包括自主探索灾难现场、识别受害者和其他感兴趣的物体。介绍了相关的开源软件模块,用于开发这些复杂能力,其中包括用于在退化城市环境中进行自我定位和绘图的 hector slam。

2.1 系统概述

该系统涵盖了许多为 Hector UGV 系统开发和测试的高级节点,可用于其他平台,无需或只需稍作修改。硬件相关模块(如相机和电机驱动器或低级控制器)不在此范围内。假设使用这些模块的机器人能根据现有 ROS 标准提供必要的传感器数据,并能通过发布速度命令进行控制。所有保存状态信息的节点都会订阅命令主题,主要用于在必要时重置系统。

系统的主要节点和模块如下表所示:
| 模块名称 | 功能 |
| ---- | ---- |
| hector slam | 包括 hector mapping、hector map server、hector geotiff 和 hector trajectory server 模块,用于同时定位和绘图 |
| hector pose estimation | 实现全 6 自由度机器人姿态和扭转的估计 |
| hector elevation mapping | 将 RGBD 相机的点云测量数据融合成高程图 |
| hector costmap | 将 2.5D 高程图与 2D 占用网格图融合,计算二维成本图 |
| hector object tracker | 跟踪感兴趣物体的信息 |
| hector geotiff | 生成符合 RoboCup Rescue 规则的 GeoTIFF 地图 |
| hector exploration planner | 基于探索变换方法进行规划和自主探索 |

2.2 定位和绘图

创建环境地图有两个重要原因:一是帮助急救人员进行情况评估和自我定位,二是用于机器人系统的路径规划和高级自主行为。

2.2.1 同时定位和绘图(SLAM)

由于灾难会显著改变环境,USAR 机器人需在未知环境中运行,因此要解决 SLAM 问题以生成足够精确的度量地图。提供的 hector slam 系统由 hector mapping、hector map server、hector geotiff 和 hector trajectory server 模块组成。该系统不依赖里程计数据,而是完全依靠快速激光雷达数据扫描匹配,结合姿态估计系统和可选的俯仰/滚动单元来稳定激光扫描仪,即使在地面不平的情况下也能提供环境地图。

2.2.2 姿态估计

hector pose estimation 节点实现了扩展卡尔曼滤波器(EKF),融合了惯性测量单元(IMU)的测量值、激光扫描匹配器的 2D 姿态误差,以及可选的其他定位传感器(如卫星导航接收器、磁力计和气压传感器)的数据。滤波器基于地面车辆的通用运动模型,主要由 IMU 驱动,不使用控制输入或车轮里程计,因为在不平或光滑地面上,车轮打滑或侧移会导致这些数据不可靠。

2.2.3 高程和成本绘图

除了 hector slam 包提供的二维世界表示外,USAR 机器人还需考虑环境的可通行性。hector elevation mapping 包将 RGBD 相机(如 Microsoft Kinect)的点云测量数据融合成高程图,该图由 2D 网格地图表示,每个单元格存储一个高度值和相应的方差。hector costmap 将 2.5D 高程图与 hector mapping 提供的 2D 占用网格图融合,计算用于探索任务的二维成本图。

2.2.4 感兴趣物体

普通的占用网格地图只提供环境几何信息,不包含语义信息。hector object tracker 包使用高斯表示法跟踪感兴趣物体的位置,订阅来自受害者、二维码或其他物体检测器的感知消息,根据机器人的姿态、相机视角和校准信息将其投影到地图框架中,并解决后续检测的关联和跟踪问题。

2.2.5 GeoTIFF 地图

为使不同方法生成的环境地图具有可比性,RoboCup Rescue 联赛比赛使用 GeoTIFF 格式作为标准地图格式。hector geotiff 包允许生成符合规则的 GeoTIFF 地图,并可通过插件接口进行注释,提供了添加机器人行驶路径、受害者和二维码位置的插件。该节点可在机器人系统上运行,并根据计时器将地图保存到永久存储中,减少连接问题导致地图丢失的可能性。

以下是定位和绘图模块的关系图:

graph LR;
    A[hector slam] --> B[hector mapping];
    A --> C[hector map server];
    A --> D[hector geotiff];
    A --> E[hector trajectory server];
    F[hector pose estimation] --> G[EKF 融合数据];
    H[hector elevation mapping] --> I[生成高程图];
    J[hector costmap] --> K[融合高程图和占用网格图];
    L[hector object tracker] --> M[跟踪物体信息];
    D --> N[生成 GeoTIFF 地图];

机器人足球与救援机器人的开源解决方案

2.3 规划和探索

虽然有大量关于使用自主机器人进行探索的研究成果,但作为开源软件可供复用的方法却很少。提供的 hector exploration planner 基于探索变换方法。在这个探索规划器中,机器人前方的边界被赋予更高的权重,以防止机器人频繁进行高成本的转向操作。

受消防员使用的靠墙跟随技术的启发,探索规划器还可以生成“靠墙跟随”轨迹。规划的轨迹基于地图数据生成,因此不会出现仅考虑原始传感器数据的反应式方法所存在的弱点。高级行为可以随时在使用探索变换和靠墙跟随方法之间进行切换。

当环境被完全探索后,规划器会进入“内部探索”模式。具体操作步骤如下:
1. 从 hector trajectory server 节点获取机器人的遍历路径,该路径包含一系列离散的过去机器人姿态。
2. 根据这些姿态之间的距离对其进行采样,并将采样后的位置添加到一个列表中。
3. 将这个列表作为目标点列表传递给探索变换算法。
4. 对探索变换单元格进行详尽搜索,找到值最高的单元格,该单元格对应的点就是距离先前路径最远且机器人可以安全到达的点。

以下是探索规划的流程图:

graph TD;
    A[开始探索] --> B{环境是否完全探索};
    B -- 否 --> C[使用探索变换或靠墙跟随规划轨迹];
    B -- 是 --> D[进入内部探索模式];
    D --> E[从 hector trajectory server 获取遍历路径];
    E --> F[对路径位置进行采样];
    F --> G[将采样位置作为目标点列表传递给算法];
    G --> H[搜索最高值单元格确定目标点];
    C --> I[执行规划轨迹];
    H --> I;
2.4 仿真

在实际机器人上进行实验既耗时又成本高昂,特别是在 USAR 环境(如 RoboCup Rescue 赛场)中,这些环境对机器人硬件要求高,且实验室空间通常有限。

2.4.1 环境

hector nist arenas gazebo stack 提供了创建模拟环境所需的工具,用户可以通过组合提供的 NIST 标准测试场地元素来创建场景,还能轻松添加其他元素。hector nist arena worlds 包提供了示例场地,包括 2011 年 RoboCup 德国公开赛和 2012 年泰国机器人锦标赛救援场地的模型。

由于 Gazebo 最初不支持多光谱传感器仿真,为了能够模拟常用于检测散发体热的受害者的热成像,hector gazebo thermal camera 包提供了一个 Gazebo 相机插件,可用于此任务。创建模拟环境的步骤如下:
1. 安装 hector nist arenas gazebo stack。
2. 选择合适的 NIST 标准测试场地元素进行组合。
3. 若需要,添加自定义元素。
4. 配置 hector gazebo thermal camera 插件(如果要模拟热成像)。

2.4.2 地面车辆

hlugv gazebo 包提供了 Hector Lightweight UGV 系统的模型。该机器人的六个轮子采用差速驱动,其行为类似于 USAR 场景中常用的履带式机器人系统。使用该模型进行仿真的步骤如下:
1. 安装 hlugv gazebo 包。
2. 在 Gazebo 中加载 Hector Lightweight UGV 模型。
3. 配置模型的参数(如初始位置、速度等)。
4. 启动仿真并观察机器人的行为。

2.5 应用和影响

在不到两年的时间里,hector slam 已成为许多团队在 RoboCup 比赛中使用的事实上的标准 SLAM 系统,并取得了巨大成功。这些开源模块不仅在 RoboCup 救援比赛中得到了应用,还被众多国际研究团队用于各种不同的任务。它们为城市搜索和救援机器人的关键开源软件模块的更广泛倡议奠定了基础,降低了开发成本和时间,提高了机器人的能力,推动了该领域的发展。

总的来说,无论是 RoboCupJunior 足球赛的低成本图像处理方案,还是救援机器人的 Hector 开源模块,都为机器人领域的发展提供了有价值的解决方案,具有广阔的应用前景和重要的研究意义。通过这些开源方案,开发者可以更方便地进行机器人系统的开发和优化,推动机器人技术在更多领域的应用。

第三方支付功能的技术人员;尤其适合从事电商、在线教育、SaaS类项目开发的工程师。; 使用场景及目标:① 实现微信支付宝的Native、网页/APP等主流支付方式接入;② 掌握支付过程中关键的安全机制如签名验签、证书管理敏感信息保护;③ 构建完整的支付闭环,包括下单、支付、异步通知、订单状态更新、退款对账功能;④ 通过定时任务处理内容支付超时概要状态不一致问题:本文详细讲解了Java,提升系统健壮性。; 阅读应用接入支付宝和建议:建议结合官方文档沙微信支付的全流程,涵盖支付产品介绍、开发环境搭建箱环境边学边练,重点关注、安全机制、配置管理、签名核心API调用及验签逻辑、异步通知的幂等处理实际代码实现。重点异常边界情况;包括商户号AppID获取、API注意生产环境中的密密钥证书配置钥安全接口调用频率控制、使用官方SDK进行支付。下单、异步通知处理、订单查询、退款、账单下载等功能,并深入解析签名验签、加密解密、内网穿透等关键技术环节,帮助开发者构建安全可靠的支付系统。; 适合人群:具备一定Java开发基础,熟悉Spring框架和HTTP协议,有1-3年工作经验的后端研发人员或希望快速掌握第三方支付集成的开发者。; 使用场景及目标:① 实现微信支付Native模式支付宝PC网页支付的接入;② 掌握支付过程中核心的安全机制如签名验签、证书管理、敏感数据加密;③ 处理支付结果异步通知、订单状态核对、定时任务补偿、退款及对账等生产级功能; 阅读建议:建议结合文档中的代码示例官方API文档同步实践,重点关注支付流程的状态一致性控制、幂等性处理和异常边界情况,建议在沙箱环境中完成全流程测试后再上线。
matlab2python 这是一个Python脚本,用于将Matlab文件或代码行转换为Python。此项目处于alpha阶段。 该实现严重依赖于Victor Leikehman的SMOP项目。 当前实现围绕SMOP构建,具有以下差异: 力图生成不依赖libsmop的代码,仅使用如numpy这样的标准Python模块。 使用常见缩写如np而非全称numpy。 尝试重排数组和循环索引,从0开始而不是1。 不使用来自libsmop的外部类matlabarray和cellarray。 增加了对Matlab类的基本支持,类体中声明的属性在构造函数中初始化。 因上述改动,产出代码“安全性较低”,但可能更接近用户自然编写的代码。 实现相对直接,主要通过替换SMOP使用的后端脚本,这里称为smop\backend_m2py.py。 一些函数替换直接在那里添加。 额外的类支持、导入模块以及其他微调替换(或说是黑客技巧)在matlabparser\parser.py文件中完成。 安装 代码用Python编写,可按如下方式获取: git clone https://github.com/ebranlard/matlab2python cd matlab2python # 安装依赖项 python -m pip install --user -r requirements.txt # 让包在任何目录下都可用 python -m pip install -e . # 可选:运行测试 pytest # 可选:立即尝试 python matlab2python.py tests/files/fSpectrum.m -o fSpectrum.py 使用方法 主脚本 存储库根目录下的主脚本可执行,并带有一些命令行标志(部分直接取自SMOP)。要将文件file.m转换为file.py,只需输入:
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值