mirror of
https://github.com/openmlsys/openmlsys-zh.git
synced 2026-05-09 23:42:05 +08:00
robotics 3.24
This commit is contained in:
@@ -1,18 +1,18 @@
|
||||
## 控制系统
|
||||
|
||||
虽然控制理论已牢牢植根于基于模型(Model-based)的设计传统,但丰富的数据和机器学习给控制理论带来了新的机遇。控制理论和机器学习的交叉点涵盖了广泛的研究方向,包括但不限于动态系统的学习、在线学习和控制、深度学习的控制理论观点、强化学习以及在各种现实世界系统中的应用。
|
||||
从机器学习的角度来看,未来的主要挑战之一是超越模式识别并解决数据驱动控制和动态过程优化方面的问题。
|
||||
虽然控制理论已牢牢植根于基于模型(Model-based)的设计思想,但丰富的数据和机器学习方法给控制理论带来了新的机遇。控制理论和机器学习的交叉方向涵盖了广泛的研究方向以及在各种现实世界系统中的应用。
|
||||
|
||||
理论方面,线性二次控制(Linear-Quadratic
|
||||
Control)是经典的控制方法,最近有关于图神经网络在分布式线性二次控制的研究。作者称将线性二次问题转换为自监督学习问题,能够找到基于图神经网络(Graph
|
||||
Neural
|
||||
Networks,GNN)的最佳分布式控制器,他们还推导出了所得闭环系统稳定的充分条件。随着基于数据和学习的机器人控制方法不断得到重视,研究人员必须了解何时以及如何在现实世界中最好地利用这些方法,因为安全是至关重要的,有的研究通过学习不确定的动力学来安全地提高性能,鼓励安全或稳健的强化学习方法,以及可以正式认证所学控制策略的安全性的方法。 :numref:`safe\_learning\_control`展示了安全学习控制(Safe Learning
|
||||
Control)系统的框架图,用数据驱动的方法来学习控制策略,兼顾安全性。Lyapunov
|
||||
函数是评估非线性动力系统稳定性的有效工具,最近有人提出Neural
|
||||
Lyapunov来将安全性纳入考虑。
|
||||
### 线性二次控制
|
||||
|
||||
应用方面,有基于神经网络的自动驾驶汽车模型预测控制,也有研究将最优控制和学习相结合并应用在陌生环境中的视觉导航,该研究将基于模型的控制与基于学习的感知相结合来解决。基于学习的感知模块产生一系列航路点通过无碰撞路径引导机器人到达目标。基于模型的规划器使用这些航路点来生成平滑且动态可行的轨迹,该轨迹使用反馈控制在物理系统上执行。在模拟的现实世界杂乱环境和实际地面车辆上的实验表明,与纯粹基于几何映射或基于端到端学习的替代方案相比,这种新的系统可以在新环境中更可靠、更有效地到达目标位置。强化学习和模仿学习与控制论有密切联系:LEOC整合了强化学习和经典控制理论的原则方法。有人将基于模型的离线强化学习算法扩展到高维视觉观察空间并在真实机器人上执行基于图像的抽屉关闭任务方面表现出色。控制部分通过神经网络优化可以更加平滑、节能、安全,如何将
|
||||
神经网络和传统控制理论结合,特别是和运动学算法相结合,将会是一个有趣的方向。
|
||||
理论方面,线性二次控制(Linear-Quadratic Control)是经典的控制方法。若动力系统可以用一组线性微分方程表示,而其约束为二次泛函,这类的问题称为线性二次问题。此类问题的解即为线性二次调节器(Linear–Quadratic Regulator),简称LQR。最近有关于图神经网络在分布式线性二次控制的研究,将线性二次问题转换为自监督学习问题,能够找到基于图神经网络的最佳分布式控制器,他们还推导出了所得闭环系统稳定的充分条件。
|
||||
|
||||
### 模型预测控制
|
||||
|
||||
模型预测控制(MPC)是一种先进的过程控制方法,用于在满足一组约束条件的同时控制过程。MPC 的主要优势在于它允许优化当前时刻的同时考虑未来时刻。因此与线性二次调节器不同。MPC 还具有预测未来事件的能力,并可以相应地采取控制措施。最近有研究将最优控制和机器学习相结合并应用在陌生环境中的视觉导航任务:比如基于学习的感知模块产生一系列航路点通过无碰撞路径引导机器人到达目标,基于模型的规划器使用这些航路点来生成平滑且动态可行的轨迹,然后使用反馈控制在物理系统上执行。实验表明,与纯粹基于几何映射或基于端到端学习的方案相比,这种新的系统可以更可靠、更有效地到达目标位置。
|
||||
|
||||
### 控制系统的稳定性分析
|
||||
|
||||
因为安全对机器人应用是至关重要的,有的强化学习方法通过学习动力学的不确定性来提高安全性,鼓励安全、稳健、以及可以正式认证所学控制策略的方法,如 图:numref:`safe\_learning\_control`展示了安全学习控制(Safe Learning Control)系统的框架图。Lyapunov 函数是评估非线性动力系统稳定性的有效工具,最近有人提出Neural Lyapunov来将安全性纳入考虑。
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# 机器人系统
|
||||
|
||||
在本章中,我们介绍机器学习的一个重要分支——机器人及其在系统方面的知识。本章的学习目标包括:
|
||||
本章介绍机器学习的一个重要分支——机器人及其在系统方面的知识,学习目标包括:
|
||||
|
||||
- 掌握机器人系统基本知识。
|
||||
|
||||
- 掌握通用机器人操作系统。
|
||||
- 掌握感知系统、规划系统和控制系统。
|
||||
|
||||
- 掌握感知系统、规划系统、控制系统。
|
||||
- 掌握通用机器人操作系统。
|
||||
|
||||
```toc
|
||||
:maxdepth: 2
|
||||
@@ -14,12 +14,6 @@
|
||||
rl_sys_intro
|
||||
ros
|
||||
ros_code_ex
|
||||
perception
|
||||
perception_code_ex
|
||||
planning
|
||||
planning_code_ex
|
||||
control
|
||||
control_code_ex
|
||||
robot_safety
|
||||
|
||||
summary
|
||||
```
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
## 感知系统
|
||||
|
||||
感知系统不仅可以包括视觉,还可以包含触觉、声音等。在未知环境中,机器人想实现自主移动和导航必须知道自己在哪(例如通过相机重定位 :cite:`ding2019camnet`),周围什么情况(例如通过3D物体检测 :cite:`yi2020segvoxelnet`或语义分割),这些要依靠感知系统来实现 :cite:`xu2019depth`。
|
||||
感知系统不仅包括视觉感知,还可以包含触觉、声音等。在未知环境中,机器人想实现自主移动和导航必须知道自己在哪(通过相机重定位 :cite:`ding2019camnet`),周围什么情况(通过3D物体检测 :cite:`yi2020segvoxelnet`或语义分割),预测相机在空间的轨迹 :cite:`9813561`,这些要依靠感知系统来实现 :cite:`xu2019depth`。
|
||||
一提到感知系统,不得不提的就是即时定位与建图(Simultaneous Localization
|
||||
and
|
||||
Mapping,SLAM)系统。SLAM大致过程包括地标提取、数据关联、状态估计、状态更新以及地标更新等。视觉里程计Visual
|
||||
@@ -16,6 +16,26 @@ RGB-D 视频在测试时提高性能。其中,Bundle Adjustment
|
||||
SLAM
|
||||
的模块化系统帮助智能机器人在未知环境中的高效探索。
|
||||
|
||||
### 物体检测与语义分割
|
||||
|
||||
感知系统不仅包括视觉感知,还可以包含触觉、声音等。在未知环境中,机器人想实现自主移动和导航必须知道自己在哪(通过相机重定位 :cite:`ding2019camnet`),周围什么情况(通过3D物体检测 :cite:`yi2020segvoxelnet`或语义分割),预测相机在空间的轨迹 :cite:`9813561`,这些要依靠感知系统来实现 :cite:`xu2019depth`。
|
||||
|
||||
图像语义分割作为一项常用而又经典的感知技术,经过多年不停的迭代,传统的2D技术已经渐渐的趋于成熟,提升空间较小。同时传统的2D语义分割有一定的局限性,很难从2D图像中直接获知物体的空间位置、以及其在整体空间中的布局,要知道整体空间的位置信息还是需要更多的三维信息。为了让机器人从单纯的2D图像出发,得到空间中物体三维的坐标、语义和边界信息,跨视角语义分割 :cite:`9123682`吸引了众多研究者的关注。
|
||||
|
||||
### 即时定位与建图(SLAM)
|
||||
|
||||
将一个机器人放到未知的环境中,如何能让它明白自己的位置和周围环境?这要靠即时定位与建图(Simultaneous Localization and Mapping,SLAM)系统来实现。
|
||||
|
||||
图:numref:`orbslam3` 展示了最新的ORB-SLAM3的主要系统组件。
|
||||
SLAM大致过程包括地标提取、数据关联、状态估计、状态更新以及地标更新等。SLAM系统在机器人运动过程中通过重复观测到的地图特征(比如,墙角,柱子等)定位自身位置和姿态,再根据自身位置增量式的构建地图,从而达到同时定位和地图构建的目的。
|
||||
|
||||
DROID-SLAM是用于单目、立体和 RGB-D 相机的深度视觉 SLAM,它通过Bundle Adjustment层对相机位姿和像素深度的反复迭代更新,具有很强的鲁棒性,故障大大减少,尽管对单目视频进行了训练,但它可以利用立体声或 RGB-D 视频在测试时提高性能。
|
||||
其中,Bundle Adjustment (BA)描述了像素坐标和重投影坐标之间误差的和,重投影坐标通常使用3D坐标点和相机参数计算得到。BA计算量较大较为耗时,爱丁堡大学提出通过分布式多GPU系统 :cite:`MegBA` 对BA计算进行加速。随着机器学习的发展,BA与机器学习的结合被广泛研究。
|
||||
|
||||
视觉里程计Visual Odometry是SLAM中的重要部分,它估计两个时刻机器人的相对运动。
|
||||
最近,随着机器学习的兴起,基于学习的VO框架也被提了出来。
|
||||
TartanVO是第一个基于学习的视觉里程计(VO)模型,该模型可以推广到多个数据集和现实世界场景,并优于传统基于几何的方法。
|
||||
|
||||

