{{ post.title }}
글 편집
글 편집 (이전 에디터)
{{ post.author.name }}
작성일
Version | {{ post.target_version }} | Product |
{{ product.name }}
|
---|---|---|---|
Tutorial/Manual | {{ post.manual_title }} | Attached File | {{ post.file.upload_filename }} |
2초가 지난 후에 동작하는 모션은 IF문을 사용하면 간단하게 구현이 가능합니다.
예를 들어 병진 조인트의 모션으로 IF(time-2:0,0, (time-2)*100) 라는 식을 사용하면 2초까지는 가만히 있다가 2초부터는 (time-2)*100이 적용됩니다. (2초에는 0, 3초에는 100, 4초에는 200….)
그런데, 만일 특정 조건이 만족된 시점으로부터 2초가 지난 후에 동작하는 모션이 필요하다면 어떻게 해야할까요?
CoLink를 사용하신다면, CoLink의 Signal Chart를 사용하면 간단하게 표현이 가능합니다.
하지만 CoLink를 사용하지 않을 경우라면 어떻게 할까요?
이 때는 Sensor를 응용하여 표현이 가능합니다.
Laser Sensor는 지정한 바디가 어떤 범위 안에 들어오면 센싱이 됩니다.

이 때 센서에 대해서 SENSORONTIME(…)이라는 Expression용 함수를 통해 트리거가 된 시각을 알 수 있습니다.
이를 응용하면 되는 것이죠.
아래 설명을 먼저 읽어보신 후, 첨부한 예제모델을 살펴보시기 바랍니다.
- 어떤 조건을 만족하면, 더미 바디를 센서의 범위로 강제 이동.
- 그러면 SENSORONTIME이 조건을 만족한 시각을 리턴.
- 이를 이용하여 다음과 같은 함수를 사용하여 트리거가 된 시각으로부터 2초 후에 작동하는 모션을 만들 수 있습니다.
- SENSOR(LaserSensor1)*(time > (2+SENSORONTIME(LaserSensor1)))*(time – (2+SENSORONTIME(LaserSensor1)) )*100
- SENSOR(LaserSensor1): 트리거가 되었다면 1, 아니면 0. 즉, 트리거가 될 때까지는 0.
- (time > (2+SENSORONTIME(LaserSensor1)): 트리거가 된 시점으로부터 2초가 지나면 1, 아니면 0.
- (time – (2+SENSORONTIME(LaserSensor1)) )*100: 적용하고자 하는 값.
첨부한 예제모델을 설명하면 아래와 같습니다.
목적: Body_Condition이 1 rad이상 회전한 시점으로부터 2초 후에 Body_Driven이 우측으로 움직이기 시작하는 Expression 구현
- Dummy 바디를 만들고, 이 바디는 Body_Condition이 1 rad회전했을 때, LaserSensor1에 센싱이 되는 위치로 강제 이동
- 이 때, 위치, 각도 함수는 Motion에 직접 사용할 수 없으므로, Variable equation (VE1)을 이용
- Body_Driven의 모션으로 SENSORONTIME(LaserSensor1) 이라는 함수를 이용하여 조건문 입력
- SENSORONTIME(LaserSensor1)는 센서가 트리거된 시간을 리포트함