Skip to content

タクタイルセンサー¤

Robopyは、DIGIT触覚センサーを統合したタクタイル情報の取得をサポートしています。

DIGIT タクタイルセンサー¤

DIGITは、Meta Reality Labs(旧Facebook Reality Labs)が開発した視覚ベースの触覚センサーです。

特徴¤

  • 高解像度触覚画像: 240x320ピクセルのRGB画像
  • リアルタイム取得: 高フレームレートでの連続取得
  • 接触検知: 物体との接触を視覚的に検出
  • 変形検知: センサー表面の変形を画像として記録

基本的な使用方法¤

センサーの作成と接続¤

from robopy.sensors.tactile.digit_sensor import DigitSensor

# センサーの作成(シリアル番号を指定)
sensor = DigitSensor("left", "D20542")

# 接続
sensor.connect()

try:
    # タクタイル画像の取得
    tactile_image = sensor.read()
    print(f"タクタイル画像サイズ: {tactile_image.shape}")

    # 接続状態確認
    if sensor.is_connected:
        print("✅ センサーは接続されています")

finally:
    sensor.disconnect()

連続データ取得¤

import time

sensor = DigitSensor("right", "D20537")
sensor.connect()

try:
    # 10回の連続取得
    for i in range(10):
        tactile_data = sensor.capture()
        print(f"フレーム {i}: {tactile_data.shape}")
        time.sleep(0.1)  # 100ms間隔

finally:
    sensor.disconnect()

ロボットとの統合¤

Rakudaロボットでの使用¤

from robopy import RakudaConfig, RakudaSensorParams, TactileParams

# タクタイルセンサー付きRakuda設定
config = RakudaConfig(
    leader_port="/dev/ttyUSB0",
    follower_port="/dev/ttyUSB1",
    sensors=RakudaSensorParams(
        cameras=[],
        tactile=[
            TactileParams(serial_num="D20542", name="left"),
            TactileParams(serial_num="D20537", name="right"),
        ]
    )
)

複数センサーの同期取得¤

from robopy import RakudaRobot

robot = RakudaRobot(config)
robot.connect()

try:
    # データ記録(タクタイルセンサー含む)
    obs = robot.record_parallel(max_frame=100, fps=30)

    # タクタイルデータの確認
    if obs['sensors']['tactile']:
        for name, data in obs['sensors']['tactile'].items():
            print(f"タクタイル {name}: {data.shape}")

finally:
    robot.disconnect()

データ形式¤

画像データ¤

DIGITセンサーから取得される画像は以下の形式です:

# 単一フレーム
tactile_image = sensor.read()
# 形状: (3, 240, 320) - C x H x W

# 複数フレーム(記録データ)
obs = robot.record_parallel(max_frame=100, fps=30)
tactile_data = obs['sensors']['tactile']['left']
# 形状: (100,3,240, 320) - Frames x C x H x W

色情報¤

  • RGB形式: 各ピクセルが3チャンネル(赤、緑、青)
  • 値範囲: 0-255の8bit整数
  • データ型: numpy.float32

データの可視化¤

単一画像の表示¤

import matplotlib.pyplot as plt

# タクタイル画像の取得
tactile_image = sensor.read()

# 表示
plt.figure(figsize=(8, 6))
plt.imshow(tactile_image)
plt.title("DIGIT タクタイル画像")
plt.axis('off')
plt.show()

時系列データの可視化¤

from robopy.utils.animation_maker import visualize_rakuda_obs

# 記録データからアニメーション生成
obs = robot.record_parallel(max_frame=100, fps=30)

# タクタイルセンサーを含むアニメーション生成
visualize_rakuda_obs(
    obs=obs,
    save_dir="./tactile_animation",
    fps=30
)

設定とパラメータ¤

センサー設定¤

from robopy.config.sensor_config import TactileParams

# 基本設定
left_tactile = TactileParams(
    serial_num="D20542",
    name="left"
)

right_tactile = TactileParams(
    serial_num="D20537",
    name="right"
)

トラブルシューティング¤

センサーが認識されない¤

# 利用可能なDIGITセンサーの確認
from digit_interface.digit import Digit

# センサー一覧の取得
digit_devices = Digit.get_digit_devices()
print(f"検出されたDIGITセンサー: {digit_devices}")

接続エラー¤

try:
    sensor.connect()
except Exception as e:
    print(f"接続エラー: {e}")
    print("以下を確認してください:")
    print("- センサーのUSB接続")
    print("- シリアル番号の正確性")
    print("- 他のプロセスでの使用状況")

データ取得エラー¤

try:
    tactile_data = sensor.capture()
except Exception as e:
    print(f"データ取得エラー: {e}")

    # 再接続試行
    sensor.disconnect()
    time.sleep(1)
    sensor.connect()

パフォーマンス問題¤

import time

# フレームレートの測定
sensor = DigitSensor("test", "D20542")
sensor.connect()

try:
    start_time = time.time()
    frame_count = 100

    for i in range(frame_count):
        tactile_data = sensor.capture()

    end_time = time.time()
    actual_fps = frame_count / (end_time - start_time)
    print(f"実際のフレームレート: {actual_fps:.1f} fps")

finally:
    sensor.disconnect()

関連API¤