|
||||
|
||||
:width:`800px`
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
## 规划系统
|
||||
|
||||
规划不仅包含运动路径规划,还包含高级任务规划 :cite:`9712373`。其中,运动规划是机器人技术的核心问题之一,应用范围从导航到复杂环境中的操作。它具有悠久的研究历史,方法需要有概率完整性和最优性的保证。然而,当经典运动规划在处理现实世界的机器人问题(在高维空间中)时,挑战仍然存在。研究人员在继续开发新算法来克服与这些方法相关的限制,包括优化计算和内存负载、更好的规划表示和处理维度灾难等。
|
||||
机器人规划不仅包含运动路径规划,还包含任务规划 :cite:`9712373` :cite:`wang2023mimicplay`,:cite:`li2023behavior`。其中,运动规划是机器人技术的核心问题之一,在给定的两个位置之间为机器人找到一条符合约束条件的路径。这个约束可以是无碰撞、路径最短、机械功最小等,需要有概率完整性和最优性的保证,从导航到复杂环境中的机械臂操作都有运动规划的应用。然而,当经典运动规划在处理现实世界的机器人问题(在高维空间中)时,挑战仍然存在。研究人员仍在开发新算法来克服这些限制,包括优化计算和内存负载、更好地规划表示和处理维度灾难等。
|
||||
|
||||
相比之下,机器学习的最新进展为机器人专家研究运动规划问题开辟了新视角:经典运动规划器的瓶颈可以以数据驱动的方式解决;基于深度学习的规划器可以避免几何输入的局限性,例如使用视觉或语义输入进行规划等。最近的工作有:基于深度神经网络的四足机器人快速运动规划框架,通过贝叶斯学习进行运动规划,通过运动规划器指导的视觉运动策略学习。ML4KP是一个用于有效运动动力学运动规划的C++库,该库可以轻松地将机器学习方法集成到规划过程中。
|
||||
自动驾驶领域和行人和车辆轨迹预测方面也涌现出使用机器学习解决运动规划的工作,比如斯坦福大学提出Trajectron++。强化学习在规划系统上也有重要应用 :cite:`sun2021adversarial`,比如基于MetaDrive模拟器 :cite:`li2021metadrive`,最近有一些关于多智能体强化学习,多智能体车流模拟、驾驶行为分析 :cite:`peng2021learning`,考虑安全性因素的强化学习 :cite:`peng2021safe`,以及拓展到由真人专家在旁边监督,出现危险的时候接管的专家参与的强化学习工作(Online
|
||||
Imitation Learning、Offline
|
||||
RL) :cite:`li2021efficient`,样本效率极高,是单纯强化学习算法的50倍。为了更好地说明强化学习是如何应用在自动驾驶中的, :numref:`rl\_ad`展示了一个基于深度强化学习的自动驾驶POMDP模型。
|
||||
同时,机器学习的一些进展为机器人专家研究运动规划问题开辟了新视角:以数据驱动的方式解决经典运动规划器的瓶颈。基于深度学习的规划器可以使用视觉或语义输入进行规划等。ML4KP是一个可用于运动动力学进行运动规划的C++库,可以轻松地将机器学习方法集成到规划过程中。
|
||||
|
||||
|
||||
强化学习在规划系统上也有重要应用 :cite:`sun2021adversarial`,最近有一些工作基于MetaDrive模拟器 :cite:`li2021metadrive`进行多智能体强化学习、驾驶行为分析等 :cite:`peng2021learning` :cite:`peng2021safe` :cite:`li2021efficient`。为了更好地说明强化学习是如何应用在自动驾驶中,尤其是作为自动驾驶规划模块的应用, 图:numref:`rl\_ad`展示了一个基于深度强化学习的自动驾驶POMDP模型,包含环境、奖励、智能体等重要组件。
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -1,17 +1,8 @@
|
||||
## 概述
|
||||
## 机器人系统概述
|
||||
|
||||
机器人学是一个交叉学科,它涉及了计算机科学、机械工程、电气工程、生物医学工程、数学等多种学科,并有诸多应用,比如自动驾驶汽车、机械臂、无人机、医疗机器人等。机器人能够自主地完成一种或多种任务或者辅助人类完成指定任务。通常,人们把机器人系统划分为感知系统、决策(规划)和控制系统等组成部分。
|
||||
|
||||
近些年,随着机器学习的兴起,经典机器人技术出现和机器学习技术结合的趋势,称为机器人学习(Robot
|
||||
Learning)。机器人学习包含了计算机视觉、自然语言处理、语音处理、强化学习和模仿学习等人工智能技术在机器人上的应用,让机器人通过学习,自主地执行各种决策控制任务。
|
||||
|
||||
机器人系统按照涉及的机器人数量,可以划分为单机器人系统和多机器人系统。多机器人系统协作和沟通中涉及的安全和隐私问题,也会是一个值得研究的方向。最近机器人系统在室内自主移动 :cite:`9123682,huang2018navigationnet`,道路自动驾驶 :cite:`pmlr-v155-huang21a,pmlr-v155-sun21a,Sun2022SelfSupervisedTA`,机械臂工业操作等行业场景得到充分应用和发展。一些机器人基础设施项目也在进行中,如具备从公开可用的互联网资源、计算机模拟和
|
||||
真实机器人试验中学习能力的大规模的计算系统RobotBrain。在自动驾驶领域,受联网的自动驾驶汽车
|
||||
(CAV) 对传统交通运输行业的影响,"车辆计算"(Vehicle Computing)
|
||||
(如 :numref:`vehicle-computing`)概念引起广泛关注,并激发了如何让计算能力有限使用周围的CAV计算平台来执行复杂的计算任务的研究。最近,有很多自动驾驶系统的模拟器,代表性的比如CARLA,支持安全RL、MARL、真实地图数据导入、泛化性测试等任务的MetaDrive :cite:`li2021metadrive`,还有CarSim和
|
||||
TruckSim,它们可以作为各种自动驾驶算法的训练场并对算法效果进行评估。另外针对自动驾驶的系统开发平台也不断涌现,如ERDOS,
|
||||
D3 (Dynamic
|
||||
Deadline-Driven)和强调模块化思想的Pylot,可以让模型训练与部署系统与这些平台对接。
|
||||
机器人系统按照涉及的机器人数量,可以划分为单机器人学习系统和多机器人学习系统。多机器人学习系统协作和沟通中涉及的安全和隐私问题,也会是一个值得研究的方向。最近机器人学习系统在室内自主移动 :cite:`9123682,huang2018navigationnet`,道路自动驾驶 :cite:`pmlr-v155-huang21a,pmlr-v155-sun21a,Sun2022SelfSupervisedTA`,机械臂工业操作等行业场景得到充分应用和发展。一些机器人学习基础设施项目也在进行中,如具备从公开可用的互联网资源、计算机模拟和 真实机器人试验中学习能力的大规模的计算系统RoboBrain。在自动驾驶领域,受联网的自动驾驶汽车 (CAV) 对传统交通运输行业的影响,“车辆计算”(Vehicle Computing) 概念引起广泛关注,并激发了如何让计算能力有限使用周围的CAV计算平台来执行复杂的计算任务的研究。最近,有很多自动驾驶系统的模拟器,代表性的比如CARLA,MetaDrive :cite:`li2021metadrive`,CarSim和TruckSim,它们可以作为各种自动驾驶算法的训练场并对算法效果进行评估。另外针对自动驾驶的系统开发平台也不断涌现,如ERDOS、D3 (Dynamic Deadline-Driven)和Pylot,可以让模型训练与部署系统与这些平台对接。
|
||||
|
||||

|
||||
|
||||
@@ -19,13 +10,125 @@ Deadline-Driven)和强调模块化思想的Pylot,可以让模型训练与部
|
||||
|
||||
:label:`vehicle-computing`
|
||||
|
||||
:numref:`learning\_decision\_module`是一个典型的感知、规划、控制的模块化设计的自动驾驶系统框架图,接下来,我们也将按照这个顺序依次介绍通用框架、感知系统、规划系统和控制系统。
|
||||
:numref:`learning\_decision\_module`是一个典型的感知、规划、控制的模块化设计的自动驾驶系统框架图,绿线表示自主驾驶系统的模块化流程,而橙色虚线表示规划和控制模块是不可微的。但是决策策略可以通过重新参数化技术进行训练,如蓝色虚线所示。接下来将按照这个顺序依次介绍感知系统、规划系统和控制系统。
|
||||
|
||||

|
||||

