Shadow Dexterous Hand&UR10e 集成设备培训教程

Shadow Hand Plus & UR10e

一、产品介绍

1.产品概述

        Shadow Hand Plus是世界上最先进的5指仿生机器手,它被世界各地的研究人员使用,其前所未有的灵巧性使您可以轻松直观地抓取和操作任何物体。

2.产品特点

1)具有前所未有的灵巧性,是任何研究实验室必备的。
2)通过WI-IF和5G服务,您可以在整个房间内使用该系统,跨越国家,甚至大洲。
3)该系统是模块化的,可以轻松添加组件并将其集成到其他组件系统中。
4)几乎不需要培训,使其成为您研究的直观补充。
5)多种触觉感应选项,根据您的灵巧性需求,提供一系列不同的手指触觉尖端。

3.箱内物品

                                                               shadow灵巧手开箱照片

                                                        UR10e开箱照片

4.物品清单

名称

数量

名称

数量

灵巧手

1

USB转网口(“SERVER”)

1

灵巧手电源、电源线

1

USB转网口(“RIGHT/LEFT HAND”)

1

NUC 迷你电脑

1

工具箱(内六角扳手)

1

迷你电脑电源、电源线

1

行李箱密码锁

2

安装板(用于将手连接到优傲臂)

1

“Shadow Backup”备份优盘

1

安装板螺钉用于安装板

4

说明书

1

手部安装板螺钉

8

笔记本-服务器

1

3m 网线

2

笔记本电源、电源线

1

