Difference between revisions of "Motion Blending/zh-hans"

From SoftMC-Wiki
Jump to: navigation, search
Line 48: Line 48:
 
# 如果节点BF值设置为100(或CP = 0),则不会与下一个运动混合。
 
# 如果节点BF值设置为100(或CP = 0),则不会与下一个运动混合。
  
===Program Example ===
+
=== 程序示例 ===
 
<pre>
 
<pre>
 
Blendingmethod =1 ' cp
 
Blendingmethod =1 ' cp
Line 78: Line 78:
 
* The same shall apply to [[MC-Basic:group.CP|'''<robot>.CP''']]  and [[MC-Basic:group.CPPREV|'''<robot>.CPPrev''']]. If given and > 0 <robot>.CPPrev shall overwrite the previous <robot>.CP. If -1 (actually: any negative number) it shall be ignored. The default shall be -1. If the overwrite comes too late the previous motion shall continue with its own <robot>.CP. This means that it might still apply its own low CP if it was to be overwritten by a large CPPrev. These two factors basically allow to give separate blending coefficients for the two end points of a motion, together with a very explicit and easy rule how they're applied. One can:
 
* The same shall apply to [[MC-Basic:group.CP|'''<robot>.CP''']]  and [[MC-Basic:group.CPPREV|'''<robot>.CPPrev''']]. If given and > 0 <robot>.CPPrev shall overwrite the previous <robot>.CP. If -1 (actually: any negative number) it shall be ignored. The default shall be -1. If the overwrite comes too late the previous motion shall continue with its own <robot>.CP. This means that it might still apply its own low CP if it was to be overwritten by a large CPPrev. These two factors basically allow to give separate blending coefficients for the two end points of a motion, together with a very explicit and easy rule how they're applied. One can:
  
这同样适用于[[MC-Basic:group.CP|'''<robot>.CP''']]和[[MC-Basic:group.CPPREV|'''<robot>.CPPrev''']]。如果给定且> 0 <robot> .CPPrev将覆盖之前的<robot> .CP。如果是-1(实际上:任何负数),它将被忽略。默认值为-1。如果覆盖太晚,以前的动作将继续使用自己的<robot> .CP。
+
这同样适用于[[MC-Basic:group.CP|'''<robot>.CP''']]和[[MC-Basic:group.CPPREV|'''<robot>.CPPrev''']]。如果给定且> 0 <robot> .CPPrev将覆盖之前的<robot> .CP。如果是-1(实际上:任何负数),它将被忽略。默认值为-1。如果覆盖太晚,之前的运动将继续使用自己的<robot> .CP。 这意味着如果被一个大的CPPrev覆盖,它可能仍然应用自己的低CP。
  
 
::a) always determine blending in advance (i.e. before or at starting the motion)
 
::a) always determine blending in advance (i.e. before or at starting the motion)

Revision as of 03:37, 8 May 2017

语言: [[::Motion Blending|English]]  • [[::Motion Blending/zh-hans|中文(简体)‎]]

介绍

混合是两个或多个运动的组合在一起。 在混合运动期间通常不会在中间点停止。

有三种混合类型:

  1. CP (Continous Path) 混合.
    两个运动通过一个共同的运动曲线引导成为一个运动。
  2. SP (SuperPosition ) 混合.
    两个运动组合成一个,每个运动都由自己的运动曲线引导.
  3. AI (Advance Interpolation) 混合.
    许多运动通过一个运动曲线引导成为一个运动。

BlendingMethod property.属性选择。

混合属性

在不同的混合方法中使用不同的混合属性:

Properties  CP   SP   AI 
BlendingMethod 1 2 3
CP - -
CPPrev - -
BlendingFactor - 1..100 -
BFPrev - 1..100 -
BlendProtected - -
BlendingStartCondition -
DoubleMode -

简单混合

