DexPilot: Vision Based Teleoperation of Dexterous Robotic Hand-Arm System论文解析

DexPilot: Vision Based Teleoperation of Dexterous Robotic Hand-Arm System论文解析

论文网址:https://paperswithcode.com/paper/dexpilot-vision-based-teleoperation-of
论文出处:2020 ICRA
研发团队:Nvidia团队、CMU团队
项目网址:https://sites.google.com/view/dex-pilot

1. 概述

  • 遥操作为机器人系统传递复杂的推理能力(sophisticated reasoning skills)、直觉(intuition)、完成任务的创造力(creativity to perform tasks)提供了可能。
  • 但是,现在针对多驱动(degree-of-actuation (DoA))、多指机器人的遥操作方式是成本高的,低成本的方式往往提供的减少自由度的策略。
  • 本文提出了一种低成本、基于视觉的遥操作系统:DexPilot。可以实现对23 DoA的机器人系统的完全控制,只需要观察人的裸手。
  • 可以完成复杂的操作任务。
  • 系统的性能通过对速度可靠性指标来测量。

2. 简介

  • 机器人遥操作可应用于:搜救(search and rescue)、太空(space)、医疗(medicine)、假肢(prosthetics)、应用机器学习(applied machine learning)。
  • 遥操作的目的:让机器人系统通过人机交互界面,利用人的认知(cognition)、创造力(creativity)、反应(reactivity)来完成复杂的任务。
  • 目前针对高DoA遥操作和跟踪系统的方法,如触觉反馈(haptic feedback)、人体骨骼和手指跟踪的方法,都是费用过高的(prohibitive)。
  • 这篇论文的研究设计了一种便宜的(low-cost)、无标点的无手套的遥操作方案。虽然廉价,但是该系统能够捕捉和传递五指的灵巧操作,并驱动一个高驱动的机器人系统来完成各种各样的抓取和操作任务。
  • 系统一共用了4个Intel RealSense 深度相机2个NVIDIA GPUs
  • 尽管缺少触觉反馈,但是系统仍然能够通过人的认知实现高性能操作。
  • 实验证明人类学习利用视觉来对手的运动进行规划、控制、状态预测是先于精确的手控制的。因此,遥操作系统能够利用人类的能力仅通过视觉来进行物理操作的规划、运动、预测。
  • 论文的主要贡献
    (1)设计了一个完全基于视觉的遥操作系统,能够直接通过模仿来灵巧的驱动一个高驱动的机器人hand-arm系统。
    (2)为从人手关节到Allegro机械手关节的运动重定位设计新型的损失函数和映射策略
    (3)多种任务的遥操作示范,主要包括精细操作和灵巧性。如从钱包里拿出纸、用4个手指抓2个立方块等。
    (4)通过2位受过训练的示范者进行系统评估,发现尽管没有触觉反馈,但能实现很高的成功率。
    在这里插入图片描述

3. Related Work

视觉遥操作国内外现状:

  • 之前的视觉遥操作都是通过带上有颜色的手套或者标记有颜色的marker点来获取人手的骨骼。
  • 裸手姿态估计可以最小化外部干扰、减少物理的足迹。
  • 目前的研究很多都是单独的研究人手姿态估计,没有对控制机器人的跟踪性能的评估。
  • 目前基于数据手套或marker点的商用化产品,如CyberGlove和HaptX 通过物理阻抗和空间接触实现了触觉反馈。但是价格昂贵,且有时需要额外的手部姿态估计模块。

4. 硬件

在这里插入图片描述

  • 遥操作系统包括一个机器人系统和一个临近的操作员场地
  • 机器人系统是:KUKA LBR iiwa7 R800机械臂,Wonik Robotics Allegro机械手。
  • 整个机器人系统包括:92个触觉传感器、23个关节位置传感器、23个关节角驱动。
  • 操作台有4个Intel Realsense D415 RGB-D 相机。
  • 整个操作台体积为:80cm × 55 cm × 38 cm。

5. 结构

  • DART用于人手的跟踪。
  • 深度神经网络用于人手状态的估计和强化DART。
  • 通过DART进行人手状态的微调,并通过非线性优化转换到机械手的状态。
  • 运动生成和控制通过Riemannian Motion Policies (RMPs)和力矩级别的阻抗控制器(torque-level impedance controllers)。

整体的系统结构如下图:
在这里插入图片描述

  • 系统大概的延时为1秒

6. DART

  • DART通过将输入的点云匹配一个手的关节模型来获得连续的人手姿态和关节角跟踪
  • 人手模型包括20个转动的关节:每根手指4个关节,1个扩张关节,3个弯曲关节。