USB转网口(“NUC-CONTROL”

1

5.物品清单(UR机械臂)

名称

数量

名称

数量

机器人手臂(包含电缆)

1

主电缆(与客户所在地区兼容)

1

工具端信号电缆(包括接头)

1

激光触摸笔

1

用户和软件手册(本)

1

产品检测证书

1

控制箱

1

安装支架(控制箱和示教器支架)

2

开控制箱的钥匙

1

连接机器人手臂和控制箱的电缆

1

6.参数及关节命名(UR10)

7.机械结构(UR10)

• 6轴(自由度)
• 关节型机器人(类似人类手臂)
• 模块化设计
• +/- 360°旋转
• 末端关节无限旋转

重量:28.9KG
负载:10kg
电源:100-240V AC, 50-60Hz
功率:250w(典型值)

8.控制箱(UR10)

• 带系统软件的闪存卡/USB
• 电源输出到机器人手臂
• 安全系统
• 与周边设备通讯
• 接头
• 220/110 VAC
• 以太网
• USB
• 机器人手臂
• 开箱钥匙

 9.灵巧手参数及关节命名(右手)

关节

角度

弧度

最小

最大

最小

最大

FF1,MF1,RF1,LF1

0

90

0

1.571

FF2,MF2,RF2,LF2

0

90

0

1.571

FF3,MF3,RF3,LF3

-15

90

-0.262

1.571

FF4,MF4,RF4,LF4

-20

20

-0.349

0.349

LF5

0

45

0

0.785

TH1

-15

90

-0.262

1.571

TH2

-40

40

-0.698

0.698

TH3

-12

12

-0.209

0.209

TH4

0

70

0

1.222

TH5

-60

60

-1.047

1.047

WR1

-40

28

-0.698

0.489

WR2

-28

10

-0.489

0.174

10.灵巧手电机特性(大电机*4+小电机*16)

                                              上图为小电机和机器内部3D模型

大电机属性

参数

单位

电机功率

6

w

齿轮比

128:1

肌腱最大持续性安全负载

65

N

肌腱最大负载

190

N

最大持续电流

350

mA

小电机属性

参数

单位

电机功率

3

w

齿轮比

131:1

肌腱最大持续性安全负载

65

N

肌腱最大负载

110

N

最大持续电流

217

mA

11.机械结构

共有24个关节,20个自由度(电机):
拇指:5个关节,5个自由度
食指、中指、无名指:4个关节,3个自由度
小指:5个关节,4个自由度
腕部:2个关节,2个自由度

重量4.3kg,负载5kg
电源:48V @2.5A

12.机械结构(手指*4)

13.机械结构(拇指)

14.机械结构(腕部)

15.指尖PST(触觉传感器)

原理:通过测量指尖气泡内的空气压力,当指尖  压在物体上时,气泡中的压力增加。
    该传感器集成了自动漂移和温度补偿算法(本质上是一个极低截止频率的高通滤波器)。

16.NUC(迷你电脑)

        NUC主要用来运行控制循环层程序,这样做的原因是在同一台笔记本电脑上运行其他繁重的程序时会导致运算能力不足的问题,所以将控制循环层的程序迁移到单独的NUC计算机上。

        特别是在遥操作等复杂系统中,如果只运行灵巧手,这可能没问题,但是如果运行手臂+手+任何其他比较吃算力的程序,比如视觉程序等,这将会导致算力超支。

17.Laptop-server(笔记本电脑)

        

        笔记本主要用来和NUC中的docker镜像进行数据交换,里面搭载了Ubuntu系统和适配灵巧手的ROS环境。在这台电脑上可以运行ROS相关的工具,比如rqt图形界面、rviz可视化、Moveit等等。

18.Router(路由器)

        路由器主要用来桥接Laptop和NUC,它提供的无线热点可用于组建局域网络,与此同时将可访问外部以太网的网线接入路由器的蓝色WAN口即可实现内部设备连接外网,外部设备可以进行远程控制。

二、安装说明

1.工作台固定及配重

        工作台确定好位置以后应将脚轮锁固,确保不会轻易发生移动。在工作台内部应放置至少75KG的配重,以保证机械臂在运动过程中工作台足够稳定可靠,否则可能会出现工作台侧翻造成设备损伤。

2.固定UR机械臂底座

        把手臂安装在工作台上,电缆应该指向系统的外部(例如,如果你有一个双手手臂系统,电缆应该指向右臂的右侧,左臂的左侧)。将手臂放在平台上,并从顶部安装螺丝。

3.机械安装

        使用4颗灵巧手配件中的螺丝把灵巧手的机械臂转接板锁固在UR机械臂的末端法兰盘上,二者的凹凸结构应完好的镶嵌。

        使用8颗灵巧手配件中的螺丝把灵巧手锁固在机械臂转接板上,务必将灵巧手的引出线与机械臂的IO口对齐。

4.电气连接

        电器柜底部有动力线和通讯线接口,分别插上动力线缆和通讯线缆。

        打开电器柜,把急停按钮的两根信号线分别接入第一个端子排的第一和第二接口,不区分正负极。

1)参考右图将设备互相连接,注意区分USB转网口的设备标识,不可以混用。

2)将对应上述设备的电源和电源线分别正确连接到设备。

3)灵巧手的电源线插头带有红点,和电源端的插头红点对齐即可正常插入。

5.参数设置

        1)点击UR示教器右上角三条杠图标,选择settings - System - RemoteControl,点击Enable开启远程模式。此时在右上角会出现小示教器图标,用于本地/远程模式的切换。

        2)点击右上角三条杠 - System - Network,选择静态地址,按上图配置IP地址、子网掩码、默认网关、首选DNS服务器、备用DNS服务器。配置完成后点击Apply按钮。

        在上图界面配置机械臂负载,点击ON按钮,再点击start按钮,直到一排指示灯都变为绿色,此时可以将底部speed滑条适当调小,降低机械臂运动速度确保安全。

        在这个界面把每个关节的角度参数输入进去(参考下一页的Home位参数表),然后将机械臂执行到Home位。注意区分角度单位和左/右手。

三、使用说明

1.注意事项