|
||||
|
||||
:width:`800px`
|
||||
|
||||
:label:`learning\_decision\_module`
|
||||
|
||||
### 感知系统
|
||||
|
||||
感知系统不仅包括视觉感知,还可以包含触觉、声音等。在未知环境中,机器人想实现自主移动和导航必须知道自己在哪(通过相机重定位 :cite:`ding2019camnet`),周围什么情况(通过3D物体检测 :cite:`yi2020segvoxelnet`或语义分割),预测相机在空间的轨迹 :cite:`9813561`,这些要依靠感知系统来实现 :cite:`xu2019depth`。
|
||||
一提到感知系统,不得不提的就是即时定位与建图(Simultaneous Localization
|
||||
and
|
||||
Mapping,SLAM)系统。SLAM大致过程包括地标提取、数据关联、状态估计、状态更新以及地标更新等。视觉里程计Visual
|
||||
Odometry是SLAM中的重要部分,它估计两个时刻机器人的相对运动(Ego-motion)。ORB-SLAM系列是视觉SLAM中有代表性的工作, :numref:`orbslam3` 展示了最新的ORB-SLAM3的主要系统组件。香港科技大学开源的基于单目视觉与惯导融合的SLAM技术VINS-Mono也很值得关注。多传感器融合、优化数据关联与回环检测、与前端异构处理器集成、提升鲁棒性和重定位精度都是SLAM技术接下来的发展方向。
|
||||
|
||||
最近,随着机器学习的兴起,基于学习的SLAM框架也被提了出来。TartanVO是第一个基于学习的视觉里程计(VO)模型,该模型可以推广到多个数据集和现实世界场景,并优于传统基于几何的方法。
|
||||
UnDeepVO是一个无监督深度学习方案,能够通过使用深度神经网络估计单目相机的
|
||||
6-DoF 位姿及其视图深度。DROID-SLAM是用于单目、立体和
|
||||
RGB-D 相机的深度视觉 SLAM,它通过Bundle
|
||||
Adjustment层对相机位姿和像素深度的反复迭代更新,具有很强的鲁棒性,故障大大减少,尽管对单目视频进行了训练,但它可以利用立体声或
|
||||
RGB-D 视频在测试时提高性能。其中,Bundle Adjustment
|
||||
(BA)与机器学习的结合被广泛研究。CMU提出通过主动神经
|
||||
SLAM
|
||||
的模块化系统帮助智能机器人在未知环境中的高效探索。
|
||||
|
||||
#### 物体检测与语义分割
|
||||
|
||||
感知系统不仅包括视觉感知,还可以包含触觉、声音等。在未知环境中,机器人想实现自主移动和导航必须知道自己在哪(通过相机重定位 :cite:`ding2019camnet`),周围什么情况(通过3D物体检测 :cite:`yi2020segvoxelnet`或语义分割),预测相机在空间的轨迹 :cite:`9813561`,这些要依靠感知系统来实现 :cite:`xu2019depth`。
|
||||
|
||||
图像语义分割作为一项常用而又经典的感知技术,经过多年不停的迭代,传统的2D技术已经渐渐的趋于成熟,提升空间较小。同时传统的2D语义分割有一定的局限性,很难从2D图像中直接获知物体的空间位置、以及其在整体空间中的布局,要知道整体空间的位置信息还是需要更多的三维信息。为了让机器人从单纯的2D图像出发,得到空间中物体三维的坐标、语义和边界信息,跨视角语义分割 :cite:`9123682`吸引了众多研究者的关注。
|
||||
|
||||
#### 即时定位与建图(SLAM)
|
||||
|
||||
将一个机器人放到未知的环境中,如何能让它明白自己的位置和周围环境?这要靠即时定位与建图(Simultaneous Localization and Mapping,SLAM)系统来实现。
|
||||
|
||||
:numref:`orbslam3` 展示了最新的ORB-SLAM3的主要系统组件。
|
||||
SLAM大致过程包括地标提取、数据关联、状态估计、状态更新以及地标更新等。SLAM系统在机器人运动过程中通过重复观测到的地图特征(比如,墙角,柱子等)定位自身位置和姿态,再根据自身位置增量式的构建地图,从而达到同时定位和地图构建的目的。
|
||||
|
||||
DROID-SLAM是用于单目、立体和 RGB-D 相机的深度视觉 SLAM,它通过Bundle Adjustment层对相机位姿和像素深度的反复迭代更新,具有很强的鲁棒性,故障大大减少,尽管对单目视频进行了训练,但它可以利用立体声或 RGB-D 视频在测试时提高性能。
|
||||
其中,Bundle Adjustment (BA)描述了像素坐标和重投影坐标之间误差的和,重投影坐标通常使用3D坐标点和相机参数计算得到。BA计算量较大较为耗时,爱丁堡大学提出通过分布式多GPU系统 :cite:`MegBA` 对BA计算进行加速。随着机器学习的发展,BA与机器学习的结合被广泛研究。
|
||||
|
||||
视觉里程计Visual Odometry是SLAM中的重要部分,它估计两个时刻机器人的相对运动。
|
||||
最近,随着机器学习的兴起,基于学习的VO框架也被提了出来。
|
||||
TartanVO是第一个基于学习的视觉里程计(VO)模型,该模型可以推广到多个数据集和现实世界场景,并优于传统基于几何的方法。
|
||||
|
||||

|
||||
|
||||
:width:`800px`
|
||||
|
||||
:label:`orbslam3`
|
||||
|
||||
### 规划系统
|
||||
|
||||
机器人规划不仅包含运动路径规划,还包含任务规划 :cite:`9712373` :cite:`wang2023mimicplay`,:cite:`li2023behavior`。其中,运动规划是机器人技术的核心问题之一,在给定的两个位置之间为机器人找到一条符合约束条件的路径。这个约束可以是无碰撞、路径最短、机械功最小等,需要有概率完整性和最优性的保证,从导航到复杂环境中的机械臂操作都有运动规划的应用。然而,当经典运动规划在处理现实世界的机器人问题(在高维空间中)时,挑战仍然存在。研究人员仍在开发新算法来克服这些限制,包括优化计算和内存负载、更好地规划表示和处理维度灾难等。
|
||||
|
||||
同时,机器学习的一些进展为机器人专家研究运动规划问题开辟了新视角:以数据驱动的方式解决经典运动规划器的瓶颈。基于深度学习的规划器可以使用视觉或语义输入进行规划等。ML4KP是一个可用于运动动力学进行运动规划的C++库,可以轻松地将机器学习方法集成到规划过程中。
|
||||
|
||||
|
||||
强化学习在规划系统上也有重要应用 :cite:`sun2021adversarial`,最近有一些工作基于MetaDrive模拟器 :cite:`li2021metadrive`进行多智能体强化学习、驾驶行为分析等 :cite:`peng2021learning` :cite:`peng2021safe` :cite:`li2021efficient`。为了更好地说明强化学习是如何应用在自动驾驶中,尤其是作为自动驾驶规划模块的应用, :numref:`rl\_ad`展示了一个基于深度强化学习的自动驾驶POMDP模型,包含环境、奖励、智能体等重要组件。
|
||||
|
||||

|
||||
|
||||
:width:`800px`
|
||||
|
||||
:label:`rl\_ad`
|
||||
|
||||
### 控制系统
|
||||
|
||||
虽然控制理论已牢牢植根于基于模型(Model-based)的设计思想,但丰富的数据和机器学习方法给控制理论带来了新的机遇。控制理论和机器学习的交叉方向涵盖了广泛的研究方向以及在各种现实世界系统中的应用。
|
||||
|
||||
#### 线性二次控制
|
||||
|
||||
理论方面,线性二次控制(Linear-Quadratic Control)是经典的控制方法。若动力系统可以用一组线性微分方程表示,而其约束为二次泛函,这类的问题称为线性二次问题。此类问题的解即为线性二次调节器(Linear–Quadratic Regulator),简称LQR。最近有关于图神经网络在分布式线性二次控制的研究,将线性二次问题转换为自监督学习问题,能够找到基于图神经网络的最佳分布式控制器,他们还推导出了所得闭环系统稳定的充分条件。
|
||||
|
||||
#### 模型预测控制
|
||||
|
||||
模型预测控制(MPC)是一种先进的过程控制方法,用于在满足一组约束条件的同时控制过程。MPC 的主要优势在于它允许优化当前时刻的同时考虑未来时刻。因此与线性二次调节器不同。MPC 还具有预测未来事件的能力,并可以相应地采取控制措施。最近有研究将最优控制和机器学习相结合并应用在陌生环境中的视觉导航任务:比如基于学习的感知模块产生一系列航路点通过无碰撞路径引导机器人到达目标,基于模型的规划器使用这些航路点来生成平滑且动态可行的轨迹,然后使用反馈控制在物理系统上执行。实验表明,与纯粹基于几何映射或基于端到端学习的方案相比,这种新的系统可以更可靠、更有效地到达目标位置。
|
||||
|
||||
#### 控制系统的稳定性分析
|
||||
|
||||
因为安全对机器人应用是至关重要的,有的强化学习方法通过学习动力学的不确定性来提高安全性,鼓励安全、稳健、以及可以正式认证所学控制策略的方法,如 :numref:`safe\_learning\_control`展示了安全学习控制(Safe Learning Control)系统的框架图。Lyapunov 函数是评估非线性动力系统稳定性的有效工具,最近有人提出Neural Lyapunov来将安全性纳入考虑。
|
||||
|
||||

