【论文笔记】QDP: Learning to Sequentially Optimize Quasi-Static and Dynamic Manipulation Primitives

文章目录

  • 【论文笔记】QDP: Learning to Sequentially Optimize Quasi-Static and Dynamic Manipulation Primitives for Robotic Cloth Manipulation
    • Abstract
    • I. INTRODUCTION
    • II. RELATED WORKS
      • A. Cloth Manipulation
      • B. Sequential RL
    • III. BACKGROUND
      • A. Augmented State Representation
      • B. Sequential DQN
    • IV. METHOD
      • A. Sequential Parameter Choice via SDQN
      • B. QDP-Net
      • C. Training procedure
    • V. EXPERIMENTS
      • A. Manipulation primitives
        • Dynamic Quintic Polynomial
        • Pick-and-Place (P-n-P)
        • Drag
      • B. Baselines
      • C. Experimental Set-Up
    • VI. SIMULATION EXPERIMENTS
      • A. Manipulation Primitives
    • VII. REAL-WORLD EXPERIMENTS
    • VIII. CONCLUSION

【论文笔记】QDP: Learning to Sequentially Optimize Quasi-Static and Dynamic Manipulation Primitives for Robotic Cloth Manipulation

Abstract

研究背景】预定义的操作原语被广泛用于布料操作。然而,布料的特性,如其硬度或密度,会高度影响这些操作原语的性能。

前人工作】现有的解决方案已经解决了选择和放置位置(pick and place location)的参数化问题。

不足之处】准静态(Quasi-Static)和动态操作原语的速度轨迹等因素的影响却被忽略了。

研究问题在机器人衣物操作中,如何选择合适的速度和轨迹,以实现一类的衣物布料操作。

研究思路】引进 QDP 方法(Quasi-Dynamic Parameterizable),除了优化准静态和动态操纵原语的选择和放置位置外,还可以优化诸如运动速度等参数。

技术路线】利用顺序强化学习(Sequential Reinforcement Learning)的框架来按顺序解耦组成原语的参数。

实验设置】为了评估该方法的有效性,我们在模拟和真实实验中关注了用机械臂展开布料的任务。

实验指标】仿真结果表明,通过确定原语的最优参数,与次优参数的性能相比可以提高20%。实际研究结果表明,对于不同质量、刚度、形状和尺寸的布料,改进后的操作原语在速度和高度上有优势。

实验展示】 https://sites.google.com/view/qdp-srl.

I. INTRODUCTION

  1. 本文的研究背景?

    人类每天都要处理各种各样的织物材料,但在被机器人系统操纵时,它们带来了若干挑战。

    室内物品中的布料材料在形状、刚度、弹性和质量方面的可变性,要求人类执行一系列不同的操作操作,如用于敷料辅助或压平、折叠和扭转布的操作。

    将这些技能迁移到机器人操作系统并不是很简单,因为操作原语通常是为特定的应用场景手动设计的,或者使用一组预调整的原语。

  2. 本文的研究目标是?

    为了应对广泛的布料操作,机器人系统应该集成学习算法,自动决定这些操作原语的参数值。

  3. 机器人操作衣物布料等问题的分类?

    准静态】例如:pick-and-place primitive。准静态原语已广泛应用于布折叠和展开,前人提出了不同的算法来决定边选择和放置位置

    Y. Wu, W. Yan, T. Kurutach, L. Pinto, and P. Abbeel, “Learning to Manipulate Deformable Objects without Demonstrations,” in Proceedings of Robotics: Science and Systems, Corvalis, Oregon, USA, July 2020.

    动态】例如:fling primitive,含义是 “抛掷” 的原语。

    H. Ha and S. Song, “Flingbot: The unreasonable effectiveness of dynamic manipulation for cloth unfolding,” in Conference on Robotic Learning (CoRL), 2021.

  4. 机器人操作布料产生的实际问题?

    传统方法忽略了操作原语的特定轨迹高度或速度等参数。

    这在与表面接触的布操作中至关重要,布的大小将极大地影响操作结果。

    例如,如果较大的布沿着较低高度的轨迹运动,就会有更多的接触。更多的接触就会产生更多的褶皱,更加提升了衣物操作的难度。

  5. 作者提出的科学问题?

    在研究机器人操作可形变物体时,应该考虑到特定轨迹高度或速度等参数,以应对一系列不同的布料材料和尺寸的衣物操作。

  6. 这篇文章的主要工作?

    (1)引入新的QDP方法,可以优化操作原语的参数,解耦选择和放置决策额外的原始参数,在训练期间不需要监督或手工标记的数据。

    (2)对QDP在衣物展开任务上的性能进行了分析,表明所提出的QDP方法优于基线的性能,以及它具有为准静态和动态操作原语找到最优参数的能力。

    (3)首次在公共的衣物展开基准上对不同的操作原语进行了真实世界的评估。