1)灵巧手是精密仪器,请轻拿轻放。
2)指尖处的PST传感器比较脆弱,请勿用蛮力挤压,可能会导致指尖漏气或破损。
3)请勿在非示教模式和0力模式时用手掰动关节,这可能会对电机或肌腱等造成损伤。
4)请勿在NUC运行状态下强制掉电,可以通过关机按钮关闭NUC后掉电。
5)请勿将手放置在机器人的任何活动关节处,避免造成夹伤。
6)请避免设备遭受液体冲刷或浸泡,如果发生请及时切断总电源开关。
7)请勿拆开灵巧手外壳,这将会影响机器人的保修策略。
8)请尽可能避免或减少修改Laptop和NUC中的任何文件,这可能会造成系统或程序无法正常运行。
9)请确保工作台中放置了75KG以上配重,否则可能会出现工作台侧翻造成设备损伤。
10)控制设备运动时,操作人员应保证至少1.8m的安全距离(以机械臂底座为中心)。
11)日常使用中请勿在UR示教器运行状态下强制掉电,可以通过关机按钮关闭UR示教器后掉电。
12)如果长期不使用设备,请将灵巧手调整到直立姿态并将其握拳,以减少肌腱上的持续性张力。
13)控制机械臂运动前先找到急停按钮,确保随时可以拍下急停按钮。

2.单独启动灵巧手

(启动“Launch Shadow Ritht Hand”后,将会自动运行右侧的4个启动文件,也可以在“Shadow Advanced Launchers”文件夹中手动逐一启动它们。)

1、给灵巧手上电、笔记本电脑开机、NUC开机。
2、双击打开笔记本桌面的图标“Shadow Launchers”,将会进入灵巧手的启动文件存放路径。
3、双击启动路径中的“Launch Shadow Ritht Hand”,等待所有程序启动完成。这个过程会对灵巧手进行初始化,所有手指会轻微抖动片刻。
4、在启动的Rviz图形化界面中可以对灵巧手进行轨迹规划和执行。
5、在“Shadow Demos”文件夹下存放了演示例程,双击图标启动即可触发相应动作,其中“Demo Right Hand.desktop”运行后可以通过轻触不同指尖的PST来触发相应的动作,动作结束后灵巧手会停止运动。

3.灵巧手Rviz可视化界面

4.同时启动灵巧手&机械臂

(启动“Launch Shadow Ritht Hand”后,将会自动运行右侧的4个启动文件,也可以在“Shadow Advanced Launchers”文件夹中手动逐一启动它们。)

1)先启动路由器,然后笔记本电脑开机、NUC开机、UR机械臂开机、灵巧手上电,等待所有设备启动完毕。
2)确保UR机械臂在Home位和远程模式下。
2)双击打开笔记本电脑桌面的“Shadow Launchers...”图标,进入灵巧手的启动文件存放路径。
3)双击启动路径中的“Launch Shadow Ritht Hand&UR10 Arm”图标,会依次自动运行右侧的4个程序,等待所有程序启动完成。在此期间会对灵巧手进行一次初始化,所有手指会轻微抖动片刻。
4)在Rviz的图形化界面中可以对灵巧手&机械臂进行轨迹规划和动作执行。

5.灵巧手&机械臂Rviz可视化界面

四、灵巧手电气原理

 1.电气概述

        20个电机按奇偶设置ID(0-19),10个一组,共分成两组,通过两条CAN总线接入手掌背部的嵌入式微控制器。

2.外部预留接口

辅助SPI:此处可以连接外部SPI器件,例如ADC、DAC或I/O扩展。手掌能够自动检测连接的设备类型,并通知主机。目前仅支持三种设备:
        MCP3208 - 8通道、12位ADC
        MCP3204 - 4通道、12位ADC
        MCP3202 - 2通道、12位ADC

3.指示灯

        图中的指示灯显示的颜色即代表当前的指示状态。

五、控制原理

1.控制流图

2.数据流

指令数据:

        - EDC指令

        - 电机请求数据

        - 奇/偶电机

        - 查询电机类型

        - 电机通信数据

        - 触觉传感器请求数据

状态数据:

        - 关节传感器/惯性传感器数据

        - 电机类型数据

        - 每个电机的位置数据

        - 电机数据

        - 触觉传感器类型数据

        - 触觉传感器数据

传感器