|
||||
|
||||
:width:`800px`
|
||||
|
||||
:label:`safe\_learning\_control`
|
||||
|
||||
### 在机器人项目中安全的应用机器学习
|
||||
|
||||
机器人和机器学习都是有广阔前景和令人兴奋的前沿领域,而当它们结合在一起后,会变得更加迷人,并且有远大于1+1>2的效果。 因此,当我们在机器人项目中应用机器学习时,我们很容易过于兴奋,尝试着用机器学习去做很多之前只能幻想的成果。 然而,在机器人中应用机器学习和直接使用机器学习有着很多不同。 其中很重要的一点不同就是,一般的机器学习系统更多的是在虚拟世界中造成直接影响,而机器人中的机器学习系统很容易通过机器人对物理世界造成直接影响。 因此,**当我们在机器人项目中应用机器学习时,我们必须时刻关注系统的安全性**,保证无论是在产品开发时还是在产品上市后的使用期,开发者和用户的安全性都能得到可靠的保证。 而且不仅商业项目要考虑安全性,开发个人项目是也需要确保安全性。 没有人想因为安全性上的疏忽而对自己或朋友/同事造成无法挽回的遗憾。
|
||||
|
||||
以上这些并不是危言耸听,让我们设想以下这些情况:
|
||||
假设你正在为你们公司开发一个物流仓库内使用的移动货运机器人,它被设计为和工人在同一工作环境内运行,以便在需要时及时帮工人搬运货物至目的地。 这个机器人有一个视觉的行人识别系统,以便识别前方是否有人。 当机器人在前进的过程中遇到障碍物的话,这个行人识别系统会参与决定机器人的行为。 如果有人的话,机器人会选择绕大弯来避开行进道路上的行人障碍物;而如果没人的话,机器人可以绕小弯来避障。 可是,如果某次这个行人识别系统检测失误,系统没有检测到前方的障碍物是一个正在梯子上整理货物的工人,所以选择小弯避障。 而当机器人靠近时,工人才突然发现有个机器人正在靠近他,并因此受到惊吓跌落至机器人行进的正前方。如果我们考虑到物流仓库的货运机器人自重加载重一般至少是几百公斤,我们就知道万一真的因此发生碰撞,后果是不堪设想。 如果真的发生这种情况,这个机器人产品的商业前景会毁于一旦,公司和负责人也会被追究相应责任(甚至法律意义上的责任)。更重要的是,对受害者所造成的伤害和自己心里的内疚会对双方的一生都造成严重的影响。
|
||||
|
||||
不仅是商业项目,假设你正在开发一个小型娱乐机械臂来尝试帮你完成桌面上的一些小任务,例如移动茶杯或打开关闭开关。 你的这个机械臂也依赖于一个物体识别系统来识别任务目标。 某次在移动茶杯时,机械臂没有识别到规划路线中有一个接线板,因此茶杯不小心摔倒并且水泼到接线板里引起短路。 幸运的话可能只需要换一个接线板,而不幸的时候甚至可能会引起火灾或电击。 我相信,没有人会想遇到这类突发事件。
|
||||
|
||||
因此,无论是在怎样的机器人项目中应用机器学习,我们都必须时刻关注和确保系统的安全性。
|
||||
|
||||
#### 确保安全性的办法:风险评估和独立的安全系统
|
||||
|
||||
##### 风险评估
|
||||
|
||||
为了能够确保机器人和机器学习系统的安全性,我们首先要知道可能有哪些危险。 我们可以通过风险评估(Risk Assessment)来做到这一点。
|
||||
怎样完成一份风险评估网上已经有很多文章了,我们在这里就不过多的介绍。 我们想要强调的是,对于发现的风险,我们需要尽可能的给出一个避免风险的方案(Risk Mitigation)。 更重要的时,我们需要确保这些方案的具体执行,而不仅仅是流于表面的给出方案就完事。 一份没有执行的方案等于没有方案。
|
||||
|
||||
##### 独立的安全系统
|
||||
|
||||
在了解了可能有哪些风险之后,我们可以通过设计一个独立的安全系统来规避掉风险中和机器人系统相关的那一部分。
|
||||
具体来讲,这个安全系统应该独立于机器学习系统,并且处于机器人架构的底层和拥有足够或最高等级的优先级。 实际上,这个安全系统不应该只针对机器学习系统,而是应该针对整个机器人的方方面面。 或者换句话来说,当开发机器人项目时,必须要有一个足够安全且独立的安全系统。 而针对于机器学习系统的安全性只是这个独立安全系统“足够安全”的部分体现罢了。
|
||||
还是以之前的那个物流仓库移动货运机器人为例。 如果机器人的轮子是有独立安全回路并且断电自动刹车的轮子,而机器人又有一个严格符合安全标准且也有安全回路的激光雷达来检测障碍物,同时这个激光雷达的安全回路直接连接至轮子的安全回路。 这样一来,不管机器人是否检测到前方有人或突然有一个人闯入机器人行进路线,激光雷达都会检测到有异物,直接通过独立的安全回路将轮子断电并刹车,以确保不会发生碰撞。 这样一个配置完全独立于任何控制逻辑,从而不受任何上层系统的影响。 **而对于开发者来说,当我们有了一个可靠独立的安全系统,我们也可以放心的去使用最新的突破性技术,而不用担心新技术是否会造成不可预期的后果。**
|
||||
|
||||
#### 机器学习系统的伦理问题
|
||||
|
||||
除了上述讨论到的最根本的安全性问题,机器学习系统的伦理问题也会对机器人的使用造成影响。
|
||||
|
||||
例如训练数据集中人种类型不平衡这一类经典的伦理问题。 让我们还是以之前的那个物流仓库移动货运机器人为例。 如果我们的训练数据集只有亚洲人的图片,那么当我们想要开拓海外市场时,我们的海外用户很有可能会发现我们的机器人并不能很好的识别他们的工人。 虽然独立的安全系统可以避免事故的发生,但是急停在工人面前肯定不是一个很好的用户体验。 我们机器人的海外销量也会受到影响。
|
||||
|
||||
机器学习系统的伦理问题是目前比较火热的一个讨论领域。作为行业相关人员,我们需要了解这个方向上的最新进展。一方面是在系统设计的初期就把这些问题考虑进去,另一方面也是希望我们的成果能够给更多人带来幸福,而不是带去困扰。
|
||||
|
||||
|
||||
|
||||
@@ -1,70 +1,31 @@
|
||||
## 在机器人项目中安全的应用机器学习
|
||||
|
||||
机器人和机器学习都是有广阔前景和令人兴奋的前沿领域,而当它们结合在一起后,会变得更加迷人,并且有远大于1+1>2的效果。
|
||||
因此,当我们在机器人项目中应用机器学习时,我们很容易过于兴奋,尝试着用机器学习去做很多之前只能幻想的成果。
|
||||
然而,在机器人中应用机器学习和直接使用机器学习有着很多不同。
|
||||
其中很重要的一点不同就是,一般的机器学习系统更多的是在虚拟世界中造成直接影响,而机器人中的机器学习系统很容易通过机器人对物理世界造成直接影响。
|
||||
因此,**当我们在机器人项目中应用机器学习时,我们必须时刻关注系统的安全性**,保证无论是在产品开发时还是在产品上市后的使用期,开发者和用户的安全性都能得到可靠的保证。
|
||||
而且不仅商业项目要考虑安全性,开发个人项目是也需要确保安全性。
|
||||
没有人想因为安全性上的疏忽而对自己或朋友/同事造成无法挽回的遗憾。
|
||||
机器人和机器学习都是有广阔前景和令人兴奋的前沿领域,而当它们结合在一起后,会变得更加迷人,并且有远大于1+1>2的效果。 因此,当我们在机器人项目中应用机器学习时,我们很容易过于兴奋,尝试着用机器学习去做很多之前只能幻想的成果。 然而,在机器人中应用机器学习和直接使用机器学习有着很多不同。 其中很重要的一点不同就是,一般的机器学习系统更多的是在虚拟世界中造成直接影响,而机器人中的机器学习系统很容易通过机器人对物理世界造成直接影响。 因此,**当我们在机器人项目中应用机器学习时,我们必须时刻关注系统的安全性**,保证无论是在产品开发时还是在产品上市后的使用期,开发者和用户的安全性都能得到可靠的保证。 而且不仅商业项目要考虑安全性,开发个人项目是也需要确保安全性。 没有人想因为安全性上的疏忽而对自己或朋友/同事造成无法挽回的遗憾。
|
||||
|
||||
以上这些并不是危言耸听,让我们设想以下这些情况。
|
||||
以上这些并不是危言耸听,让我们设想以下这些情况:
|
||||
假设你正在为你们公司开发一个物流仓库内使用的移动货运机器人,它被设计为和工人在同一工作环境内运行,以便在需要时及时帮工人搬运货物至目的地。 这个机器人有一个视觉的行人识别系统,以便识别前方是否有人。 当机器人在前进的过程中遇到障碍物的话,这个行人识别系统会参与决定机器人的行为。 如果有人的话,机器人会选择绕大弯来避开行进道路上的行人障碍物;而如果没人的话,机器人可以绕小弯来避障。 可是,如果某次这个行人识别系统检测失误,系统没有检测到前方的障碍物是一个正在梯子上整理货物的工人,所以选择小弯避障。 而当机器人靠近时,工人才突然发现有个机器人正在靠近他,并因此受到惊吓跌落至机器人行进的正前方。如果我们考虑到物流仓库的货运机器人自重加载重一般至少是几百公斤,我们就知道万一真的因此发生碰撞,后果是不堪设想。 如果真的发生这种情况,这个机器人产品的商业前景会毁于一旦,公司和负责人也会被追究相应责任(甚至法律意义上的责任)。更重要的是,对受害者所造成的伤害和自己心里的内疚会对双方的一生都造成严重的影响。
|
||||
|
||||
假设你正在为你们公司开发一个物流仓库内使用的移动货运机器人,它被设计为和工人在同一工作环境内运行,以便在需要时及时帮工人搬运货物至目的地。
|
||||
这个机器人有一个视觉的行人识别系统,以便识别前方是否有人。
|
||||
当机器人在前进的过程中遇到障碍物的话,这个行人识别系统会参与决定机器人的行为。
|
||||
如果有人的话,机器人会选择绕大弯来避开行进道路上的行人障碍物;而如果没人的话,机器人可以绕小弯来避障。
|
||||
可是,如果某次这个行人识别系统检测失误,系统没有检测到前方的障碍物是一个正在梯子上整理货物的工人,所以选择小弯避障。
|
||||
而当机器人靠近时,工人才突然发现有个机器人正在靠近他,并因此受到惊吓跌落至机器人行进的正前方。如果我们考虑到物流仓库的货运机器人自重加载重一般至少是几百公斤,我们就知道万一真的因此发生碰撞,后果是不堪设想。
|
||||
如果真的发生这种情况,这个机器人产品的商业前景会毁于一旦,公司和负责人也会被追究相应责任(甚至法律意义上的责任)。更重要的是,对受害者所造成的伤害和自己心里的内疚会对双方的一生都造成严重的影响。
|
||||
|
||||
不仅是商业项目,假设你正在开发一个小型娱乐机械臂来尝试帮你完成桌面上的一些小任务,例如移动茶杯或打开关闭开关。
|
||||
你的这个机械臂也依赖于一个物体识别系统来识别任务目标。
|
||||
某次在移动茶杯时,机械臂没有识别到规划路线中有一个接线板,因此茶杯不小心摔倒并且水泼到接线板里引起短路。
|
||||
幸运的话可能只需要换一个接线板,而不幸的时候甚至可能会引起火灾或电击。
|
||||
我相信,没有人会想遇到这类突发事件。
|
||||
不仅是商业项目,假设你正在开发一个小型娱乐机械臂来尝试帮你完成桌面上的一些小任务,例如移动茶杯或打开关闭开关。 你的这个机械臂也依赖于一个物体识别系统来识别任务目标。 某次在移动茶杯时,机械臂没有识别到规划路线中有一个接线板,因此茶杯不小心摔倒并且水泼到接线板里引起短路。 幸运的话可能只需要换一个接线板,而不幸的时候甚至可能会引起火灾或电击。 我相信,没有人会想遇到这类突发事件。
|
||||
|
||||
因此,无论是在怎样的机器人项目中应用机器学习,我们都必须时刻关注和确保系统的安全性。
|
||||
|
||||
### 确保安全性的办法:谨慎的风险评估和独立的安全系统
|
||||
### 确保安全性的办法:风险评估和独立的安全系统
|
||||
|
||||
#### 谨慎的风险评估
|
||||
#### 风险评估
|
||||
|
||||
为了能够确保机器人和机器学习系统的安全性,我们首先要知道可能有哪些危险。
|
||||
我们可以通过风险评估(risk assessment)来做到这一点。
|
||||
|
||||
怎样完成一份风险评估网上已经有很多文章了,我们在这里就不过多的介绍。
|
||||
我们想要强调的是,对于发现的风险,我们需要尽可能的给出一个避免风险的方案(risk mitigation)。
|
||||
更重要的时,我们需要确保这些方案的具体执行,而不仅仅是流于表面的给出方案就完事。
|
||||
一份没有执行的方案等于没有方案。
|
||||
为了能够确保机器人和机器学习系统的安全性,我们首先要知道可能有哪些危险。 我们可以通过风险评估(Risk Assessment)来做到这一点。
|
||||
怎样完成一份风险评估网上已经有很多文章了,我们在这里就不过多的介绍。 我们想要强调的是,对于发现的风险,我们需要尽可能的给出一个避免风险的方案(Risk Mitigation)。 更重要的时,我们需要确保这些方案的具体执行,而不仅仅是流于表面的给出方案就完事。 一份没有执行的方案等于没有方案。
|
||||
|
||||
#### 独立的安全系统
|
||||
|
||||
在了解了可能有哪些风险之后,我们可以通过设计一个独立的安全系统来规避掉风险中和机器人系统相关的那一部分。
|
||||
|
||||
具体来讲,这个安全系统应该独立于机器学习系统,并且处于机器人架构的底层和拥有足够或最高等级的优先级。
|
||||
实际上,这个安全系统不应该只针对机器学习系统,而是应该针对整个机器人的方方面面。
|
||||
或者换句话来说,当开发机器人项目时,必须要有一个足够安全且独立的安全系统。
|
||||
而针对于机器学习系统的安全性只是这个独立安全系统“足够安全”的部分体现罢了。
|
||||
|
||||
还是以之前的那个物流仓库移动货运机器人为例。
|
||||
如果机器人的轮子是有独立安全回路并且断电自动刹车的轮子,而机器人又有一个严格符合安全标准且也有安全回路的激光雷达来检测障碍物,同时这个激光雷达的安全回路直接连接至轮子的安全回路。
|
||||
这样一来,不管机器人是否检测到前方有人或突然有一个人闯入机器人行进路线,激光雷达都会检测到有异物,直接通过独立的安全回路将轮子断电并刹车,以确保不会发生碰撞。
|
||||
这样一个配置完全独立于任何控制逻辑,从而不受任何上层系统的影响。
|
||||
**而对于开发者来说,当我们有了一个可靠独立的安全系统,我们也可以放心的去使用最新的突破性技术,而不用担心新技术是否会造成不可预期的后果。**
|
||||
具体来讲,这个安全系统应该独立于机器学习系统,并且处于机器人架构的底层和拥有足够或最高等级的优先级。 实际上,这个安全系统不应该只针对机器学习系统,而是应该针对整个机器人的方方面面。 或者换句话来说,当开发机器人项目时,必须要有一个足够安全且独立的安全系统。 而针对于机器学习系统的安全性只是这个独立安全系统“足够安全”的部分体现罢了。
|
||||
还是以之前的那个物流仓库移动货运机器人为例。 如果机器人的轮子是有独立安全回路并且断电自动刹车的轮子,而机器人又有一个严格符合安全标准且也有安全回路的激光雷达来检测障碍物,同时这个激光雷达的安全回路直接连接至轮子的安全回路。 这样一来,不管机器人是否检测到前方有人或突然有一个人闯入机器人行进路线,激光雷达都会检测到有异物,直接通过独立的安全回路将轮子断电并刹车,以确保不会发生碰撞。 这样一个配置完全独立于任何控制逻辑,从而不受任何上层系统的影响。 **而对于开发者来说,当我们有了一个可靠独立的安全系统,我们也可以放心的去使用最新的突破性技术,而不用担心新技术是否会造成不可预期的后果。**
|
||||
|
||||
### 机器学习系统的伦理问题
|
||||
|
||||
除了上述讨论到的最根本的安全性问题,机器学习系统的伦理问题也会对机器人的使用造成影响。
|
||||
|
||||
例如训练数据集中人种类型不平衡这一类经典的伦理问题。
|
||||
让我们还是以之前的那个物流仓库移动货运机器人为例。
|
||||
如果我们的训练数据集只有亚洲人的图片,那么当我们想要开拓海外市场时,我们的海外用户很有可能会发现我们的机器人并不能很好的识别他们的工人。
|
||||
虽然独立的安全系统可以避免事故的发生,但是急停在工人面前肯定不是一个很好的用户体验。
|
||||
我们机器人的海外销量也会受到影响。
|
||||
例如训练数据集中人种类型不平衡这一类经典的伦理问题。 让我们还是以之前的那个物流仓库移动货运机器人为例。 如果我们的训练数据集只有亚洲人的图片,那么当我们想要开拓海外市场时,我们的海外用户很有可能会发现我们的机器人并不能很好的识别他们的工人。 虽然独立的安全系统可以避免事故的发生,但是急停在工人面前肯定不是一个很好的用户体验。 我们机器人的海外销量也会受到影响。
|
||||
|
||||
机器学习系统的伦理问题是目前比较火热的一个讨论领域。作为行业相关人员,我们需要了解这个方向上的最新进展。一方面是在系统设计的初期就把这些问题考虑进去,另一方面也是希望我们的成果能够给更多人带来幸福,而不是带去困扰。
|
||||
|
||||
### 小结
|
||||
|
||||
在这一章节中,我们稍微讨论了下怎样在机器人项目中安全的应用机器学习。我们确认了执行一份谨慎的风险检测和设计一个独立的安全系统是一个不错的办法。最后我们也稍微探讨了下机器学习系统的伦理问题。希望大家都能安全的在机器人项目中运用最新的机器学习技术!
|
||||
机器学习系统的伦理问题是目前比较火热的一个讨论领域。作为行业相关人员,我们需要了解这个方向上的最新进展。一方面是在系统设计的初期就把这些问题考虑进去,另一方面也是希望我们的成果能够给更多人带来幸福,而不是带去困扰。
|
||||
@@ -6,80 +6,39 @@
|
||||
|
||||
:label:`ROS2\_arch`
|
||||
|
||||
机器人操作系统(ROS)起源于斯坦福大学人工智能实验室的一个机器人项目。它是一个自由、开源的框架,提供接口、工具来构建先进的机器人。由于机器人领域的快速发展和复杂化,代码复用和模块化的需求日益强烈,ROS适用于机器人这种多节点多任务的复杂场景。目前也有一些机器人、无人机甚至无人车都开始采用ROS作为开发平台。在机器人学习方面,ROS/ROS2可以与深度学习结合,有开发人员为ROS/ROS2开发了的深度学习节点,并支持NVIDIA
|
||||
Jetson和TensorRT。NVIDIA
|
||||
Jetson是NVIDIA为自主机器开发的一个嵌入式系统,包括CPU、GPU、PMIC、DRAM
|
||||
和闪存的一个模组化系统,可以将自主机器软件运作系统运行速率提升。TensorRT
|
||||
是由 Nvidia 发布的机器学习框架,用于在其硬件上运行机器学习推理。
|
||||
在这一章节中,我们来大致了解一下机器人操作系统(ROS)。机器人操作系统(ROS)起源于斯坦福大学人工智能实验室的一个机器人项目。它是一个自由、开源的框架,提供接口、工具来构建先进的机器人。由于机器人领域的快速发展和复杂化,代码复用和模块化的需求日益强烈,ROS适用于机器人这种多节点多任务的复杂场景。目前也有一些机器人、无人机甚至无人车都开始采用ROS作为开发平台。在机器人学习方面,ROS/ROS2可以与深度学习结合,有开发人员为ROS/ROS2开发了的深度学习节点,并支持NVIDIA Jetson和TensorRT。NVIDIA Jetson是NVIDIA为自主机器开发的一个嵌入式系统,包括CPU、GPU、PMIC、DRAM 和闪存的一个模组化系统,可以将自主机器软件运作系统运行速率提升。TensorRT 是由 Nvidia 发布的机器学习框架,用于在其硬件上运行机器学习推理。
|
||||
|
||||
作为一个适用于机器人编程的框架,ROS把原本松散的零部件耦合在了一起,为他们提供了通信架构。虽然叫做"操作系统",ROS更像是一个中间件,给各种基于ROS的应用程序建立起了沟通的桥梁,通过这个中间件,机器人的感知、决策、控制算法可以组织和运行。ROS采用了分布式的设计思想,支持C++、Pyhton等多种编程语言,方便移植。对ROS来讲,最小的进程单元是节点,由节点管理器来管理。参数配置存储在参数服务器中。ROS的通信方式包含:主题(Topic)、服务(Service)、参数服务器(Parameter
|
||||
Server)、动作库(ActionLib)这四种。
|
||||
作为一个适用于机器人编程的框架,ROS把原本松散的零部件耦合在了一起,为他们提供了通信架构。虽然叫做``操作系统”,ROS更像是一个中间件,给各种基于ROS的应用程序建立起了沟通的桥梁,通过这个中间件,机器人的感知、决策、控制算法可以组织和运行。ROS采用了分布式的设计思想,支持C++、Pyhton等多种编程语言,方便移植。对ROS来讲,最小的进程单元是节点,由节点管理器来管理。参数配置存储在参数服务器中。ROS的通信方式包含:主题(Topic)、服务(Service)、参数服务器(Parameter Server)、动作库(ActionLib)这四种。
|
||||
|
||||
ROS提供了很多内置工具,比如三维可视化器rviz,用于可视化机器人、它们工作的环境和传感器数据。它是一个高度可配置的工具,具有许多不同类型的可视化和插件。catkin是ROS
|
||||
构建系统(类似于Linux下的CMake),Catkin
|
||||
Workspace是创建、修改、编译catkin软件包的目录。roslaunch可用于在本地和远程启动多个ROS
|
||||
节点以及在ROS参数服务器上设置参数的工具。此外还有机器人仿真工具Gazebo和移动操作软件和规划框架MoveIt!。ROS为机器人开发者提供了不同编程语言的接口,比如C++语言ROS接口roscpp,python语言的ROS接口rospy。ROS中提供了许多机器人的统一机器人描述格式URDF(Unified
|
||||
Robot Description
|
||||
Format)文件,URDF使用XML格式描述机器人文件。ROS也有一些需要提高的地方,比如它的通信实时性能有限,与工业级要求的系统稳定性还有一定差距。
|
||||
ROS提供了很多内置工具,比如三维可视化器rviz,用于可视化机器人、它们工作的环境和传感器数据。它是一个高度可配置的工具,具有许多不同类型的可视化和插件。catkin是ROS 构建系统(类似于Linux下的CMake),Catkin Workspace是创建、修改、编译Catkin软件包的目录。roslaunch可用于在本地和远程启动多个ROS 节点以及在ROS参数服务器上设置参数的工具。此外还有机器人仿真工具Gazebo和移动操作软件和规划框架MoveIt!。ROS为机器人开发者提供了不同编程语言的接口,比如C++语言ROS接口roscpp,python语言的ROS接口rospy。ROS中提供了许多机器人的统一机器人描述格式URDF(Unified Robot Description Format)文件,URDF使用XML格式描述机器人文件。ROS也有一些需要提高的地方,比如它的通信实时性能有限,与工业级要求的系统稳定性还有一定差距。
|
||||
|
||||
ROS2项目在ROSCon 2014上被宣布,第一个ROS2发行版
|
||||
Ardent Apalone
|
||||
是于2017年发布。ROS2增加了对多机器人系统的支持,提高了多机器人之间通信的网络性能,而且支持微控制器和跨系统平台,不仅可以运行在现有的X86和ARM系统上,还将支持MCU等嵌入式微控制器,不止能运行在Linux系统之上,还增加了对Windows、MacOS、RTOS等系统的支持。更重要的是,ROS
|
||||
2还加入了实时控制的支持,可以提高控制的时效性和整体机器人的性能。ROS
|
||||
2的通信系统基于DDS(Data Distribution
|
||||
Service),即数据分发服务,如 :numref:`ROS2\_arch`所示。
|
||||
ROS2项目在ROSCon 2014上被宣布,第一个ROS2发行版 Ardent Apalone 于2017年发布。ROS2增加了对多机器人系统的支持,提高了多机器人之间通信的网络性能,而且支持微控制器和跨系统平台,不仅可以运行在现有的X86和ARM系统上,还将支持MCU等嵌入式微控制器,不止能运行在Linux系统之上,还增加了对Windows、MacOS、RTOS等系统的支持。更重要的是,ROS2还加入了实时控制的支持,可以提高控制的时效性和整体机器人的性能。ROS2的通信系统基于DDS(Data Distribution Service),即数据分发服务,如 :numref:`ROS2\_arch`所示。
|
||||
|
||||
ROS2依赖于使用shell环境组合工作区。"工作区"(Workspace)是一个ROS术语,表示使用ROS2进行开发的系统位置。核心ROS2
|
||||
工作区称为Underlay。随后的工作区称为Overlays。使用ROS2
|
||||
进行开发时,通常会同时有多个工作区处于活动状态。
|
||||
ROS2依赖于使用shell环境组合工作区。“工作区”(Workspace)是一个ROS术语,表示使用ROS2进行开发的系统位置。核心ROS2 工作区称为Underlay。随后的工作区称为Overlays。使用ROS2进行开发时,通常会同时有多个工作区处于活动状态。接下来我们详细介绍一下ROS2的核心概念。这一部分我们参考了文献 [^1]。
|
||||
|
||||
#### ROS还是ROS2
|
||||
### ROS2节点
|
||||
|
||||
简单来说,除非你的项目已经搭建于ROS之上,或者你需要使用某个只在ROS框架下存在的功能库,否则大多数情况下都应该直接选择ROS2。
|
||||
ROS Graph是一个由ROS2元素组成的网络,在同一时间一起处理数据。它包括所有的可执行文件和它们之间的联系。ROS2 中的每个节点都应负责一个单一的模块用途(例如,一个节点用于控制车轮马达,一个节点用于控制激光测距仪等)。每个节点都可以通过主题、服务、动作或参数向其他节点发送和接收数据。一个完整的机器人系统由许多协同工作的节点组成。如 :numref:`ros2\_graph`。在ROS2中,单个可执行文件(C++程序、Python 程序等)可以包含一个或多个节点。
|
||||
|
||||
ROS是一个很好的框架。它有着成熟活跃的社区,种类繁多的功能库,同时也有十分成熟的商业项目(例如Mobile Industrial Robots公司的MiR robot)。
|
||||
但是,ROS也有很多缺陷,例如工业项目中ROS的稳定性一直是个问题,必须进行额外的系统设计来增强到能够接受的程度。
|
||||
这也是为什么ROS2会对框架的很多部分都进行重新设计的原因,因此ROS2也能更好的支持工业机器人项目。
|
||||
除此之外,ROS的社区也在积极拥抱ROS2。官方和社区都提供了详细的教程来帮助开发者将ROS的库迁移到ROS2的框架内。
|
||||
同时,官方也宣布了ROS Noetic Ninjemys是最后一版ROS,并且预计于2025年五月停止官方支持(End of Life date)。
|
||||
|
||||
本书将跟随官方的建议,使用ROS2作为讲解的框架。接下来我们详细介绍一下ROS2的核心概念(这一部分我们参考了文献 [^1])。
|
||||
|
||||
### ROS2 Nodes
|
||||
|
||||
ROS
|
||||
Graph是一个由ROS2元素组成的网络,在同一时间一起处理数据。它包括所有的可执行文件和它们之间的联系。ROS2
|
||||
中的每个节点都应负责一个单一的模块用途(例如,一个节点用于控制车轮马达,一个节点用于控制激光测距仪等)。每个节点都可以通过主题、服务、动作或参数向其他节点发送和接收数据。一个完整的机器人系统由许多协同工作的节点组成。在
|
||||
ROS 2 中,单个可执行文件(C++ 程序、Python
|
||||
程序等)可以包含一个或多个节点,如 :numref:`ros2\_graph`。
|
||||
|
||||

