week2 灵巧手 Dexterous Hand

一、有关灵巧手的构成和控制方式

1、灵巧手的构成

  连续型灵巧手是一种采用创新设计的仿人机械手,其手指主体结构连续型机构。除了拇指之外,连续型灵巧手还配备了可连续调节刚度的机构,通过调节刚度值的大小来控制手指指尖的输出力。

2、灵巧手的dof(自由度)

首先得先知道机械臂自由度的含义。

 翻阅《连续型灵巧手操作手册有下图该灵巧手舵机对应操作参数,可以由可控制的动作部分来分析自由度 

二、灵巧手的环境配置与五种手势实现

1、上位机控制

1、在电脑主机上安装调试上位机软件,打开MR-DM02文件夹\调试上位机\Lobot Servo Control V2.1(32路通用版上位机)\ Win7及以上版本\Lobot Servo Control setup(如图6)安装。

图6

2、用数据线连接连续型灵巧手和电脑主机,打开Lobot Servo Control软件(如图7所示),按下电源开关,调试上位机路灯亮(已连接),串口通讯连接成功。

图7 

3、连续型灵巧手位置初始化,在ID0~ID10下方输入对应的初始参数值,点击右侧的“插入动作”(如图8),初始化动作建立完成。

4、拖动每个对应ID下方的滑动键,在每个ID参数范围内构造连续型灵巧手的构型(如表1),点击右侧“插入动作”(如图9),连续型灵巧手构型动作建立完成。

5、点击下方舵机指令框指令运行上述动作。

6、点击右上角对动作进行编组,点击下载,将动作组下载到舵机控制板中,采用TTL串口通信直接调用动作组。

表1 连续型灵巧手舵机对应操作参数

舵机ID

动作

初始参数

参数范围

ID:0

手掌手指侧摆

1300

1300 ~ 1500

ID:1

拇指侧摆运动

1000

1000 ~ 1500

ID:2

拇指弯曲运动

1500

1500 ~ 2000

ID:3

食指弯曲运动

2200

2200 ~ 1200

ID:4

中指弯曲运动

2200

2200 ~ 1200

ID:5

无名指弯曲运动

2200

2200 ~ 1200

ID:6

小指弯曲运动

2200

2200 ~ 1200

ID:7

食指刚度调节

2400

2500 ~ 500

ID:8

中指刚度调节

2400

2500 ~ 500

ID:9

无名指刚度调节

2400

2500 ~ 500

ID:10

小指刚度调节

2400

2500 ~ 50

 

图8

图9

注意事项:(1)舵机不能超过参数范围,(2)连续型灵巧手位置初始化时执行恢复手指初始位置,执行恢复刚度初始位置(高刚度),(3)构型操作时先定义手指刚度舵机值,在执行手指运动舵机。

 2、串口控制

1、准备工作

1.1、硬件准备

TTL转USB下载器×1,如图所示10

 

图10

1.2、软件准备

打开MR-DM02文件夹中的技术文档\串口调试\单片机多功能调试助手如图11所示。

图11

打开MR-DM02文件夹中的技术文档\串口调试\二次开发命令生成如图所12示。

图12

1.3接线方式

使用杜邦线将TTL转USB下载器和航空插头的串口TX接RX、RX接TX、GND接GND接好。

下载器插到电脑的USB接口上。

2.操作步骤

2.1编辑指令

2.1.1直接使用提供的二次开发指令编辑器直接生成。如图13所示。

图13

2.2实现步骤

2.2.1打开单片机多功能调试助手软件,如图14所示。

图14

打开软件。软件界面如图15所示。

图15

选择好对应的串口,选择波特率9600。

打开串口。

选择HEX发送。

输入指令55 55 26 03 0B E8 03 00 14 05 01 E8 03 02 78 05 03 60 09 04 60 09 05 60 09 06 60 09 07 C4 09 08 C4 09 09 C4 09 0A C4 09(连续型灵巧手执行初始化操作)。

点击发送。

注意事项:(1)使用二次开发指令编辑器生成串口指令时舵机不能超过参数范围,(2)连续型灵巧手位置初始化时执行恢复手指初始位置,执行恢复刚度初始位置(高刚度),(3)构型操作时先定义手指刚度舵机值,在执行手指运动舵机。

 按照以上步骤实现了五种手势

三、机器人的主要感知方式

机器人的主要感知方式包括视觉、触觉、听觉等。视觉是通过摄像头或传感器来获取周围环境的图像信息,触觉是通过力传感器或触觉传感器来获取物体的触摸感知信息,听觉是通过麦克风或声音传感器来获取声音信息。除此之外,机器人还可以通过其他传感器如激光雷达、红外线传感器等来感知周围环境。整合这些感知方式可以帮助机器人更好地理解和适应不同的场景和任务。还有嗅觉,嗅觉是机器人的另一种重要感知方式,通过气味传感器或化学传感器来获取周围环境的气味信息。机器人可以利用嗅觉感知来识别不同的气味,比如检测有害气体、识别食物等。嗅觉感知在一些特定的应用场景中非常重要,比如在环境监测、食品安全检测等方面发挥着关键作用。通过整合嗅觉感知,机器人可以更全面地感知周围环境,提高其适应性和智能化水平。

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
如果 `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="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" /> <receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"></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: "com.example.app/notification", binaryMessenger: self.window.rootViewController as! FlutterViewController) flutterChannel.invokeMethod("onSelectNotification", arguments: response.notification.request.content.userInfo) completionHandler() } } ``` 上述代码中,我们通过实现 `UNUserNotificationCenterDelegate` 协议的 `didReceive response` 方法来处理通知的点击事件,并且调用了 `FlutterMethodChannel` 方法来将通知的 payload 发送给 Flutter 端的 `onSelectNotification` 方法。 希望这些信息能对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值