II. RELATED WORKS

A. Cloth Manipulation

衣物操作上前人研究工作?

  • 前人的工作使用空间动作图(the spatial action map)来决定选择拾取位置,并旋转和缩放输入图像来决定放置位置。

    这些方法对放置位置的决策,受限于旋转角度和尺度的离散组合,从而限制了原始动作空间。

    本文的工作将拾取和放置视为空间动作空间(the spatial action space)中的动作。

    含义就是将放置动作也包含在了空间动作空间(the spatial action space)中。

    这样做会更灵活。

  • 前人的工作不受空间的限制。

    空间的限制通过定义条件动作空间,或同时包含选择和放置位置的动作空间。

  • 前人的工作都只关注于确定预定义的操作原语的选择和位置,而忽略了其他参数,如执行它们的速度。

    执行操作动作的速度在布折叠等任务中有影响,其中动态操作动作应当根据织物材料进行调整。

    在这项工作中,我们决定了一些参数,如动态操作原语的速度和挑选和放置原语的高度,从而产生了一组更多样化的操作动作,以应对不同大小和材料的布料。

B. Sequential RL

序列强化学习的介绍和进展?

  • 序列强化学习(the Sequential Reinforcement Learning, SRL)由 Metz 提出,通过在动作空间中分解到更简单的子动作空间,实现在高维空间中学习。Metz 具体提出了序列DQN(the Sequential DQN)方法。

    L. Metz, J. Ibarz, N. Jaitly, and J. Davidson, “Discrete sequential prediction of continuous actions for deep rl,” arXiv preprint arXiv:1705.05035*, 2017.

  • 序列DQN(the Sequential DQN)方法随后被扩展到学习 S E ( 3 ) SE (3) SE(3) (三维欧式空间)动作空间中的策略。

    D. Wang, C. Kohler, and R. Platt, “Policy learning in se(3) action spaces,” in Proceedings of the 2020 Conference on Robot Learning, ser. Proceedings of Machine Learning Research, J. Kober, F. Ramos,
    and C. Tomlin, Eds., vol. 155. PMLR, 16–18 Nov 2021, pp. 1481–1497.

    这篇论文的思路是 “扩充状态空间” ,是本文工作的来源。

  • 前人工作已经将动作空间扩展到 S E ( 2 ) SE (2) SE(2) S E ( 3 ) SE (3) SE(3)

    不足之处:没有考虑其他动作空间,如操作原始参数动作空间。

    本文采用 Sequential DQN 方法来组成一个选择和放置位置的动作空间,以及一个可以修改操作原语行为的参数空间;显示其在布料操作中的有效性。

    前人工作:计算了在不同时间步长的选择和放置动作。

    我猜的意思是,选择阶段的动作对环境的变化会影响到后面放置动作。

    本文按顺序决定两者,从而决定放置位置,实现了不与环境交互。

III. BACKGROUND

A. Augmented State Representation

序列强化学习的原理

标准强化学习的 MDP: < S , A , R , T , γ > <S,A,R,T,γ>,在序列强化学习中称为**“顶层MDP”**

顶层MDP的动作空间可以被分解为一系列子动作空间。 A = A 1 × A 2 × ⋯ A n A=A_1\times A_2\times\cdots A_n A=A1×A2×An

A i A_{i} Ai 是第 i i i 次序列的动作空间, a i ∈ A i a_{i}\in A_{i} aiAi 表示第 i i i 次序列的实际动作, [ a 1 , ⋯   , a n ] [a_{1},\cdots,a_{n}] [a1,,an] 表示选择序列。