|
||||

|
||||
|
||||
:width:`800px`
|
||||
|
||||
:label:`ros2\_graph`
|
||||
|
||||
节点之间的互相发现是通过ROS2底层的中间件实现的。 过程总结如下
|
||||
节点之间的互相发现是通过ROS2底层的中间件实现的,过程总结如下:
|
||||
|
||||
- 当一个节点启动后, 它会向其他拥有相同ROS域名(ROS domain,
|
||||
可以通过设置ROS\_DOMAIN\_ID环境变量来设
|
||||
置)的节点进行广播,说明它已经上线。
|
||||
其他节点在收到广播后返回自己的相关信息,这样节点间的连接就可以建
|
||||
立了,之后就可以通信了。
|
||||
- 当一个节点启动后,它会向其他拥有相同ROS域名的节点进行广播,说明它已经上线。其他节点在收到广播后返回自己的相关信息,这样节点间的连接就可以建立了,之后就可以通信了。
|
||||
|
||||
- 节点会定时广播它的信息,这样即使它已经错过了最初的发现过程,它也可以和新上线的节点进行连接。
|
||||
|
||||
- 节点在下线前它也会广播其他节点自己要下线了。
|
||||
|
||||
### ROS2 Topics
|
||||
### ROS2主题
|
||||
|
||||
ROS2将复杂系统分解为许多模块化节点。主题(Topics)是 ROS
|
||||
Graph的重要元素,它充当节点交换消息的总线。一个节点可以向任意数量的主题发布数据,同时订阅任意数量的主题,如图:numref:`ros2\_topics`所示。主题是数据在节点之间以及因此在系统的不同部分之间移动的主要方式之一,例如,移动机器人的激光测距仪的相关节点可以将读数发布到lidar这个主题上,然后导航模块和安全模块的相关节点都可以订阅这个主题从而持续的获得想要的信息。
|
||||
ROS2将复杂系统分解为许多模块化节点。主题(Topics)是 ROS Graph的重要元素,它充当节点交换消息的总线。如图:numref:`ros2\_topics`所示,一个节点可以向任意数量的主题发布数据,同时订阅任意数量的主题。主题是数据在节点之间以及因此在系统的不同部分之间移动的主要方式之一。
|
||||
|
||||
rqt是ROS的一个软件框架,以插件的形式实现了各种 GUI 工具。可以在 rqt
|
||||
中将所有现有的GUI工具作为可停靠窗口运行。这些工具仍然可以以传统的独立方法运行,但rqt可以更轻松地同时管理屏幕上的所有各种窗口。
|
||||
rqt是ROS的一个软件框架,以插件的形式实现了各种 GUI 工具。可以在 rqt 中将所有现有的GUI工具作为可停靠窗口运行。这些工具仍然可以以传统的独立方法运行,但rqt可以更轻松地同时管理屏幕上的所有各种窗口。
|
||||
|
||||

