Paxini Gen3 Path(으)로 돌아가기

촉각적 인 자료 를 이해 하는 것

압력 배열 구조를 배우고, 접촉 감지 임대값을 정렬하고, 포착 감지 논리를 구현하고, Paxini Gen3로 시간이 지남에 따라 접촉 이벤트를 시각화하십시오.

5중 2부 · 데이터를 이해 · ~1.5시간

이 단위에서는 압력 배열의 공간 구조를 배우고, 지갑의 접촉 감지 임대도를 캘리버하고, 잡기 감지 논리를 구현하고, 시간이 지남에 따라 접촉 이벤트를 시각화 할 수 있습니다.

개념 압력 배열 구조

공간 압력 지도

프레임.프레스_맵 필드는 2D NumPy 매리이며, 각 요소는 한 taxel (타클 픽셀) 를 나타냅니다. 손가락 끝 변종에 대해서는 매리 8×8이며, 14.14mm 센싱 영역을 1.75mm 피치에서 커버합니다. 각 값은 킬로파스칼 (kPa) 이다.

압력 (kPa)

면적 단위당 힘. 범위: 0600 kPa. 보통 손가락 접촉은 잡기 힘에 따라 10150 kPa입니다.

접촉 영역 (mm2)

압력이 열을 초과하는 기체 부위의 합. 손가락 끝과 물체의 전형적인 접촉은 1560 mm2입니다.

전체 힘 (N)

접촉 영역에 대한 압력의 일원. 포착체로 닫는 힘에 비례한다. 전형적인 포착: 120 N.

중앙선 (열, 기둥)

대량중심은 대접 영역의 대접 좌표입니다. 물체가 미끄러지면 변합니다.

# 압력 지도 구조를 탐구 # (8, 8) "Max 압력:", frame.pressure_map.max(), "kPa") print "Total force:", frame.total_force_n, "N") print "Contact area:", frame.contact_area_mm2, "mm2") print "Centroid:", frame.contact_cent) # (줄,) float

단계 1 임계급

접촉 대 비 접촉 문턱

기본 접촉 임기는 5 kPa/타클에당 0.05 N의 전체 힘이다. 이 기본 설정들은 대부분의 설정에 효과가 있지만, 지갑의 전부하와 센서에 대한 케이블 스트레스로 인해 조정이 필요할 수 있습니다.

이 캘리브레이션 스크립트를 실행하여 센서의 휴식 소음 수준을 측정하고 적절한 임대값을 설정합니다.

import paxini import numpy as np sensor = paxini.Sensor() sensor.start.() sensor.calibrate() # zero-offset first # Sample 100 frames without contact baseline_forces = [] for i, frame in enumerate(sensor.stream()): baseline_forces.append(frame.total_force_n) if i >= 99: break_floor = np.max(bas_forces) recommended_threshold = noise_floor * 3.0(f"Noise floor print: {noise_floor4f} N") printf"recommended contact threshold: {recommended_setthreshold4f} N) ◎###recommended threshold.\\conc:threshold: n)

유통적인 값 노이즈 바닥은 보통 0.0050.02 N이다. 0.050.06 N의 임계값은 케이블 이동에서 거짓 긍정 없이 신뢰할 수 있는 접촉 검출을 제공합니다.

단계 2 잡지 탐지

잡기 탐지 논리

단순하지만 강력한 포착 탐지기는 3가지 조건을 동시에 사용한다. 접촉 플래그가 진실, 접촉 영역은 최소 이상이며, 안정적인 중부 (중부선이 빠르게 움직이지 않는다). 이것은 빛 붓 접촉에서 거짓 긍정을 제거합니다.

import paxini import numpy as np from collections import deque sensor = paxini.Sensor.(() sensor.start.() sensor.calibrate() centroid_history = deque(maxlen=10) # 마지막 10개의 프레임 def은_stable_grasp(frame): 프레임이 아닌 경우: 반환 프레임.인_kontakt: 프레임이 아닌 경우: 반환 프레임.kontakt_area_mm2 < 8.0: # 최소 ~3개의 세너를 반환합니다. false centroid_history.appendframe.contact_centroid) lencentroid_history) < 5: false centroid = np.ay_centroid_history) centroid_std = centro.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.std.st: < 0.5개의 세너의 경우: < 0.5개의 세너

단계 3 연락처 이벤트 시각화

시간 을 거쳐 접촉 에 관한 사건 을 시각화 하는 것

10초 기록에 걸쳐 전체 힘과 접촉 상태를 그려서 포착 및 방출 주기의 시간 구조를 이해합니다.

import paxini import numpy as np import matplotlib.pyplot as plt sensor = paxini.Sensor) sensor.start() sensor.calibrate() 힘 = [\] 연락처 = [\] 시간표 = []print("10초 기록 포착 및 센서를 풀어...") 프레임.stream () 에 대한: 힘.append(frame.total_force_n) 연락처.append(((atm sensor.in_contact)) 시간표.append(frame.timestamp_time_ns / 1e9) 만약 시간표[-1] - 시간표 >[0] 휴식= 10.0: t t =t.settimetlabestamps) - 시간표 (txt) - 시간표 (txt) - 시간표 (txt) - (txt) - (txt) - (txt) - (txt) - (txt) - (txt) - (txt) - (txt) - (txt) - (txt) - (txt) - (txt) - (txt) -txt) - (txt) -txt) - (txt) -txt (txt) -txt) -txt (txt) -txt (txt) -txt) -txt (txt) -txt (txt) -txt (txt) -txt) -txt (txt) -txt (txt) -txt (txt) -txt (txt) -txt (txt) (txt) (txt) (t

현장에서 사용되는 힘 동전 용어에 대해서는 [로봇학 방언자리](T0 참조하십시오.

2부대 완료...

압력 지도 모양을 인쇄하고 손가락 끝 변종에 대해 (8, 8) 인 것을 확인 할 수 있습니다. 센서 케이블을 부드럽게 흔들 때 가정된 접촉 문턱은 거짓 긍정적 인 결과를 발생시키지 않습니다. 포착 탐지기는 센서 표면을 단단히 잡은 0.5 초 이내에 "STABLE GRASP"를 인쇄합니다. 접촉 이벤트 그래프는 포착 및 방출 시 명확한 상승/하락 가장자리를 보여줍니다.

[← 경로 개요로 돌아가]