频率(Hz)

Bits

备注

位置

1000

12

关节位置,分辨率0.2°

PST

500

11

压力触觉传感器,位于指尖

扭矩

5000

12

分辨率30mN,内部控制使用

温度

100

12

电机温度

电流

100

12

电机电流

电压

100

12

电机电压

3.控制频率

主机端控制频率(1KHz):

        “P”,“I”&“D”:控制增益参数

        “Max_force”:输出限制

        “Position_Deadband”:被认定为0的错误波段

电机端控制频率(5KHz):

        “F”:扭矩需求前馈到输出

        “P”,“I”&“D”:控制增益参数

        “Max_PWM”:电机PWM限制

        “Deadband”:被认定为0的错误波段

        “Sign”:控制肌腱的曲张

二级电机控制频率(5KHz):

        扭矩限制:控制扭矩需求限制

        扭矩限制增益:比例项参数

4.控制类型

                PWM

        控制输入:PWM

        输入刷新率:1kHz

        实现于:电机端

        控制输出:PWM

                示教模式

        控制输入:扭矩(力)

        输入刷新率:1kHz

        控制循环:5kHz

        实现于:电机端

        控制输出:PWM

        传感器反馈:电机、应变片

                位置模式

        控制输入:位置

        输入刷新率:1kHz

        控制循环:1kHz

        实现方式:主机端

        控制输出:PWM

        传感器反馈:关节位置传感器

                轨迹模式

        控制输入:位置+时间

        位置控制,上面增加了一个算法,将位置目标分割成一个点的集合,创建一个控制关节速度的齿条。

六、基于ROS开发

 1.Rviz可视化

2.rqt工具

                                                Dexterous Hand Data Visualizer

        在docker终端窗口中输入“rqt”并回车,可以打开rqt界面。该界面包含许多通过以太网口与灵巧手进行交互的插件。大多数都可以从“ Plugins >> Shadow Robot”菜单中打开。

1)监视器
Plugins >> Robot Tools >> Diagnostic Viewer

        包含机器人的所有部件的树状图,所有的部件都要打上绿色的勾。
        可以通过双击一个电机来详细检查,将会弹出右图Motor Monitor对话框。这个窗口可以用来检查电机的状态,或调试任何问题。

常用字段含义信息:

2)控制模式
Plugins >>Shadow Robot >>Change Robot Control Mode

                                        轨迹控制、位置控制、示教模式、PWM模式

3)关节控制条
Plugins >>Shadow Robot >>Joint Slider

        有20个滑条,可以单独控制每个关节的位置。
        使用前必须确认灵巧手在位置控制或教学模式。如果控件被更改,请重新加载插件以确保滑块对应于此时灵巧手的关节位置。

4)电机调节器(扭矩控制)
Plugins >>Shadow Robot >>Advanced >>Hand Tuning

        这个插件分两个部分,扭矩控制和位置控制。主要用来厂家内部调节电机的PID、扭矩、位置相关参数。默认参数出厂已经调校至最优,无需进行额外的调整。

4)电机调节器(位置控制)
Plugins >>Shadow Robot >>Advanced >>Hand Tuning

        这个插件分两个部分,扭矩控制和位置控制。主要用来厂家内部调节电机的PID、扭矩、位置相关参数。默认参数出厂已经调校至最优,无需进行额外的调整。

5)灵巧手标定
Plugin >>Shadow Robot >>Advanced >>Hand Calibration

        这个插件是厂家用来校准位置传感器数据。校准必须在NUC机器上运行,可以使用桌面图标“Shadow NUC RQT”启动它。默认参数出厂已经调校至最优,无需进行额外的调整。

7)重启电机
Plugin >>Shadow Robot >>Advanced >>Motor Resetter

        如果出于某种原因,您需要重新运行电机上的固件,您可以使用此插件进行软件重启。
勾选您希望重置的电机,然后单击“Reset Motors”。当电机自动调零应变片时,可以看到相应的关节抖动。