前两种混合方法(Continuous Path (CP) and Super Position (SP))的特征在于,在混合中两个运动是活动的并且精确的组合成一个运动。在第一种情况(CP)中使用曲线跟随进行组合,在第二种情况(SP)中是简单的添加了两个运动。这两种混合方法的触发是以指定从第一运动的目标位置的距离。在CP中,这是由cp因子定义的,它代表与目标点的线性距离(但是这个因子与第二运动的CP相结合)。在SP的情况下,它是起点(混合因子 - BF)的简单距离(以百分比给出)。 在这两种情况下,当前运动的参数(CP或BF)影响下一个运动的混合点。 当其中一个运动没有明确的混合参数时,将使用默认值(CP或BF)。 但默认值也可以隐式关闭混合(CP = 0或BF = 100)。

  • 如果其中一个运动已关闭混合,则适用以下规则:
  1. 节点BF定义了混合中下一个运动的起始点。
  2. 如果节点BF值设置为100(或CP = 0),则不会与下一个运动混合。

程序示例

Blendingmethod =1 ' cp
CP = 0
BlendingFactor = 100
MOVE L
MOVE L CP = 10
Move L
delay 100
Blendingmethod =2 ' sp
CP = 0
BlendingFactor = 100
MOVE L
MOVE L BlendingFactor = 85
Move L BlendingFactor = 100 

混合传递规则

  • BF / CP的节点值定义了混合中下一步运动的起始点。
  • 如果节点BF值设置为100(或CP = 0),则不会与下一个运动混合。
  • BlendingFactor (<robot>.BF) - 模态(全局)或节点(局部)定义运动之间的混合。 这是给下一个运动 范围从0(即时= 最大混合值)到100(无混合)。
  • BlendingFactorPrevious (<robot>.BFPrev) - 模态(全局)或节点(局部)覆盖(如果在0-100范围内)前一运动的<robot> .BF。在之前的运动和现在的运动之间是适用的。范围0到100的含义与<robot> .BF相同。 如果不需要这样的覆盖<robot> .BFPrev必须设置为-1(实际上可以是任何负数)。
  • The same shall apply to <robot>.CP and <robot>.CPPrev. If given and > 0 <robot>.CPPrev shall overwrite the previous <robot>.CP. If -1 (actually: any negative number) it shall be ignored. The default shall be -1. If the overwrite comes too late the previous motion shall continue with its own <robot>.CP. This means that it might still apply its own low CP if it was to be overwritten by a large CPPrev. These two factors basically allow to give separate blending coefficients for the two end points of a motion, together with a very explicit and easy rule how they're applied. One can:

这同样适用于<robot>.CP<robot>.CPPrev。如果给定且> 0 <robot> .CPPrev将覆盖之前的<robot> .CP。如果是-1(实际上:任何负数),它将被忽略。默认值为-1。如果覆盖太晚,之前的运动将继续使用自己的<robot> .CP。 这意味着如果被一个大的CPPrev覆盖,它可能仍然应用自己的低CP。

a) always determine blending in advance (i.e. before or at starting the motion)
b) always determine blending retrospectively (i.e. after starting the motion)
c) mix a) and b) randomly


moves robot loc1 BF=0 
moves robot loc2 BFPrev=90 BF=90 
moves robot loc3 BFPrev=50 

means: loc1 -> BF90 -> loc2 -> BF50 -> loc3



Blending Behavior
Blending Behavior

Rules Summary

  1. global BF (<robot>.bf=<NUM>) is the default BF
  2. local BF (move <robot> BF=<NUM>) overwrites that default per motion
  3. this results in an effective BF per motion
  4. global BFPrev initialized by the system to -1
  5. local BFPrev overwrites global BFPrev per motion
  6. this results in an effective BFPrev per motion
  7. if the effective BFP is >= 0 (not negative), it overwrites the effective BF for the previous motion
  8. the same will apply to CP and CPPrev

with some side effects:

NOTE-Info.svgNOTE
Globally setting BFPrev to = 0 is not recommended, because it will overwrite any and all elaborate local BF
NOTE-Info.svgNOTE
Accuracy of the path length depends on the velocity at the moment of blending. Error in the magnitude of can be expected!


Blending Prev.png
BF vs BFprev

See Also