diff --git a/.github/workflows/install-and-launch.yml b/.github/workflows/install-and-launch.yml index 8396ea7..fbb86c2 100644 --- a/.github/workflows/install-and-launch.yml +++ b/.github/workflows/install-and-launch.yml @@ -1,6 +1,3 @@ -# Pixi + RoboStack workspace install (clone + colcon + yarn) and a headless launch -# smoke test on Linux, macOS, and Windows GitHub-hosted runners. -# # - DEV=false -> install.sh uses url_https from config/repos.json. # - ./install.sh --skip-build clones sub-repos; colcon build runs via pixi run build. diff --git a/README.md b/README.md index 0487b5e..c995b2e 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,26 @@ export PATH="$HOME/.pixi/bin:$PATH" # if needed ./install.sh ``` +**NixOS:** enable [nix-ld](https://github.com/nix-community/nix-ld) so Pixi/RoboStack conda binaries can load the host dynamic linker (required before `./install.sh`): + +```nix +programs.nix-ld.enable = true; +``` + +For Gazebo/RViz GL, also see the [NixOS notes](docs/developer_lucy_packages.md#platform-setup) in the developer guide. + ### Windows +Install [Pixi](https://pixi.prefix.dev/latest/installation/) **≥ 0.78** first, then close and reopen your terminal so `PATH` is updated. + +**PowerShell (recommended):** + +```powershell +powershell -ExecutionPolicy Bypass -c "irm -useb https://pixi.sh/install.ps1 | iex" +``` + +Alternatives from the [Pixi installation guide](https://pixi.prefix.dev/latest/installation/): `winget install prefix-dev.pixi`, Scoop, or the MSI from GitHub Releases. + **End users:** download **`Lucy-Setup.exe`** from [GitHub Releases](https://github.com/Sentience-Robotics/lucy_ws/releases). It installs Lucy, clones sub-repos, runs `pixi install`, and builds the workspace. See the [Windows README](windows/README.md). **Developers (from source):** @@ -103,75 +121,9 @@ On Windows, the Control Center runs without tmux (one process tree). Gazebo, RVi ## Developer setup -<<<<<<< HEAD -### Managing tmux windows - -Tools (the console, CLI, viewers…) run in background windows, so a few `tmux` basics help you move between them: - -- **`Ctrl+B` then `W`** — menu of all running windows; arrow to one and press Enter to switch. -- **`Ctrl+B` then `N`** — next window. -- **`Ctrl+B` then `P`** — previous window. - -### Developer mode - -The manager includes a **Developer Mode** toggle. When ON: -- repositories are pulled over SSH instead of HTTPS -- Core & the control panel aren't launched automatically -- the launch menu also shows **Headless mode** for Gazebo (no GUI / X11) - -This setting is stored in a `.env` file. - -## GUI: RViz and Gazebo - -RViz, Gazebo and rqt are native OpenGL apps. The container can show them two ways: - -- **Native X11** — Linux/amd64 hosts with a working GPU. Needs `xhost` on the host for display forwarding. -- **VNC virtual desktop** — a self-contained desktop inside the container: `Xvfb` rendered by - Mesa `llvmpipe` (software OpenGL), a small window manager, and VNC + noVNC servers (see - [`docker/gui_desktop.sh`](docker/gui_desktop.sh)). It is the default on Apple Silicon (arm64), - where the container gets no native GL context, and can be enabled on any host on demand. - -### Choosing VNC vs native X11 (`LUCY_FORCE_VNC`) - -By default the mode is picked from your architecture. Set `LUCY_FORCE_VNC` in a root `.env` -(or the environment) to override — e.g. an amd64 Linux box can opt into the VNC desktop: - -| `LUCY_FORCE_VNC` | Behaviour | -| :-- | :-- | -| unset *(default)* | Auto: VNC on arm64, native X11 on amd64 | -| `1` / `yes` / `true` | Force the VNC desktop on any architecture (e.g. an amd64 host without working GLX) | -| `0` / `no` / `false` | Force VNC off even on arm64 (fall back to native X11 / headless) | - -### Connecting to the VNC desktop - -Enable **noVNC** (browser) or the **VNC Server** (native clients) from the launcher, then open -the address it shows. Defaults: - -| How | Address | Password | -| :-- | :-- | :-- | -| **Browser** (noVNC) | http://localhost:6080/vnc.html | (none) | -| **RealVNC Viewer** etc. | `localhost:5901` | `lucy` | -| macOS **Screen Sharing** | `open vnc://localhost:5901` | `lucy` | - -- The launcher prints the real URL/port for each viewer once it's running; if a default port is - already taken it automatically moves to the next free one. -- RealVNC Viewer warns the connection is unencrypted — expected over localhost; click through it. -- Override defaults with `LUCY_GUI_VNC_PORT` / `LUCY_GUI_NOVNC_PORT` (ports) and - `LUCY_GUI_VNC_PASSWORD` (max 8 chars) in a root `.env`. - -> **Software-rendered:** the VNC desktop has no GPU passthrough, so Gazebo runs but is CPU-slow. -> For heavy simulation prefer a native-X11 Linux host, or run headless -> (`./launch_lucy.sh --headless`) and visualize through the control panel. - -### macOS notes - -- On Apple Silicon, XQuartz can't give the container an OpenGL context, so the VNC desktop is - used by default — no setup required. +For developer mode, Pixi component tasks (`pixi run core`, `sim-headless`, …), debug shell, SSH clones, local repo overrides, ports, and advanced launch options, see the **[developer guide](docs/developer_lucy_packages.md)**. ## More - [`docs/developer_lucy_packages.md`](docs/developer_lucy_packages.md) — developer guide: per-repo docs, all `install.sh` / `launch_lucy.sh` flags, dev mode, ports, environment overrides, packages overview. - [`docs/launcher_packages.md`](docs/launcher_packages.md) — launcher guide: how to add new packages to the launcher UI and understand the configuration fields. -======= -For developer mode, Pixi component tasks (`pixi run core`, `sim-headless`, …), debug shell, SSH clones, local repo overrides, ports, and advanced launch options, see the **[developer guide](docs/developer_lucy_packages.md)**. ->>>>>>> 41e84e8 (evol(windows,docs): update Windows support and documentation) diff --git a/config/repos.json.local.example b/config/repos.json.local.example new file mode 100644 index 0000000..aada007 --- /dev/null +++ b/config/repos.json.local.example @@ -0,0 +1,35 @@ +{ + "repos": [ + { + "name": "inmoov_urdf", + "branch": "cma/feat-pixi-gpu-support", + "url_https": "https://github.com/Sentience-Robotics/inmoov_urdf.git", + "url_ssh": "git@github.com:Sentience-Robotics/inmoov_urdf.git" + }, + { + "name": "lucy_ros_packages", + "branch": "cma/fix-skip-backward-ros-on-macOS", + "url_https": "https://github.com/Sentience-Robotics/lucy_ros_packages.git", + "url_ssh": "git@github.com:Sentience-Robotics/lucy_ros_packages.git" + }, + { + "name": "lucy_control_panel", + "branch": "cma/fix-commit-lock-file", + "url_https": "https://github.com/Sentience-Robotics/lucy_control_panel.git", + "url_ssh": "git@github.com:Sentience-Robotics/lucy_control_panel.git" + }, + { + "name": "micro_ros_agent", + "branch": "jazzy", + "optional": true, + "url_https": "https://github.com/micro-ROS/micro-ROS-Agent.git", + "url_ssh": "git@github.com:micro-ROS/micro-ROS-Agent.git" + }, + { + "name": "thais_urdf", + "branch": "dev", + "url_https": "https://github.com/Sentience-Robotics/thais_urdf.git", + "url_ssh": "git@github.com:Sentience-Robotics/thais_urdf.git" + } + ] +} \ No newline at end of file diff --git a/docs/developer_lucy_packages.md b/docs/developer_lucy_packages.md index 18a5b41..a11adb1 100644 --- a/docs/developer_lucy_packages.md +++ b/docs/developer_lucy_packages.md @@ -94,7 +94,7 @@ Pixi installs RoboStack Jazzy; `colcon build --symlink-install` builds `src/`; ` | **inmoov_urdf** | URDF, Gazebo/RViz launches | | **lucy_ros_packages** | `lucy_bringup`, ros2_control, cameras | | **lucy_control_panel** | Web UI | -| **micro_ros_agent**, **audio_common** | Optional (`optional: true` in repos.json) | +| **micro_ros_agent** | Optional (`optional: true` in repos.json) | ## Launch diff --git a/docs/pixi_release.md b/docs/pixi_release.md index 698b053..3637804 100644 --- a/docs/pixi_release.md +++ b/docs/pixi_release.md @@ -7,7 +7,7 @@ This document outlines the **deferred** end-user release path. The PoC branch ke Full-stack artifact (not `lucy_bringup` alone): - All `lucy_ros_packages/*`, `inmoov_urdf`, optional `thais_urdf` -- External clones built in CI (`micro_ros_agent`, `audio_common`) +- External clones built in CI (`micro_ros_agent`) - Launcher assets + control panel packaging strategy - Release CI manifest with `preview = ["pixi-build"]` only in the release workflow @@ -16,7 +16,7 @@ Full-stack artifact (not `lucy_bringup` alone): | Option | Best for | |--------|----------| | Private conda channel (prefix.dev) | Networked workstations | -| Pixi Pack bundles | Jetson / air-gapped | +| Pixi Pack bundles | Jetson | ## Suggested follow-up commits diff --git a/docs/pixi_setup.md b/docs/pixi_setup.md index 1efc3f7..d29b464 100644 --- a/docs/pixi_setup.md +++ b/docs/pixi_setup.md @@ -18,7 +18,7 @@ When adding or changing workspace packages: 1. Read `package.xml` / `CMakeLists.txt` for new `depend` / `find_package` entries. 2. Check whether RoboStack provides `ros-jazzy-` on [prefix.dev/robostack-jazzy](https://prefix.dev/robostack-jazzy). 3. If available, add to `pixi.toml` under `[feature.ros.dependencies]`. -4. If not available (e.g. `micro_ros_agent`, `audio_common`), add a clone entry to `config/repos.json` (use `"optional": true` when the stack works without it). +4. If not available (e.g. `micro_ros_agent`), add a clone entry to `config/repos.json` (use `"optional": true` when the stack works without it). 5. Regenerate the lock and install: ```bash @@ -29,15 +29,6 @@ pixi install # updates pixi.lock for every platform in pixi.toml **Pixi ≥ 0.78** is recommended for multi-platform lock resolution (`curl -fsSL https://pixi.sh/install.sh | bash`). -## RoboStack vs source clones - -| Approach | When to use | -|----------|-------------| -| **Pixi / RoboStack** | Standard ROS Jazzy packages (`ros-jazzy-desktop`, `ros-jazzy-ros-gz`, controllers, rosbridge, etc.) | -| **Clone to `src/`** | Packages not on RoboStack, forks, or workspace-specific repos (`lucy_ros_packages`, `inmoov_urdf`) | -| **Optional `src/` clones** | `micro_ros_agent`, `audio_common` — not on RoboStack; cloned by default for release/CI parity but **not required** for core bringup or the control panel. Entries carry `"optional": true` in `repos.json`; omit from `repos.json.local` if you do not need them | -| **Local build** | RealSense — not in Pixi; run `./scripts/build_local_realsense.sh` **after** a normal `pixi run build` (or `LUCY_BUILD_REALSENSE=1 ./install.sh` at end of install) | - ### Mutex pin `ros2-distro-mutex = "0.15.*"` in `pixi.toml` keeps all RoboStack packages on the same rebuild cycle ([RoboStack #125](https://github.com/RoboStack/ros-jazzy/issues/125)). diff --git a/tests/test_repos_config.py b/tests/test_repos_config.py index caf3a55..5deeeac 100644 --- a/tests/test_repos_config.py +++ b/tests/test_repos_config.py @@ -150,4 +150,3 @@ def test_optional_flag_preserved_in_json(): data = json.loads(cfg.read_text()) optional = [r["name"] for r in data["repos"] if r.get("optional")] assert "micro_ros_agent" in optional - assert "audio_common" in optional