这样就构成了新的动作空间: < S ^ , A ^ , R , T , γ > <\hat{S},\hat{A},R,T,\gamma> <S^,A^,R,T,γ> 。其中 A ^ = A 1 ∪ A 2 ⋯ A n \hat{A}=A_{1}\cup A_{2}\cdots A_{n} A^=A1A2An S ^ = S 1 ∪ S 2 ⋯ S n \hat{S}=S_{1}\cup S_{2}\cdots S_{n} S^=S1S2Sn

动作从第一子状态空间开始,随后智能体到达的状态第一子状态序列决策的结果。

奖励函数与传统MDP一样,只有到达了某个状态才返还奖励。

n = 3 n=3 n=3 时,只有执行三次序列决策后,才能获得来自终点的奖励。中间状态的奖励都不存在。

B. Sequential DQN

为什么设计序列强化学习?将强化学习任务解耦成序列?

降低任务执行的复杂程度。

在序列 DQN 中,对表征动作价值的Q函数做了重写。

Q ( s , a n ) = Q ( s , a n , s e q ) = Q ( s , { a 1 , a 2 ⋯ a n } ) Q(s,a_{n})=Q(s,a_{n,seq})=Q(s,\{a_{1},a_{2}\cdots a_{n}\}) Q(s,an)=Q(s,an,seq)=Q(s,{a1,a2an})

这样改写有助于后面使用神经网络做拟合。

IV. METHOD

【论文笔记】QDP: Learning to Sequentially Optimize Quasi-Static and Dynamic Manipulation Primitives_第1张图片
所提出的 QDP 方法首先从获得布的俯视图图像开始。

为了找到最优操作原始参数,由三个不同网络的子动作输出组成顺序动作 a ⃗ \vec{a} a

  1. QDP Pick Net,预测最优选择位置;
  2. QDP Place Net,预测最优放置位置;
  3. QDP θ θ θ Net:预测额外的原始参数,如原始速度。

QDP的输入是:一张视觉图片;

QDP的输出是:最优的拾取动作 a p i ∗ ∈ A 1 a_{pi}^{\ast}\in A_{1} apiA1、最优放置动作 a p l ∗ ∈ A 2 a_{pl}^{\ast}\in A_{2} aplA2和其他原语参数 a θ ∗ ∈ A 3 a_{\theta}^{\ast}\in A_{3} aθA3

A. Sequential Parameter Choice via SDQN

通过将选择和放置分解为多个决策,我们可以根据拾取动作来决定放置位置。

首先确定拾取点:

a p i ∗ = arg ⁡ max ⁡ a p i Q ( s , a p i ) a_{pi}^{\ast}=\arg\max_{a_{pi}}Q(s,a_{pi}) api=argmaxapiQ(s,api)

最优选择 a p i ∗ ∈ N 2 a^{\ast}_{pi}∈N^{2} apiN2 是在图像空间中的像素位置。

动作值函数 Q Q Q 由一个神经网络近似,该神经网络还提供了状态空间的编码 g ( s ) g (s) g(s)

根据初始状态(实际就是图像信息)和拾取点的选择动作信息确定放置动作点:

S 1 = S × A 1 S_{1}=S\times A_{1} S1=S×A1

为了编码子动作 a p i ∗ a_{pi}^{\ast} api,我们使用了一个映射 f : ( s , a p i ) → I p i \mathbf{f}: (s,a_{pi})\rightarrow \mathbf{I}_{pi} f:(s,api)Ipi I p i ∈ R E × E \mathbf{I}_{pi}\in R^{E\times E} IpiRE×E 是抓取为中心的图像。

同样,这里也使用了状态空间的编码 g ( s ) g (s) g(s)

Q函数: a p l ∗ = arg ⁡ max ⁡ a p l Q 2 ( g ( s ) , f ( s , a p i ) , a p l ) a_{pl}^{\ast}=\arg\max_{a_{pl}}Q_{2}(g(s),\mathbf{f}(s,a_{pi}),a_{pl}) apl=argmaxaplQ2(g(s),f(s,api),apl)

最优选择 a p l ∗ ∈ N 2 a^{\ast}_{pl}∈N^{2} aplN2 是在图像空间中的像素位置。

最后选择参数:

S = S × A 1 × A 2 S=S\times A_{1}\times A_{2} S=S×A1×A2。重用前两个子操作中的信息。