|
||||
|
||||
@@ -87,13 +46,9 @@ rqt是ROS的一个软件框架,以插件的形式实现了各种 GUI 工具。
|
||||
|
||||
:label:`ros2\_topics`
|
||||
|
||||
### ROS 2 Services
|
||||
### ROS2服务
|
||||
|
||||
服务(Services)是 ROS
|
||||
图中节点的另一种通信方式。服务基于调用和响应模型,而不是主题的发布者-订阅者模型。虽然主题允许节点订阅数据流并获得持续更新,但服务仅在客户端专门调用它们时才提供数据。节点可以使用ROS2中的服务进行通信。与主题那种单向通信模式,节点发布可由一个或多个订阅者使用的信息的方式不同
|
||||
服务是客户端向节点发出请求的请求/响应模式提供服务,服务处理请求并生成响应。
|
||||
|
||||
例如,当一个服务机器人想要尝试识别一个条形码时,控制模块的相关节点(Service客户端)可以发送照相机截图到条形码识别节点(Service服务端),后者尝试识别并返回结果给控制模块。
|
||||
服务(Services)是 ROS 图中节点的另一种通信方式。服务基于调用和响应模型,而不是主题的发布者-订阅者模型。虽然主题允许节点订阅数据流并获得持续更新,但服务仅在客户端专门调用它们时才提供数据。节点可以使用ROS2中的服务进行通信。与主题那种单向通信模式中节点发布可由一个或多个订阅者使用的信息的方式不同,服务是客户端向节点发出请求的请求/响应模式提供服务,服务处理请求并生成响应,如:numref:`ros2\_services`
|
||||
|
||||