7. 通过神经网络估算手的姿态和关节角

  • 因为DART是一个依赖非线性优化的基于模型的跟踪器,所以需要在初始帧对手的姿态进行初始化估计。
  • 需要在手姿态的大数据上用神经网络训练得到初始帧的手姿态。
  • 对于手姿态训练的数据集,本文采用一个带颜色的手套来采集数据。
    在这里插入图片描述
  • 采集数据分2步:
    (1)首先操作人员佩戴手套为DART获取先验的手部姿态来粗糙的跟踪人手。使用 ResNet-50网络结合一个spatial-softmax来从RGB图像中回归出手套上的带颜色的点(只是3个手背上的点,没有指尖的点),这样可以得到整个手的3D姿态。给网络取名为:GloveNet
    手套上的3个2D的关键点分别在4个realsense相机中转化成3D位置,这些3D位置通过滤波和平滑处理来获得手部姿态。
    (2)通过4个相机深度点云图的融合获得裸手的3D点云,用PointNet++估计出手的姿态(23个骨骼点),如下图,分为2步。
    在这里插入图片描述
    再设计一个JointNet,用来从23个keypoints推导出相应的关节角。JointNet是2层全连接的网络,输入为23×3,输出为手指关节角的20维向量。
  • 方法的keypoint 平均误差为9.7mm,每个关节的平均误差为1.33°。

9. 实验

  • DexPilot 系统测试了多种(15种)物理任务,主要测试遥操作的准确性和抓取能力。
  • 15种具体的任务如下:
    在这里插入图片描述
  • 其中3种示意图如下:
    在这里插入图片描述
  • 每种任务对应的运行时间如下,由两个pilot(测试者)完成:
    在这里插入图片描述
  • 每种任务的成功率如下,由2个pilot完成。
    在这里插入图片描述
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果 `onDidReceiveNotificationResponse` 方法没有被调用,那么可能是由于以下原因之一: 1. 没有在初始化时设置 `onDidReceiveNotificationResponse` 回调。请确保在 `FlutterLocalNotificationsPlugin` 的初始化方法中设置了此回调,例如: ```dart FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); Future<void> _initNotifications() async { var initializationSettingsAndroid = AndroidInitializationSettings('app_icon'); var initializationSettingsIOS = IOSInitializationSettings(); var initializationSettings = InitializationSettings( android: initializationSettingsAndroid, iOS: initializationSettingsIOS); await flutterLocalNotificationsPlugin.initialize(initializationSettings, onSelectNotification: onSelectNotification); } Future<void> onSelectNotification(String payload) async { // 在此处处理通知点击事件 } // 设置 onDidReceiveNotificationResponse 回调方法 flutterLocalNotificationsPlugin.onDidReceiveNotificationResponse.listen((event) async { await onSelectNotification(event.payload); }); ``` 2. 在 Android 平台上,需要在 `AndroidManifest.xml` 文件中注册 `NotificationReceiver`,并将其与 `FlutterLocalNotificationsPlugin` 相关联。请确保在 `AndroidManifest.xml` 文件中添加以下代码: ```xml <application ...> <receiver android:name=&quot;com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver&quot; /> <receiver android:name=&quot;com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver&quot;> <intent-filter> <action android:name=&quot;android.intent.action.BOOT_COMPLETED&quot;></action> </intent-filter> </receiver> </application> ``` 3. 在 iOS 平台上,需要在 `AppDelegate.swift` 文件中添加以下代码: ```swift import UIKit import Flutter import UserNotifications @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate, UNUserNotificationCenterDelegate { override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // 在此处初始化 FlutterLocalNotificationsPlugin // 设置 UNUserNotificationCenterDelegate UNUserNotificationCenter.current().delegate = self return super.application(application, didFinishLaunchingWithOptions: launchOptions) } // 实现 didReceive response 方法 func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { let flutterChannel = FlutterMethodChannel(name: &quot;com.example.app/notification&quot;, binaryMessenger: self.window.rootViewController as! FlutterViewController) flutterChannel.invokeMethod(&quot;onSelectNotification&quot;, arguments: response.notification.request.content.userInfo) completionHandler() } } ``` 上述代码中,我们通过实现 `UNUserNotificationCenterDelegate` 协议的 `didReceive response` 方法来处理通知的点击事件,并且调用了 `FlutterMethodChannel` 方法来将通知的 payload 发送给 Flutter 端的 `onSelectNotification` 方法。 希望这些信息能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值