Q函数: a θ ∗ = arg ⁡ max ⁡ a p l Q 3 ( g ( s ) , f ( s , a p i ) , Q 2 ( s 2 . a p l ) , a θ ) a_{\theta}^{\ast}=\arg\max_{a_{pl}} Q_{3}(g(s),\mathbf{f}(s,a_{pi}),Q_{2}(s_{2}.a_{pl}),a_{\theta}) aθ=argmaxaplQ3(g(s),f(s,api),Q2(s2.apl),aθ)

最优选择 a θ ∗ ∈ N 1 a^{\ast}_{\theta}∈N^{1} aθN1 是在每个操作原语的不同值范围内定义。

最终合成: a ∗ = [ a p i ∗ , a p l ∗ , a θ ∗ ] a^{\ast}=[ a_{pi}^{\ast},a_{pl}^{\ast},a_{\theta}^{\ast} ] a=[api,apl,aθ],已经在整个增强状态空间中重复使用以前的信息进行了顺序计算。

B. QDP-Net

  1. QDP Pick Net

    将网络的第一部分表示为QDP挑选网,它基于一个类似于的 U-Net 结构。

    这个网络具有跳过连接(skip connections),以免在整个编码器-解码器结构中丢失信息。

    QDP选择网执行映射 h 1 : s → ( g ( s ) , Q 1 ( s , a p i ) ) h1: s→ \big(g (s),Q_{1}(s,a_{pi})\big) h1:s(g(s)Q1(sapi)),为选择子操作提供编码 g ( s ) g (s) g(s) Q Q Q 值。

  2. QDP Place Net
    h 2 : ( g ( s ) , f ( s , a p i ) ) → ( ω ( f ( s , a p i ) ) , Q 2 ( s , a p l ) ) h_{2}:\big( g(s),f(s,a_{pi}) \big)\rightarrow(\omega(f(s,a_{pi})),Q_{2}(s,a_{pl})) h2:(g(s),f(s,api))(ω(f(s,api)),Q2(s,apl))
    结合外界输入的视觉图片 + 拾取点图片 作为网络输入,输出二次编码信息和Q值。

  3. QDP θ \theta θ Net
    h 3 : ( g ( s ) , ω ( f ( s , a p i ) ) , Q 2 ( s 2 , a p l ) ) → Q 3 ( s , a θ ) h_{3}:\big( g(s),\omega(f(s,a_{pi})),Q_{2}(s_{2},a_{pl}) \big)\rightarrow Q_{3}(s,a_{\theta}) h3:(g(s),ω(f(s,api)),Q2(s2,apl))Q3(s,aθ)
    它重用以前的编码信息,并在一个卷积和完全连接的网络结构之后,输出第三个子动作的 Q Q Q 值。

C. Training procedure

在这项工作中,实验是:布展衣物的任务。目标是最大化布料的面积,以达到平滑或扁平的状态。

奖励函数:

r ( s ) = C ( s ) / C m a x r(s)=C(s)/C_{max} r(s)=C(s)/Cmax 根据图像像素计算布料的当前面积, C m a x C_{max} Cmax 是布料的最大面积。

损失函数:

{ L = E [ y − Q ( s , a ; ϕ ) ] y = r ( s ) + Q 3 ( s ′ , ( a p i ′ , a p l ′ , θ ′ ) ; ψ ) \begin{cases} L&=E[y-Q(s,a;\phi)] \\ y&=r(s)+Q_{3}(s^{\prime},(a_{pi}^{\prime},a_{pl}^{\prime},\theta^{\prime});\psi) \end{cases} {Ly=E[yQ(s,a;ϕ)]=r(s)+Q3(s,(api,apl,θ);ψ)

请注意,对于所有的网络,我们使用相同的目标,即最后一个 Q Q Q 网络的 Q Q Q 值,因为它已经被证明比每个网络使用不同的目标更有样本效率。

实验详情:

  1. 在训练过程中,为了在探索和开发之间进行权衡,使用了 ε ε ε-贪婪法 。
  2. 为了改进模拟到实的转移,还进行了域随机化。随机化布料的内部参数,包括刚度、质量、尺寸、颜色和初始布料配置。
  3. 网络参数是随机初始化,不需要先验。
  4. 为了减少网络参数的数量,基于之前关于布操作的工作结果,使用了一个灰度图像的作为网络的输入。观察结果在每个时间步长都被旋转,以帮助将网络推广到不同的布状态。
  5. 没有通过增加或减少图像比例来增加数据,因为这将丢失用于训练操作原语的空间信息。

V. EXPERIMENTS

实验主要介绍两个要点:

  1. 评估QDP的性能与最先进的基线进行比较
  2. 评估在使用单一机械臂展开布的任务上的不同操作原语

实验主要回答三个问题:

  1. 学习按顺序优化参数,如预定义的操作原语的高度或速度的影响有什么?
  2. 与其他架构相比,QDP提出的网络架构表现如何?
  3. QDP以小样本方式转移到现实世界时的性能如何?

A. Manipulation primitives

采样了三个操作原语:选择和放置( pick-and-place)、拖动(drag)和动态五次多项式(dynamic quintic polynomial)。每个值都至少由它们的选择和放置位置来定义。

Dynamic Quintic Polynomial

由其速度定义的动态操纵原语,该原语是从 a p i a_{pi} api a p l a_{pl} apl 的半圆形轨迹。

其中 v m i d d e s ∈ [ 0.08 , 0.5 ] m / s v_{mid}^{des}∈[0.08,0.5] m/s vmiddes[0.08,0.5]m/s 是机械手端执行器在轨迹中点的期望速度。

原语的设计遵循 α α α 角的五阶多项式,表示为 α ( t ) = ∑ i = 0 5 a i t i \alpha(t)=\sum_{i=0}^{5}a_{i}t^{i} α(t)=i=05aiti

Pick-and-Place (P-n-P)

参数为 { h θ , t θ } \{h_{\theta},t_{\theta}\} {hθ,tθ} 的准静态操作原语,其中高度的值范围为 h θ ∈ [ 0.1 , 0.2 , 0.3 , 0.4 , 0.5 ] m h_{θ} \in [0.1,0.2,0.3,0.4,0.5] m hθ[0.1,0.2,0.3,0.4,0.5]m

a p i a_{pi} api 移动到 a p l a_{pl} apl 的时间在 t θ ∈ [ 10 , 11 , 12 , 13 , 14 , 15 ] t_{θ}∈[10,11,12,13,14,15] tθ[10,11,12,13,14,15] 秒的范围内。

Drag

t θ t_{θ} tθ 为附加参数的准静态原语。

这个原语可以看作是一个P-n-P原语,其中 h θ h_{θ} hθ 等于零,并且时间的值范围为P-n-P原语。

B. Baselines

为了评估我们的方法的性能,我们与提出的最大值图(Max Value Map)进行了比较,后者提出了基于空间行动图的选择位置。

J. Wu, X. Sun, A. Zeng, S. Song, J. Lee, S. Rusinkiewicz, and T. Funkhouser, “Spatial Action Maps for Mobile Manipulation,” in Proceedings of Robotics: Science and Systems, Corvalis, Oregon, USA, July 2020.

需要注意的是,MVP方法会遍历空间动作映射,直到找到一个有效的选择位置。


还评估了使用不同网络架构的选择放置参数的顺序决策的性能。

将 U-net 架构与两种操作架构进行了比较。第一个是在 MVP 方法中使用的网络。第二种网络架构是Form2Fit(F2F),它在刚体的拾取和放置任务中表现出了良好的性能。

需要注意的是,这些网络不共享任何参数来决定动作参数。

C. Experimental Set-Up

  1. 实验细节:

    仿真环境:softgym。

    所有基线的训练都使用 V100 GPU完成,大约需要3天。

    总共有 40000 个环境步被收集到回放缓冲区中。

    使用Adam优化器

    奖励调整为10倍,也就是进行 reward scale。通过增加奖励的大小,它们的变化更加明显,促进了网络的收敛。

    探索系数从 ε = 1.0 ε = 1.0 ε=1.0 开始,每一 episode 衰减0.001,到20000集步骤后达到ε = 0.01。

    在评估过程中,我们在 0 , 80 , 180 {0,80,180} 0,80,180 度的范围内旋转俯视图图像,间隔 15 15 15 度,并比较每个输入图像的选择 Q Q Q 值。这允许在相同的布配置下选择具有最高预期改进的操作。

  2. 实验指标:

    • the maximum coverage 最大覆盖范围

    • coverage improvement that can be achieved within 10 interactions with the cloth 可以在与布料的10次交互中实现覆盖率的改进

    • 两者都由估计的最大面积归一化

    为什么使用覆盖率改进的指标?

    • 当布的初始配置存在较大差异时,覆盖率改进允许评估方法的性能。
  3. 其他配置

    在评估过程中,我们使用深度图像作为先验数据来校正在衣物的低分辨率图像上但不在高分辨率图像中的选择点。(没明白)

    在有效衣物点半径为10像素上的拾取点被用作拾取位置。

  4. 真实实验配置

    使用 Azure Kinect DK 进行实验,以获得顶视图和深度图像。

    在这里,顶视图图像是 ( 3 , 1280 , 720 ) (3,1280,720) (3,1280,720),并进行了重塑。

    Franka Emika Panda 机械臂

    评估中的每一种衣物都有不同的图案、大小、弹性和重量;因此,这样的实验可以代表衣物类型的广泛变化,以评估每个操作原始的性能。

    真实世界的操作原语是使用笛卡尔阻抗控制器,其中刚度和阻抗参数已经被经验调整。

    可以完全展开的物体,包括小毛巾(0.3×0.5米)、棉质餐巾(0.5×0.5米)和方格布(0.5×0.7米)。

VI. SIMULATION EXPERIMENTS

A. Manipulation Primitives

【论文笔记】QDP: Learning to Sequentially Optimize Quasi-Static and Dynamic Manipulation Primitives_第2张图片
在模拟中展开布的覆盖率的定量比较。

结果将所提出的方法QDP(绿色)与基线MVP(蓝色)进行了比较,以确定原语参数值。

对三个原语进行了评估:拾取和放置、拖动和动态;其中,QDP选择了快速静态和动态原语的时间 t θ t_{θ} tθ 和速度 v m i d v_{mid} vmid 。结果显示,对于正常尺寸(上排)和大尺寸(下排)布,使用QDP的覆盖率都有所增加

【论文笔记】QDP: Learning to Sequentially Optimize Quasi-Static and Dynamic Manipulation Primitives_第3张图片
使用 (a)选择和放置 和 (b)动态操作原语进行模拟时展开布的覆盖百分比的定量比较。

结果比较了所提出的 QDP(绿色)与MVP使用不同的速度和高度值。

附加参数值设置为QDP提出的建议值的中值,记为MVP最优 θ \theta θ(蓝色)和次优值(紫色);用于普通矩形布和大矩形布。

这表明使用次优原始值对布展开任务是有害的。

【论文笔记】QDP: Learning to Sequentially Optimize Quasi-Static and Dynamic Manipulation Primitives_第4张图片
使用选择操作原语对模拟中展开布的覆盖率百分比的定量比较。

结果比较了三种不同的结构,所提出的方法QDP U-Net(绿色)、Form2Fit 或 F2F(橙色)和MVP(蓝色);a)正常的矩形布,b)大的矩形布。