8)数据图形化
Plugins >> Shadow Robot >> Dexterous Hand Data Visualizer

图形化的主要数据有:

        关节状态(位置、扭矩、速度)

        控制回路(设定点、输入、输出、报错)

        电机状态(左、右应变片,PWM,电流,电压,功率,温度,位置,扭矩,算法要求的扭矩,编码器位置)

        Palm附加组件(加速度计,陀螺仪,模拟信号输入)

        触觉传感器数据(压力AC 0,压力AC 1,压力DC,温度AC,温度DC)

        触觉传感器数据可视化

        在数据可视化器上显示的图形越多,速度就越慢,而且可能无法读取。为了能够看到特定数据类型的完整视图,请切换正确的单选按钮并选中您希望更清楚地看到的图形。

        上图展示了PST和配备了Biotacs作为触觉传感器情况下的两种指尖数据,Biotacs还有一个按钮可以切换电极之间触觉点的视觉表现模式。
        当PST检测到按压力之后相应的状态显示颜色会由浅(蓝)变深(红)。
        “T”项是一个调试值,用于查看温度传感器是否工作。该值用于调整压力读数,它不能用于计算皮肤表面的温度,它不是一个可以转换为ºC的值。
        “P”项是一个相对压力值,在未校准的情况下,其范围约为300至1000。它可以用作近似值,以了解施加在指尖上的压力有多大,并且是单调值。

3.ROS话题

        Rostopic:命令行工具,用于显示ROS topic的调试信息,包括发布者、订阅者、发布速率和ROS消息。例如在docker终端中输入指令:

        $ rostopic echo /rh/debug_etherCAT_data
        $ rostopic echo /joint_states
        $ rostopic echo /sh_rh_ffj0_position_controller/state
        $ rostopic echo /rh/palm_extras

Rqt_plot:提供一个GUI插件,使用不同的绘图后端在2D绘图中使数值可视化。

Rosservice:包含Rosservice命令行工具,用于列出和查询服务并动态调用它们。比如重置电机或者更改电机模式。

更多内容参考:
      https://shadow-robot-company-dexterous-hand.readthedocs-hosted.com/en/latest/user_guide/sd_command_line.html

1)rostopic echo /rh/debug_etherCAT_data

        这个话题是由驱动程序发布的,以1000Hz的频率更新来自灵巧手的数据,因为它是通过EtherCAT接收的,对调试很有用。

2)rostopic echo /joint_states

        这个话题是只读的,以125 Hz的频率更新,其中包含了手中的所有关节的名称、位置、速度和力的大小。

3)rostopic echo /rh/palm_extras

        这个话题以84Hz的频率更新,数据来自插入手掌的传感器,前六个值是从手上的IMU中读取的(一般为加速度计和陀螺仪数据)。

     4)/rh_trajectory_controller/state(轨迹控制)

        这个话题是只读的,以50Hz的频率发布,从轨迹控制器更新20个手指关节的位置和速度。
desired是预期的目标参数,actual是实际执行的,error是预期和实际之间的差值。

5)/rh_trajectory_controller/command(轨迹控制)

        这个话题可以发布位置数据到手指轨迹控制器,它用一个数组包含所有关节设置的位置值,用于控制灵巧手。例如,rqt的关节滑块就是通过这个话题发布数据的

七、API概览

1.Python接口(推荐)

        通过SrHandCommander接口可以实现灵巧手当前基础状态信息的获取、手部动作的规划和执行。sr_interface/sr_robot_commander
eg1:在docker终端中,输入以下命令,执行demo.py脚本(按键或挤压PST执行相关动作):
                $  rosrun sr_demos demo.py -s right -ht hand_e
eg2:在docker终端中,输入以下命令,执行open.py脚本(灵巧手张开):
                $  rosrun sr_demos open.py -s right -ht hand_e
资料详见:
       GitHub - shadow-robot/sr_interface: Shadow Robot Interface packages

2.C++接口

        参考sr_interface/sr_example/src/link_joints.cpp

