コンテンツにスキップ

Jetson環境構築

環境構築Script

https://github.com/FaBoPlatform/Jetson_script/blob/main/lerobot/orin_nano/6.2/install.sh

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/bin/bash

# Jetson Orin Nano, AGX Orin
# JetPack6.2用
# LeRobotのInstall Script
#!/usr/bin/env bash

set -euo pipefail

# ===== 基本設定 =====
trap 'kill ${SUDO_PID:-0} >/dev/null 2>&1 || true' EXIT

# sudo keep-alive
sudo -v
( while true; do sudo -n true; sleep 60; done ) &
SUDO_PID=$!

TMP=$(mktemp -d)

# ===== APT =====
sudo apt-get update
sudo apt-get install -y \
    python3-pip curl build-essential \
    libopenblas-base libopenblas-dev \
    libjpeg-dev zlib1g-dev libpng-dev \
    python3-libnvinfer python3-packaging \
    cuda-runtime-12-6 libcublas-12-6 \
    libcublas-dev-12-6 cuda-cupti-12-6 

# ===== Miniconda (非対話) =====
MINI="$HOME/miniconda"
if [ ! -d "$MINI" ]; then
  wget -q https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh -O "$TMP/miniconda.sh"
  bash "$TMP/miniconda.sh" -b -p "$MINI"
fi
source "$MINI/etc/profile.d/conda.sh"

# ~/.bashrc に一度だけ Miniconda 初期化を追記
BASHRC_TAG="### Miniconda init (robot script)"
grep -qxF "$BASHRC_TAG" "$HOME/.bashrc" || cat >>"$HOME/.bashrc" <<'BASHRC'
### Miniconda init (robot script)
if [ -f "$HOME/miniconda/etc/profile.d/conda.sh" ]; then
  . "$HOME/miniconda/etc/profile.d/conda.sh"
  export PATH="$HOME/miniconda/bin:$PATH"
fi
### End Miniconda init
BASHRC

source "$HOME/.bashrc"

eval "$(conda shell.bash hook)"

conda create -y -n lerobot python=3.10
conda activate lerobot

# ===== lerobot by Huggingface=====
git clone https://github.com/huggingface/lerobot ~/lerobot || true
cd ~/lerobot
pip install -e ".[feetech]"

# ===== OpenCV は pip で入れる =====
conda install -y -c conda-forge "opencv>=4.10.0.84"
conda remove -y opencv        # ← 自動で Yes
pip3 install --no-cache-dir opencv-python==4.10.0.84

# ===== conda パッケージ =====
conda install -y -c conda-forge ffmpeg libpng 

# ===== pip パッケージ =====
pip3 install --upgrade pip wheel

# (PyTorch 系は NumPy<2 が必須)
pip3 install "numpy<2" --no-cache-dir

# --- JetPack 6.2 用 GPU wheel (2.5.0 固定) ---
pip3 uninstall -y torch torchvision || true 

# ---- PyTorch 2.5.0 (CUDA 12.6, aarch64) ----
wget -O "$TMP/torch-2.5.0-cp310-cp310-linux_aarch64.whl" \
  http://jetson.webredirect.org/jp6/cu126/+f/5cf/9ed17e35cb752/torch-2.5.0-cp310-cp310-linux_aarch64.whl
pip3 install "$TMP/torch-2.5.0-cp310-cp310-linux_aarch64.whl"

# ---- TorchVision 0.20.0 (ビルド済み aarch64) ----
wget -O "$TMP/torchvision-0.20.0-cp310-cp310-linux_aarch64.whl" \
  http://jetson.webredirect.org/jp6/cu126/+f/5f9/67f920de3953f/torchvision-0.20.0-cp310-cp310-linux_aarch64.whl
pip3 install "$TMP/torchvision-0.20.0-cp310-cp310-linux_aarch64.whl"

# Dynamixel SDK
pip3 install dynamixel-sdk

# モデルを事前ダウンロード
python - <<'PY'
import torchvision
for name in ("resnet18", "resnet50"):
    torchvision.models.get_model(name, weights="DEFAULT")
PY

# ===== ttyACM0/1 を 0666 に固定する udev ルール =====
sudo tee /etc/udev/rules.d/99-otterarm-ttyacm.rules >/dev/null <<'EOF'
KERNEL=="ttyACM0", MODE="0666"
KERNEL=="ttyACM1", MODE="0666"
EOF
sudo udevadm control --reload-rules
sudo udevadm trigger   # 既存デバイスにも即適用

# ===== CUDA 動作確認 =====
python - <<'PY'
import sys, torch
print("PyTorch :", torch.__version__)
print("CUDA OK :", torch.cuda.is_available())
if not torch.cuda.is_available():
    sys.exit("❌  GPU (CUDA) が利用できません")
print("Device  :", torch.cuda.get_device_name(0))
print("✅  CUDA が正常に認識されました")
PY

echo "✅ Installation completed."

rm -rf "$TMP"

# USB Speakerの認識
# pactl list short sinks
# 0   alsa_output.platform-sound.analog-stereo    module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
# 1   alsa_output.usb-C-Media_INC._USB_Sound_Device-00.analog-stereo  module-alsa-card.c  s16le 2ch 44100Hz   RUNNING
# pactl set-default-sink alsa_output.usb-C-Media_INC._USB_Sound_Device-00.analog-stereo
# pactl set-sink-volume alsa_output.usb-C-Media_INC._USB_Sound_Device-00.analog-stereo 80%
# spd-say "warmup record"

install.shの名前で保存して

1
chmod 755 ./install.sh

実行

1
./install.sh

rebootして、再起動したら

1
conda activate lerobot

する。この処理は毎回実施。

日本語対応

1
2
3
4
5
6
7
8
9
sudo apt-get install language-pack-ja language-pack-ja-base

# 2) /etc/locale.gen で ja_JP.UTF-8 の行をアンコメント
sudo sed -i '/^# *ja_JP.UTF-8 /s/^# *//' /etc/locale.gen

# 3) 実際にロケールファイルを生成
sudo locale-gen

export LANG=ja_JP.UTF-8