VII. REAL-WORLD EXPERIMENTS

最后,我们在现实世界中评估三个操作原语,以 zero-shot 的方式传输网络。性能在3个测试集中报告,每集10步,导致每块布至少30个交互,其中我们放弃了抓取不成功和布配置没有被抓取尝试改变的动作步骤。

【论文笔记】QDP: Learning to Sequentially Optimize Quasi-Static and Dynamic Manipulation Primitives_第5张图片
定性结果为真实世界的实验展开餐巾从家里的布数据集。

结果显示了每个时间步长 s t s_{t} st s t + 1 s_{t+1} st+1 的覆盖范围,以及基线MVP(左)和动态、选择(P-n-P)和拖动操作原语(右)的轨迹。

结果表明,通过修改速度和高度参数,QDP可以改变布料的结构,导致更好的覆盖。

VIII. CONCLUSION

虽然我们展示了选择原始参数值来操作多个布料的好处,但推广到更广泛的材料和形状仍然是一个有待解决的问题。

闭环反馈显著提高了布料操作的适应能力。

因此,将参数化的原语与实时闭环反馈相结合,似乎是一种获得更普遍和自适应技能的很有前途的途径。

这项工作为更广泛的复杂操作原语铺平了道路,消除了微调或设计原语的人工努力,同时减少了由于顺序决策过程而产生的计算需求。这为探索复杂的参数化操作技能,以塑造其他可变形材料,如粘弹性或弹塑性材料,这些材料存在于许多工业和住宅环境中。

你可能感兴趣的:(论文笔记,论文阅读,人工智能)