| #!/usr/bin/env bash |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| set -euo pipefail |
|
|
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" |
|
|
| |
| ARCH="$(uname -m)" |
| echo "[OK] Architecture: $ARCH" |
|
|
| |
| if ! command -v uv &>/dev/null; then |
| echo "[INFO] uv not found β installing via official installer β¦" |
| curl -LsSf https://astral.sh/uv/install.sh | sh |
|
|
| |
| if [ -f "$HOME/.local/bin/env" ]; then |
| |
| source "$HOME/.local/bin/env" |
| elif [ -f "$HOME/.cargo/env" ]; then |
| |
| source "$HOME/.cargo/env" |
| else |
| export PATH="$HOME/.local/bin:$PATH" |
| fi |
|
|
| |
| if ! command -v uv &>/dev/null; then |
| echo "[ERROR] uv installation succeeded but binary not found on PATH." |
| echo " Please add ~/.local/bin (or ~/.cargo/bin) to your PATH and re-run." |
| exit 1 |
| fi |
| fi |
| echo "[OK] uv $(uv --version)" |
|
|
| |
| echo "[INFO] Installing uv-managed Python 3.10 (includes development headers) β¦" |
| uv python install 3.10 |
| MANAGED_PY="$(uv python find --no-project 3.10)" |
| echo "[OK] Using Python: $MANAGED_PY" |
|
|
| |
| cd "$REPO_ROOT" |
| echo "[INFO] Removing old .venv_teleop (if present) β¦" |
| rm -rf .venv_teleop |
|
|
| |
| echo "[INFO] Creating .venv_teleop with uv-managed Python 3.10 β¦" |
| uv venv .venv_teleop --python "$MANAGED_PY" --prompt gear_sonic_teleop |
| |
| source .venv_teleop/bin/activate |
| echo "[INFO] Installing gear_sonic[teleop] β¦" |
| uv pip install -e "gear_sonic[teleop]" |
|
|
| |
| echo "[INFO] Installing XRoboToolkit SDK β¦" |
| |
| |
| uv pip install cmake pybind11 setuptools |
| echo "[OK] cmake $(cmake --version | head -1)" |
| |
| export CMAKE_PREFIX_PATH="$(python -m pybind11 --cmakedir)" |
| echo "[OK] pybind11 cmake dir: $CMAKE_PREFIX_PATH" |
|
|
| |
| |
| XRT_DIR="$REPO_ROOT/external_dependencies/XRoboToolkit-PC-Service-Pybind_X86_and_ARM64" |
| if [ "$ARCH" = "aarch64" ] && [ ! -f "$XRT_DIR/lib/aarch64/libPXREARobotSDK.so" ]; then |
| echo "[INFO] Building PXREARobotSDK for aarch64 (Jetson Orin) β¦" |
| XRT_TMP="$XRT_DIR/tmp" |
| mkdir -p "$XRT_TMP" |
| if [ ! -d "$XRT_TMP/XRoboToolkit-PC-Service" ]; then |
| git clone -b orin https://github.com/XR-Robotics/XRoboToolkit-PC-Service.git "$XRT_TMP/XRoboToolkit-PC-Service" |
| fi |
| pushd "$XRT_TMP/XRoboToolkit-PC-Service/RoboticsService/PXREARobotSDK" > /dev/null |
| bash build.sh |
| popd > /dev/null |
| mkdir -p "$XRT_DIR/lib/aarch64" "$XRT_DIR/include/aarch64" |
| cp "$XRT_TMP/XRoboToolkit-PC-Service/RoboticsService/PXREARobotSDK/PXREARobotSDK.h" \ |
| "$XRT_DIR/include/aarch64/" |
| cp -r "$XRT_TMP/XRoboToolkit-PC-Service/RoboticsService/PXREARobotSDK/nlohmann" \ |
| "$XRT_DIR/include/aarch64/nlohmann/" |
| cp "$XRT_TMP/XRoboToolkit-PC-Service/RoboticsService/PXREARobotSDK/build/libPXREARobotSDK.so" \ |
| "$XRT_DIR/lib/aarch64/" |
| rm -rf "$XRT_TMP" |
| echo "[OK] PXREARobotSDK aarch64 native library built and installed" |
| fi |
|
|
| uv pip install --no-build-isolation -e external_dependencies/XRoboToolkit-PC-Service-Pybind_X86_and_ARM64/ |
|
|
| |
| |
| |
| |
| echo "[INFO] Installing isaacteleop[cloudxr]~=1.3.0 from pypi.nvidia.com β¦" |
| uv pip install 'isaacteleop[cloudxr]~=1.3.0' --prerelease=allow \ |
| --extra-index-url https://pypi.nvidia.com |
|
|
| |
| |
| if [ ! -f "$HOME/cloudxr.env" ]; then |
| echo "NV_DEVICE_PROFILE=Quest3" > "$HOME/cloudxr.env" |
| echo "[OK] Seeded $HOME/cloudxr.env with NV_DEVICE_PROFILE=Quest3" |
| else |
| echo "[OK] $HOME/cloudxr.env already exists (leaving as-is)" |
| fi |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| if { [ "$ARCH" = "aarch64" ] && [ "$(whoami)" = "unitree" ]; } \ |
| || [ "${SKIP_SIM_AND_UNITREE:-0}" = "1" ]; then |
| echo "[SKIP] Skipping CycloneDDS build, sim extra & unitree_sdk2_python" |
| else |
| |
| |
| |
| |
| |
| |
| if [ "$ARCH" = "aarch64" ]; then |
| CDDS_DIR="$HOME/cyclonedds" |
| CDDS_PREFIX="${CYCLONEDDS_HOME:-$CDDS_DIR/install}" |
| if [ ! -f "$CDDS_PREFIX/lib/libddsc.so" ]; then |
| echo "[INFO] Building CycloneDDS releases/0.10.x β $CDDS_PREFIX β¦" |
| |
| |
| |
| if [ ! -d "$CDDS_DIR/.git" ]; then |
| git clone -b releases/0.10.x --depth 1 \ |
| https://github.com/eclipse-cyclonedds/cyclonedds.git "$CDDS_DIR" |
| fi |
| cmake -S "$CDDS_DIR" -B "$CDDS_DIR/build" \ |
| -DCMAKE_INSTALL_PREFIX="$CDDS_PREFIX" \ |
| -DBUILD_EXAMPLES=OFF \ |
| -DBUILD_TESTING=OFF |
| cmake --build "$CDDS_DIR/build" -j"$(nproc)" |
| cmake --install "$CDDS_DIR/build" |
| echo "[OK] CycloneDDS installed at $CDDS_PREFIX" |
| else |
| echo "[OK] CycloneDDS already present at $CDDS_PREFIX (libddsc.so found)" |
| fi |
| export CYCLONEDDS_HOME="$CDDS_PREFIX" |
| fi |
|
|
| |
| echo "[INFO] Installing sim extra β¦" |
| uv pip install -e "gear_sonic[sim]" |
|
|
| |
| echo "[INFO] Installing unitree_sdk2_python β¦" |
| uv pip install -e external_dependencies/unitree_sdk2_python |
| fi |
|
|
| echo "" |
| echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" |
| echo " Setup complete! Activate the venv with:" |
| echo "" |
| echo " source .venv_teleop/bin/activate" |
| echo "" |
| echo " You should see (gear_sonic_teleop) in your prompt." |
| echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" |
|
|