* This example demonstrates how two joints can have their positions 'linked' by
* having a child joint subscribing to the parent joint's controller state topic.
* The messages are then published to the child joint's controller.
*
* The hand should be launched but the trajectory controllers should
* not be running as they overwrite position commands. To check if they are, a call
* to rosservice can be made with the following command:
* >rosservice call /controller_manager/list_controllers
* To stop the trajectory controllers, open the gui (type rqt) and select position control in
* plugins > Shadow Robot > Change controllers
* NOTE: If the joint sliders plugin is open during this change of controllers, it will
* need to be reloaded.
*
* A position can then be published to the parent joint or the joint could be moved by
* using the joint sliders in the gui, plugins > Shadow Robot > joint slider
*
* If you move the joint slider for FFJ3, then MFJ3 will move as well.
*/

#include <ros/ros.h>
#include <string>

// messages
#include <std_msgs/Float64.h>
#include <control_msgs/JointControllerState.h>

/// the name of the parent joint
const char* parent_name = "rh_ffj3";
/// the name of the child joint to link to the parent
const char* child_name = "rh_mfj3";
/// Controller that controls joint position
const char* controller_type = "_position_controller";

// a ros subscriber (will be instantiated later on)
ros::Subscriber sub;
// a ros publisher (will be instantiated later on)
ros::Publisher pub;

/**
* The callback function is called each time a message is received on the
* controller
*
* @param msg message of type sr_hand::joints_data
*/
void callback(const control_msgs::JointControllerStateConstPtr &msg)
{
  // publish the message
  std_msgs::Float64 command;
  command.data = msg->set_point;
  pub.publish(command);

  return;
}

/**
* The main: initialise a ros node, a subscriber and a publisher
*
* @param argc
* @param argv
*
* @return 0 on success
*/
int main(int argc, char **argv)
{
  // init the ros node
  ros::init(argc, argv, "link_joints_example");
  ros::NodeHandle node;

  /**
   * init the subscriber and subscribe to the
   * parent joint controller topic using the callback function
   * callback()
   */
  sub = node.subscribe(std::string("sh_") + parent_name + controller_type + "/state", 2, callback);

  /**
   * init the publisher on the child joint controller command topic
   * publishing messages of the type std_msgs::Float64.
   */
  pub = node.advertise<std_msgs::Float64>(std::string("sh_") + child_name + controller_type + "/command", 2);

  // subscribe until interrupted.
  while (ros::ok())
  {
    ros::spin();
  }

  return 0;
}

八、注意事项

1)灵巧手是精密仪器,请轻拿轻放。
2)指尖处的PST传感器比较脆弱,请勿用蛮力挤压,可能会导致指尖漏气或破损。
3)请勿在非示教模式和0力模式时用手掰动关节,这可能会对电机或肌腱等造成损伤。
4)请勿在NUC运行状态下强制掉电,可以通过关机按钮关闭NUC后掉电。
5)请勿将手放置在机器人的任何活动关节处,避免造成夹伤。
6)请避免设备遭受液体冲刷或浸泡,如果发生请及时切断总电源开关。
7)请勿拆开灵巧手外壳,这将会影响机器人的保修策略。
8)请尽可能避免或减少修改Laptop和NUC中的任何文件,这可能会造成系统或程序无法正常运行。
9)请确保工作台中放置了75KG以上配重,否则可能会出现工作台侧翻造成设备损伤。
10)控制设备运动时,操作人员应保证至少1.8m的安全距离(以机械臂底座为中心)。
11)日常使用中请勿在UR示教器运行状态下强制掉电,可以通过关机按钮关闭UR示教器后掉电。
12)如果长期不使用设备,请将灵巧手调整到直立姿态并将其握拳,以减少肌腱上的持续性张力。
13)控制机械臂运动前先找到急停按钮,确保随时可以拍下急停按钮。

        喜欢上述内容的话敬请关注点赞加收藏转发,当前文档在社区资源中可以下载,您的支持就是我们最大的动力!非常感谢。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 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="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` 方法。 希望这些信息能对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值