|
||||
|
||||
@@ -101,14 +56,13 @@ rqt是ROS的一个软件框架,以插件的形式实现了各种 GUI 工具。
|
||||
|
||||
:label:`ros2\_services`
|
||||
|
||||
### ROS 2 Parameters
|
||||
### ROS2参数
|
||||
|
||||
参数(Parameters)是节点的配置值。您可以将参数视为节点设置。节点可以将参数存储为整数、浮点数、布尔值、字符串和列表。在ROS2
|
||||
中,每个节点都维护自己的参数。
|
||||
参数(Parameters)是节点的配置值。您可以将参数视为节点设置。节点可以将参数存储为整数、浮点数、布尔值、字符串和列表。在ROS2 中,每个节点都维护自己的参数。
|
||||
|
||||
### ROS 2 Actions
|
||||
### ROS2动作
|
||||
|
||||
动作(Actions)是ROS2中的一种通信类型,适用于长时间运行的任务。它们由三个部分组成:目标、反馈和结果。动作建立在主题和服务之上。它们的功能类似于服务,除了可以取消动作。它们还提供稳定的反馈,而不是返回单一响应的服务。动作使用客户端-服务器模型,类似于发布者-订阅者模型(在主题教程中描述)。"动作客户端"节点将目标发送到"动作服务器"节点,该节点确认目标并返回反馈流和结果。动作类似于允许您执行长时间运行的任务、提供定期反馈并且可以取消的服务。机器人系统可能会使用动作进行导航。动作目标可以告诉机器人前往某个位置。当机器人导航到该位置时,它可以沿途发送更新(即反馈),然后在到达目的地后发送最终结果消息。
|
||||
动作(Actions)是ROS2中的一种通信类型,适用于长时间运行的任务。它们由三个部分组成:目标、反馈和结果,如:numref:`ros2\_actions`所示。动作建立在主题和服务之上。它们的功能类似于服务,除了可以取消动作。它们还提供稳定的反馈,而不是返回单一响应的服务。动作使用客户端-服务器模型,类似于发布者-订阅者模型。”动作客户端”节点将目标发送到”动作服务器”节点,该节点确认目标并返回反馈流和结果。机器人系统可能会使用动作进行导航。动作目标可以告诉机器人前往某个位置。当机器人导航到该位置时,它可以沿途发送更新(即反馈),然后在到达目的地后发送最终结果消息。
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 机器人操作系统(ROS)的入门案例
|
||||
## 案例分析:使用机器人操作系统
|
||||
|
||||
在这一章节中,我们将带领大家安装ROS2并配置好使用环境,然后再通过一些简单的代码示例来让大家更深入的了解如何使用ROS2和上一章节所介绍的概念。
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
这是因为debian安装方式会将很多ROS2的Python依赖库以`apt install`(而非`pip install`)的方式安装到Ubuntu自带的Python3路径中去。
|
||||
这也就是说,当你选定ROS2版本后,你所需的Ubuntu版本和Python版本也就随之确定了。
|
||||
|
||||
如果想要使用Python虚拟环境(virtual env)的话,也必须指定使用Ubuntu系统所带的Python解释器(interpreter),并在创建时加上`site-packages`选项。添加这个选项是因为我们需要那些安装在系统Python3路径中的ROS2的依赖库。如果读者感兴趣的话,可以阅读这篇[英文教程](https://docs.ros.org/en/foxy/How-To-Guides/Using-Python-Packages.html)来了解更多细节。
|
||||
如果想要使用Python虚拟环境(virtual env)的话,也必须指定使用Ubuntu系统所带的Python解释器(interpreter),并在创建时加上`site-packages`选项。添加这个选项是因为我们需要那些安装在系统Python3路径中的ROS2的依赖库。
|
||||
|
||||
举例来说,对于`pipenv`用户,可以通过下面这条命令来创建一个使用系统Python3并添加了`site-packages`的虚拟环境。
|
||||
|
||||
@@ -21,15 +21,11 @@ pipenv --python $(/usr/bin/python3 -V | cut -d" " -f2) --site-packages
|
||||
|
||||
在本章节以及本章后续的案例章节中,我们在合适的场合将用ROS2,Ubuntu和Python来分别指代ROS2 Foxy Fitzroy,Ubuntu Focal和Ubuntu Focal所带的Python 3.8。
|
||||
|
||||
本章节中的案例有参考ROS2的[官方教程](https://docs.ros.org/en/foxy/Tutorials.html)。这个官方教程讲解的非常详细,非常适合初学者入门ROS2。如果读者对英文有自信的话,可以尝试阅读官方教程来了解更多ROS2的细节。
|
||||
|
||||
另外,本章节的案例所使用的代码可以在本书相关的[ROS2案例代码库](https://github.com/openmlsys/openmlsys-ros2)中的`src/my_hello_world`和`src/my_interfaces`文件夹内找到。
|
||||
本章节中的案例有参考ROS2的官方教程。这个官方教程讲解的非常详细,非常适合初学者入门ROS2。
|
||||
|
||||
### 安装ROS2 Foxy Fitzroy
|
||||
|
||||
在Ubuntu上安装ROS2相对简单,绝大多数情况跟随官方教程安装即可。
|
||||
例如对于ROS2 Foxy Fitzroy和Ubuntu Focal,对自己英文水平较为自信的读者也可以跟随[这篇官方教程](https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html)。
|
||||
本章节关于ROS2的安装的部分主要也是这篇教程相关部分的转述。
|
||||
|
||||
#### 系统区域(locale)需要支持UTF-8
|
||||
|
||||
@@ -166,7 +162,7 @@ cd src
|
||||
ros2 pkg create --build-type ament_python --dependencies rclpy std_msgs --node-name hello_world_node my_hello_world
|
||||
```
|
||||
|
||||
`ros2`命令的`pkg create`子项可以帮助我们快速的创建一个ROS2程序库的框架。`build-type`参数指明了这是一个纯Python库,`dependencies`参数指明了这个库将会使用`rclpy`和`std_msgs`这两个依赖库,`node-name`参数指明了我们创建的程序库中会有一个名为hello_world_node的ROS2节点,而最后的my_hello_world则是新建程序库的名字。
|
||||
`ros2`命令的`pkg create`子项可以帮助我们快速的创建一个ROS2程序库的框架。`build-type`参数指明了这是一个纯Python库,`dependencies`参数指明了这个库将会使用`rclpy`和`std_msgs`这两个依赖库,`node-name`参数指明了我们创建的程序库中会有一个名为hello_world_node的ROS2节点,而最后的`my_hello_world`则是新建程序库的名字。
|
||||
|
||||
进入新建好的程序库文件夹`my_hello_world`,我们可以看到刚运行的命令已经帮我们建好一个Python库文件夹`my_hello_world`。其与程序库同名,且内含`__init__.py`文件和`hello_world_node.py`文件。后者的存在是由于我们使用了`node_name`参数的原因。我们将在这个Python库文件夹内编写我们的Python代码。
|
||||
|
||||
@@ -228,7 +224,7 @@ class HelloWorldNode(Node):
|
||||
|
||||
在`timer_callback()`方法中,我们简单的创建一条带计数器的Hello World信息,并通过信息发布者发送出去。然后我们在日志中记录这次操作并将计数器加一。
|
||||
|
||||
定义好我们的Hello World节点类后,我们可以开始定义`main()`函数。这个函数就是我们之前在`setup.py`中看到的那个entry point。
|
||||
定义好我们的HelloWorldNode类后,我们可以开始定义`main()`函数。这个函数就是我们之前在`setup.py`中看到的那个entry point。
|
||||
|
||||
```python
|
||||
def main(args=None):
|
||||
@@ -338,7 +334,7 @@ if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
|
||||
这个新添加的文件以及其中的消息订阅者节点类和上面的HelloWorld节点类十分相似,甚至更为简单些。我们只需要在初始化时通过基类初始化方法赋予节点`my_hello_world_subscriber`这个名字,然后创建一个消息订阅者来订阅`hello_world_topic`主题下的消息,并指定`subscriber_callback()`方法来处理接收到的消息。而在`subscriber_callback()`中,我们将接收到的消息记录进日志。`main()`方法则和HelloWorld节点类的基本一样。
|
||||
这个新添加的文件以及其中的消息订阅者节点类和上面的HelloWorldNode类十分相似,甚至更为简单些。我们只需要在初始化时通过基类初始化方法赋予节点`my_hello_world_subscriber`这个名字,然后创建一个消息订阅者来订阅`hello_world_topic`主题下的消息,并指定`subscriber_callback()`方法来处理接收到的消息。而在`subscriber_callback()`中,我们将接收到的消息记录进日志。`main()`方法则和HelloWorld节点类的基本一样。
|
||||
|
||||
在能正式使用这个新节点之前,我们需要将其添加成为一个entry point。为此,我们只需在`setup.py`的对应位置添加下面这行:
|
||||
|
||||
@@ -443,7 +439,7 @@ ros2 param set /parametrised_hello_world_node name "ROS2"
|
||||
|
||||
恭喜!你现在掌握了如何让ROS2节点(和其它类型的ROS2程序)使用参数的方法。
|
||||
|
||||
### ROS2服务
|
||||
### 服务端-客户端服务模式
|
||||
|
||||
在上一章节中我们知道了ROS2框架除了发布者-订阅者这种通信模式,还有服务端-客户端这种模式。
|
||||
在这一小节中,我们将通过一个简单的串联两个字符串的服务来演示如何使用这种模式。
|
||||
@@ -531,7 +527,7 @@ colcon build --packages-select my_interfaces
|
||||
|
||||
我们可以通过在新的终端窗口运行`ros2 interface show my_interfaces/srv/ConcatTwoStr`来验证是否已经编译成功了。成功的话终端会显示自定义服务接口`ConcatTwoStr`的具体定义。
|
||||
|
||||
现在,我们定义好了需要使用的服务接口,下面可以开始编写我们的服务段和客户端了。
|
||||
现在,我们定义好了需要使用的服务接口,下面可以开始编写我们的服务端和客户端了。
|
||||
|
||||
#### ROS2服务端
|
||||
|
||||
@@ -643,8 +639,6 @@ if __name__ == '__main__':
|
||||
'concat_two_str_client_async = my_hello_world.concat_two_str_client_async:main'
|
||||
```
|
||||
|
||||
#### 确认正常运行
|
||||
|
||||
我们现在编写好了我们的服务端和客户端,让我们在工作区根目录下重新编译一边`my_hello_world`库。
|
||||
|
||||
```shell
|
||||
@@ -680,7 +674,7 @@ str2: World
|
||||
|
||||
恭喜!您现在已经了解如何在ROS2框架中新建自定义的接口类型和创建服务端节点和客户端节点了!
|
||||
|
||||
### ROS2动作
|
||||
### 动作模式
|
||||
|
||||
在上一章节中我们了解了ROS2框架内的服务端-客户端模式。这样一来,我们只剩下动作(action)这一种模式了。
|
||||
在这一小节中,我们将通过一个简单的逐个累加一个数列的每项元素来求和的动作来演示如何使用这种模式。
|
||||
@@ -854,9 +848,7 @@ if __name__ == '__main__':
|
||||
'my_sum_action_client = my_hello_world.my_sum_action_client:main'
|
||||
```
|
||||
|
||||
#### 确认正常运行
|
||||
|
||||
我们现在编写好了我们的动作服务器和动作客户端,让我们在工作区根目录下重新编译一边`my_hello_world`库。
|
||||
我们现在编写好了我们的动作服务器和动作客户端,让我们在工作区根目录下重新编译一遍`my_hello_world`库。
|
||||
|
||||
```shell
|
||||
cd openmlsys-ros2
|
||||
@@ -895,7 +887,3 @@ ros2 run my_hello_world my_sum_action_server
|
||||
```
|
||||
|
||||
恭喜!您现在已经了解如何在ROS2框架中新建自定义的接口类型和创建动作服务端节点和动作客户端节点了!
|
||||
|
||||
### 小结
|
||||
|
||||
在本章节中,我们了解了怎样安装ROS2和在Python虚拟环境中进行ROS2项目的开发。然后我们通过一些案例来更加深入的了解了ROS2的一些核心概念,即节点,主题,参数,服务,和动作。
|
||||
@@ -1,6 +1,6 @@
|
||||
## 小结
|
||||
### 总结
|
||||
|
||||
在这一章,我们简单介绍了机器人系统的基本概念,包括通用机器人操作系统、感知系统、规划系统和控制系统等,给读者对机器人问题的基本认识。当前,机器人许多实际问题都有可能通过算法的进一步发展得到解决。另一方面,由于机器人问题设置的特殊性,也使得相应系统与相关硬件的耦合程度更高、更复杂:如何更好地平衡各种传感器负载?如何在计算资源有限的情况下最大化计算效率(实时性)?等等,都需要对计算机系统的设计和使用有更好的理解。
|
||||
在这一章,我们简单介绍了机器人系统的基本概念,包括通用机器人操作系统、感知系统、规划系统和控制系统等,给读者对机器人问题的基本认识。对通用机器人操作系统部分,我们回顾了其中的基本概念,并通过代码实例让读者对ROS能有直接的体验,体会到搭建一个简单机器人系统的乐趣。当前,机器人是一个快速发展的人工智能分支,许多实际问题都需要通过机器人算法和系统设计的进一步发展得到解决。
|
||||
|
||||
## 参考文献
|
||||
|
||||
|
||||
26
mlsys.bib
26
mlsys.bib
@@ -1281,3 +1281,29 @@ series = {EuroSys '22}
|
||||
journal={arXiv preprint},
|
||||
year={2022}
|
||||
}
|
||||
|
||||
@ARTICLE{9813561, author={Qiu, Jianing and Chen, Lipeng and Gu, Xiao and Lo, Frank P.-W. and Tsai, Ya-Yen and Sun, Jiankai and Liu, Jiaqi and Lo, Benny}, journal={IEEE Robotics and Automation Letters}, title={Egocentric Human Trajectory Forecasting with a Wearable Camera and Multi-Modal Fusion}, year={2022}, volume={}, number={}, pages={1-8}, doi={10.1109/LRA.2022.3188101}}
|
||||
|
||||
@article{MegBA,
|
||||
title={MegBA: A High-Performance and Distributed Library for Large-Scale Bundle Adjustment},
|
||||
author={Ren, Jie and Liang, Wenteng and Yan, Ran and Mai, Luo and Liu, Shiwen and Liu, Xiao},
|
||||
journal={European Conference on Computer Vision},
|
||||
year={2022}
|
||||
}
|
||||
|
||||
@inproceedings{li2023behavior,
|
||||
title={Behavior-1k: A benchmark for embodied ai with 1,000 everyday activities and realistic simulation},
|
||||
author={Li, Chengshu and Zhang, Ruohan and Wong, Josiah and Gokmen, Cem and Srivastava, Sanjana and Mart{\'\i}n-Mart{\'\i}n, Roberto and Wang, Chen and Levine, Gabrael and Lingelbach, Michael and Sun, Jiankai and others},
|
||||
booktitle={Conference on Robot Learning},
|
||||
pages={80--93},
|
||||
year={2023},
|
||||
organization={PMLR}
|
||||
}
|
||||
|
||||
@article{wang2023mimicplay,
|
||||
title={MimicPlay: Long-Horizon Imitation Learning by Watching Human Play},
|
||||
author={Wang, Chen and Fan, Linxi and Sun, Jiankai and Zhang, Ruohan and Fei-Fei, Li and Xu, Danfei and Zhu, Yuke and Anandkumar, Anima},
|
||||
journal={arXiv preprint arXiv:2302.12422},
|
||||
year={2023}
|
||||
}
|
||||
|
||||
|
||||
@@ -434,3 +434,30 @@ series = {EuroSys '22}
|
||||
publisher={IEEE}
|
||||
}
|
||||
|
||||
|
||||
@ARTICLE{9813561, author={Qiu, Jianing and Chen, Lipeng and Gu, Xiao and Lo, Frank P.-W. and Tsai, Ya-Yen and Sun, Jiankai and Liu, Jiaqi and Lo, Benny}, journal={IEEE Robotics and Automation Letters}, title={Egocentric Human Trajectory Forecasting with a Wearable Camera and Multi-Modal Fusion}, year={2022}, volume={}, number={}, pages={1-8}, doi={10.1109/LRA.2022.3188101}}
|
||||
|
||||
@article{MegBA,
|
||||
title={MegBA: A High-Performance and Distributed Library for Large-Scale Bundle Adjustment},
|
||||
author={Ren, Jie and Liang, Wenteng and Yan, Ran and Mai, Luo and Liu, Shiwen and Liu, Xiao},
|
||||
journal={European Conference on Computer Vision},
|
||||
year={2022}
|
||||
}
|
||||
|
||||
@inproceedings{li2023behavior,
|
||||
title={Behavior-1k: A benchmark for embodied ai with 1,000 everyday activities and realistic simulation},
|
||||
author={Li, Chengshu and Zhang, Ruohan and Wong, Josiah and Gokmen, Cem and Srivastava, Sanjana and Mart{\'\i}n-Mart{\'\i}n, Roberto and Wang, Chen and Levine, Gabrael and Lingelbach, Michael and Sun, Jiankai and others},
|
||||
booktitle={Conference on Robot Learning},
|
||||
pages={80--93},
|
||||
year={2023},
|
||||
organization={PMLR}
|
||||
}
|
||||
|
||||
@article{wang2023mimicplay,
|
||||
title={MimicPlay: Long-Horizon Imitation Learning by Watching Human Play},
|
||||
author={Wang, Chen and Fan, Linxi and Sun, Jiankai and Zhang, Ruohan and Fei-Fei, Li and Xu, Danfei and Zhu, Yuke and Anandkumar, Anima},
|
||||
journal={arXiv preprint arXiv:2302.12422},
|
||||
year={2023}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user