Skip to content

Migrate to using pixi for ROS2 environment#90

Open
Ryan4253 wants to merge 7 commits into
mainfrom
ryanliao/pixi
Open

Migrate to using pixi for ROS2 environment#90
Ryan4253 wants to merge 7 commits into
mainfrom
ryanliao/pixi

Conversation

@Ryan4253

@Ryan4253 Ryan4253 commented Jun 19, 2026

Copy link
Copy Markdown
Member

Closes #37

What has changed

Migrate software stack to pixi. Motivation can be found here. Related environment setup PR: umigv/nav-environment#6

Detailed list of changes:

  • Migrate dependency management to pixi. Remove Dockerfile, tooling.apt, and update relevant tooling
  • Modernize stack from Python 3.10 to 3.11 (LittleEndianUnion, assert_never, field type annotations, UTC)
  • (Temporarily) move back to using .h headers for tf2 since the Humble version on pixi doesn't support .hpp headers. It will be supported in Jazzy
  • Use find_package for GeographicLib since pixi ships a newer version that supports it
  • Bump VectorNav SDK commit pin. New changes allow the SDK to be built on MacOS
  • Migrate from playsound to playsound3 for e-stop warning as it is a more modern alternative

Testing plan

  • Ci (Lint, build, and unit test) passes below on all platforms we work in
  • The full stack were cloned, set up, built and simulation ran on the following platforms with no issues: WSL2, MacOS, Ubuntu, Arch

@Ryan4253 Ryan4253 force-pushed the ryanliao/pixi branch 7 times, most recently from 16d6f4f to a59b3cc Compare June 20, 2026 02:15
@Ryan4253 Ryan4253 changed the title test pixi-humble Jun 20, 2026
@Ryan4253 Ryan4253 force-pushed the ryanliao/pixi branch 10 times, most recently from b0f2034 to 292c351 Compare June 23, 2026 10:44
@hardy-ethan hardy-ethan force-pushed the ryanliao/pixi branch 8 times, most recently from 733c840 to 9d09dcd Compare June 25, 2026 05:20
@Ryan4253 Ryan4253 force-pushed the ryanliao/pixi branch 4 times, most recently from 113bb2d to cb965f1 Compare June 27, 2026 16:29
@Ryan4253 Ryan4253 changed the base branch from main to ryanliao/scripts-package-discovery June 28, 2026 20:16
Base automatically changed from ryanliao/scripts-package-discovery to main June 28, 2026 21:38
@Ryan4253 Ryan4253 force-pushed the ryanliao/pixi branch 7 times, most recently from d3a075f to b8d79b9 Compare July 2, 2026 10:12
@Ryan4253 Ryan4253 changed the base branch from main to ryanliao/sample July 2, 2026 10:20
@Ryan4253 Ryan4253 changed the base branch from ryanliao/sample to ryanliao/py-typed July 2, 2026 14:07
@Ryan4253 Ryan4253 force-pushed the ryanliao/py-typed branch 2 times, most recently from 77849ce to 15849ce Compare July 2, 2026 17:11
@Ryan4253 Ryan4253 force-pushed the ryanliao/pixi branch 2 times, most recently from 8d9f2f6 to 302d6c3 Compare July 2, 2026 17:14
@Ryan4253 Ryan4253 force-pushed the ryanliao/py-typed branch from 15849ce to f1c3ce1 Compare July 2, 2026 18:06
Ryan4253 and others added 7 commits July 6, 2026 04:50
Replace the Dockerfile, docker-build workflow and apt bootstrap with a
pixi-managed environment (pyproject + pixi.lock). Update justfile, .envrc,
VS Code settings, pyrightconfig generation, vectornav CMakeLists and the
CI runner setup to use pixi/just.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
pixi pins Python 3.11, so use stdlib datetime.UTC and typing.assert_never
in place of datetime.timezone.utc and typing_extensions.assert_never, and
drop the python3-typing-extensions dependency.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
robostack-humble only ships tf2_ros/*.h; the .hpp variants are not added
until ROS 2 Jazzy.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…Union

ctypes.LittleEndianUnion (Python 3.11+) overlays the raw register value on
the bitfield struct directly, replacing the from_buffer_copy/from_uint16
helper.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The ubuntu/macos matrix was added for the pixi migration; a failing leg
should not cancel the other, and per-job timeouts kill a hung build
instead of letting it run to the 6h default.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@hardy-ethan

hardy-ethan commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

image

image

@hardy-ethan

Copy link
Copy Markdown
Contributor

/j i'm sure it's a lock file

@hardy-ethan hardy-ethan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it also seems like there are some random unrelated (non-port) changes mixed in, can you split those out? AI plan mode should be able to present you with a list and do the split.

Comment thread pyproject.toml
log(f"Repo root: {ROOT}")

def configure_shell() -> None:
if Path(os.environ.get("SHELL", "/bin/bash")).name == "zsh":

@hardy-ethan hardy-ethan Jul 7, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unset shell == bash? if the idea is that it should be zsh or <something else>, this should use the single argument overload of .get

Comment thread src/bringup/launch/hardware.launch.py
@Ryan4253

Ryan4253 commented Jul 7, 2026

Copy link
Copy Markdown
Member Author

@hardy-ethan which changes in the list do you think is non port related? From my perspective all the changes are pixi-related so I'd rather keep them in one commit in the future to make reverting easy if needed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Establish better dependency boundaries with environment bootstrap

2 participants