diff --git a/.conda/base/recipe.yaml b/.conda/base/recipe.yaml index 57318aae7..cdfb2649e 100644 --- a/.conda/base/recipe.yaml +++ b/.conda/base/recipe.yaml @@ -3,7 +3,7 @@ package: name: unilabos - version: 0.11.3 + version: 0.12.1 source: path: ../../unilabos @@ -30,12 +30,13 @@ build: requirements: host: - - python ==3.11.14 + - python ==3.12.13 - pip - setuptools - zstd - zstandard run: + - python >=3.12,<3.13 - zstd - zstandard - networkx @@ -54,9 +55,9 @@ requirements: - pymodbus - matplotlib - pylibftdi - - uni-lab::unilabos-env ==0.11.3 + - uni-lab::unilabos-env ==0.12.1 about: repository: https://github.com/deepmodeling/Uni-Lab-OS license: GPL-3.0-only - description: "UniLabOS - Production package with minimal ROS2 dependencies" + description: "UniLabOS - Production package for ROS 2 Jazzy and CPython 3.12" diff --git a/.conda/environment/recipe.yaml b/.conda/environment/recipe.yaml index c41dac2bb..a5609bfbf 100644 --- a/.conda/environment/recipe.yaml +++ b/.conda/environment/recipe.yaml @@ -2,7 +2,7 @@ package: name: unilabos-env - version: 0.11.3 + version: 0.12.1 build: noarch: generic @@ -12,28 +12,31 @@ requirements: # Python - zstd - zstandard - - conda-forge::python ==3.11.14 + - conda-forge::python ==3.12.13 + - conda-forge::numpy >=2,<3 + - uni-lab::opentrons-shared-data ==9.1.0+unilabos.np2.1 py312_np2_1 - conda-forge::opencv # ROS2 dependencies (from ci-check.yml) - - robostack-staging::ros-humble-ros-core - - robostack-staging::ros-humble-action-msgs - - robostack-staging::ros-humble-std-msgs - - robostack-staging::ros-humble-geometry-msgs - - robostack-staging::ros-humble-control-msgs - - robostack-staging::ros-humble-nav2-msgs - - robostack-staging::ros-humble-cv-bridge - - robostack-staging::ros-humble-vision-opencv - - robostack-staging::ros-humble-tf-transformations - - robostack-staging::ros-humble-moveit-msgs - - robostack-staging::ros-humble-tf2-ros - - robostack-staging::ros-humble-tf2-ros-py + - robostack-jazzy::ros2-distro-mutex 0.15.* jazzy_* + - robostack-jazzy::ros-jazzy-ros-core + - robostack-jazzy::ros-jazzy-action-msgs + - robostack-jazzy::ros-jazzy-std-msgs + - robostack-jazzy::ros-jazzy-geometry-msgs + - robostack-jazzy::ros-jazzy-control-msgs + - robostack-jazzy::ros-jazzy-nav2-msgs + - robostack-jazzy::ros-jazzy-cv-bridge + - robostack-jazzy::ros-jazzy-vision-opencv + - robostack-jazzy::ros-jazzy-tf-transformations + - robostack-jazzy::ros-jazzy-moveit-msgs + - robostack-jazzy::ros-jazzy-tf2-ros + - robostack-jazzy::ros-jazzy-tf2-ros-py - conda-forge::transforms3d - conda-forge::uv # UniLabOS custom messages - - uni-lab::ros-humble-unilabos-msgs + - uni-lab::ros-jazzy-unilabos-msgs about: repository: https://github.com/deepmodeling/Uni-Lab-OS license: GPL-3.0-only - description: "UniLabOS Environment - ROS2 and conda dependencies" + description: "UniLabOS Environment - ROS 2 Jazzy, CPython 3.12, and conda dependencies" diff --git a/.conda/full/recipe.yaml b/.conda/full/recipe.yaml index b3a839908..5d1c83c0a 100644 --- a/.conda/full/recipe.yaml +++ b/.conda/full/recipe.yaml @@ -3,7 +3,7 @@ package: name: unilabos-full - version: 0.11.3 + version: 0.12.1 build: noarch: generic @@ -11,7 +11,7 @@ build: requirements: run: # Base unilabos package (includes unilabos-env) - - uni-lab::unilabos ==0.11.3 + - uni-lab::unilabos ==0.12.1 # Documentation tools - sphinx - sphinx_rtd_theme @@ -24,19 +24,19 @@ requirements: - jupyros - colcon-common-extensions # ROS2 full desktop (includes rviz2, gazebo, etc.) - - robostack-staging::ros-humble-desktop-full + - robostack-jazzy::ros-jazzy-desktop-full # Navigation and motion control - - ros-humble-navigation2 - - ros-humble-ros2-control - - ros-humble-robot-state-publisher - - ros-humble-joint-state-publisher + - ros-jazzy-navigation2 + - ros-jazzy-ros2-control + - ros-jazzy-robot-state-publisher + - ros-jazzy-joint-state-publisher # MoveIt motion planning - - ros-humble-moveit - - ros-humble-moveit-servo + - ros-jazzy-moveit + - ros-jazzy-moveit-servo # Simulation - - ros-humble-simulation + - ros-jazzy-simulation about: repository: https://github.com/deepmodeling/Uni-Lab-OS license: GPL-3.0-only - description: "UniLabOS Full - Complete package with ROS2 Desktop, MoveIt, Navigation2, Gazebo, Jupyter" + description: "UniLabOS Full - ROS 2 Jazzy Desktop, MoveIt, Navigation2, Gazebo, and Jupyter" diff --git a/.github/workflows/ci-check.yml b/.github/workflows/ci-check.yml index 823ed9803..e4750875a 100644 --- a/.github/workflows/ci-check.yml +++ b/.github/workflows/ci-check.yml @@ -8,7 +8,7 @@ on: jobs: registry-check: - runs-on: windows-latest + runs-on: windows-2022 env: # Fix Unicode encoding issue on Windows runner (cp1252 -> utf-8) @@ -33,20 +33,34 @@ jobs: with: miniforge-version: latest use-mamba: true - channels: robostack-staging,conda-forge,uni-lab - channel-priority: flexible + python-version: '3.12.13' + channels: conda-forge,robostack-jazzy + channel-priority: strict activate-environment: check-env auto-update-conda: false show-channel-urls: true - - name: Install ROS dependencies, uv and unilabos-msgs + - name: Install ROS 2 Jazzy dependencies and build tools run: | - echo Installing ROS dependencies... - mamba install -n check-env --override-channels -c robostack-staging -c conda-forge -c uni-lab conda-forge::uv conda-forge::opencv robostack-staging::ros-humble-ros-core robostack-staging::ros-humble-action-msgs robostack-staging::ros-humble-std-msgs robostack-staging::ros-humble-geometry-msgs robostack-staging::ros-humble-control-msgs robostack-staging::ros-humble-nav2-msgs uni-lab::ros-humble-unilabos-msgs robostack-staging::ros-humble-cv-bridge robostack-staging::ros-humble-vision-opencv robostack-staging::ros-humble-tf-transformations robostack-staging::ros-humble-moveit-msgs robostack-staging::ros-humble-tf2-ros robostack-staging::ros-humble-tf2-ros-py conda-forge::transforms3d -y + echo Installing ROS 2 Jazzy dependencies... + mamba install -n check-env --override-channels -c conda-forge -c robostack-jazzy conda-forge::numpy=2 conda-forge::uv conda-forge::opencv conda-forge::colcon-common-extensions robostack-jazzy::ros2-distro-mutex=0.15 robostack-jazzy::ros-jazzy-ros-core robostack-jazzy::ros-jazzy-action-msgs robostack-jazzy::ros-jazzy-std-msgs robostack-jazzy::ros-jazzy-geometry-msgs robostack-jazzy::ros-jazzy-control-msgs robostack-jazzy::ros-jazzy-nav2-msgs robostack-jazzy::ros-jazzy-cv-bridge robostack-jazzy::ros-jazzy-vision-opencv robostack-jazzy::ros-jazzy-tf-transformations robostack-jazzy::ros-jazzy-moveit-msgs robostack-jazzy::ros-jazzy-tf2-ros robostack-jazzy::ros-jazzy-tf2-ros-py conda-forge::transforms3d -y + + - name: Initialize MSVC x64 toolchain + uses: ilammy/msvc-dev-cmd@v1 + with: + arch: x64 + + - name: Build unilabos_msgs for Jazzy/cp312 + run: | + call conda activate check-env + colcon build --base-paths unilabos_msgs --build-base build\unilabos_msgs --install-base install\unilabos_msgs --merge-install --packages-select unilabos_msgs --cmake-args -DBUILD_TESTING=OFF + call install\unilabos_msgs\setup.bat + python -c "from unilabos_msgs.msg import Resource; print('unilabos_msgs Jazzy/cp312: OK')" - name: Install pip dependencies and unilabos run: | call conda activate check-env + call install\unilabos_msgs\setup.bat echo Installing pip dependencies... uv pip install -r unilabos/utils/requirements.txt uv pip install pywinauto git+https://github.com/Xuwznln/pylabrobot.git @@ -57,6 +71,7 @@ jobs: - name: Run HostLink networking tests run: | call conda activate check-env + call install\unilabos_msgs\setup.bat echo Running HostLink, ROS2 domain and networking runtime tests... python -m pytest -q tests\hostlink tests\networking tests\ros\test_domain_init.py -p no:launch_testing -p no:launch_ros @@ -68,6 +83,7 @@ jobs: # 不能用 "if errorlevel 1"(它对负数退出码会误判为成功)。 run: | call conda activate check-env + call install\unilabos_msgs\setup.bat echo Running check mode... set ATTEMPTS=4 set COUNT=0 diff --git a/.github/workflows/conda-pack-build.yml b/.github/workflows/conda-pack-build.yml index 2730ff4d1..59faf8aef 100644 --- a/.github/workflows/conda-pack-build.yml +++ b/.github/workflows/conda-pack-build.yml @@ -51,7 +51,7 @@ jobs: platform: osx-arm64 env_file: unilabos-osx-arm64.yaml script_ext: sh - - os: windows-latest + - os: windows-2022 platform: win-64 env_file: unilabos-win64.yaml script_ext: bat @@ -84,14 +84,24 @@ jobs: ref: ${{ github.event.inputs.branch || github.event.workflow_run.head_sha || github.ref }} fetch-depth: 0 + - name: Create artifact label + if: steps.should_build.outputs.should_build == 'true' + id: artifact_label + shell: bash + env: + RAW_PACKAGE_REF: ${{ env.PACKAGE_REF }} + run: | + SAFE_REF="${RAW_PACKAGE_REF//\//-}" + echo "value=$SAFE_REF" >> "$GITHUB_OUTPUT" + - name: Setup Miniforge (with mamba) if: steps.should_build.outputs.should_build == 'true' uses: conda-incubator/setup-miniconda@v4 with: miniforge-version: latest use-mamba: true - python-version: '3.11.14' - channels: conda-forge,robostack-staging,uni-lab + python-version: '3.12.13' + channels: conda-forge,robostack-jazzy,uni-lab channel-priority: flexible activate-environment: unilab auto-update-conda: false @@ -105,10 +115,10 @@ jobs: echo Build full: ${{ env.BUILD_FULL }} if "${{ env.BUILD_FULL }}"=="true" ( echo Installing unilabos-full ^(complete package^)... - mamba install -n unilab --override-channels -c uni-lab -c robostack-staging -c conda-forge uni-lab::unilabos-full conda-pack zstandard -y + mamba install -n unilab --override-channels -c uni-lab -c conda-forge -c robostack-jazzy uni-lab::unilabos-full conda-pack zstandard -y ) else ( echo Installing unilabos ^(minimal package^)... - mamba install -n unilab --override-channels -c uni-lab -c robostack-staging -c conda-forge uni-lab::unilabos conda-pack zstandard -y + mamba install -n unilab --override-channels -c uni-lab -c conda-forge -c robostack-jazzy uni-lab::unilabos conda-pack zstandard -y ) - name: Install conda-pack, unilabos and dependencies (Unix) @@ -120,50 +130,50 @@ jobs: echo "Build full: ${{ env.BUILD_FULL }}" if [[ "${{ env.BUILD_FULL }}" == "true" ]]; then echo "Installing unilabos-full (complete package)..." - mamba install -n unilab --override-channels -c uni-lab -c robostack-staging -c conda-forge uni-lab::unilabos-full conda-pack zstandard -y + mamba install -n unilab --override-channels -c uni-lab -c conda-forge -c robostack-jazzy uni-lab::unilabos-full conda-pack zstandard -y else echo "Installing unilabos (minimal package)..." - mamba install -n unilab --override-channels -c uni-lab -c robostack-staging -c conda-forge uni-lab::unilabos conda-pack zstandard -y + mamba install -n unilab --override-channels -c uni-lab -c conda-forge -c robostack-jazzy uni-lab::unilabos conda-pack zstandard -y fi - - name: Get latest ros-humble-unilabos-msgs version (Windows) + - name: Get latest ros-jazzy-unilabos-msgs version (Windows) if: steps.should_build.outputs.should_build == 'true' && matrix.platform == 'win-64' id: msgs_version_win run: | - echo Checking installed ros-humble-unilabos-msgs version... - conda list -n unilab ros-humble-unilabos-msgs - for /f "tokens=2" %%i in ('conda list -n unilab ros-humble-unilabos-msgs --json ^| python -c "import sys, json; pkgs=json.load(sys.stdin); print(pkgs[0]['version'] if pkgs else 'not-found')"') do set VERSION=%%i + echo Checking installed ros-jazzy-unilabos-msgs version... + conda list -n unilab ros-jazzy-unilabos-msgs + for /f "tokens=2" %%i in ('conda list -n unilab ros-jazzy-unilabos-msgs --json ^| python -c "import sys, json; pkgs=json.load(sys.stdin); print(pkgs[0]['version'] if pkgs else 'not-found')"') do set VERSION=%%i echo installed_version=%VERSION% >> %GITHUB_OUTPUT% - echo Installed ros-humble-unilabos-msgs version: %VERSION% + echo Installed ros-jazzy-unilabos-msgs version: %VERSION% - - name: Get latest ros-humble-unilabos-msgs version (Unix) + - name: Get latest ros-jazzy-unilabos-msgs version (Unix) if: steps.should_build.outputs.should_build == 'true' && matrix.platform != 'win-64' id: msgs_version_unix shell: bash run: | - echo "Checking installed ros-humble-unilabos-msgs version..." - VERSION=$(conda list -n unilab ros-humble-unilabos-msgs --json | python -c "import sys, json; pkgs=json.load(sys.stdin); print(pkgs[0]['version'] if pkgs else 'not-found')") + echo "Checking installed ros-jazzy-unilabos-msgs version..." + VERSION=$(conda list -n unilab ros-jazzy-unilabos-msgs --json | python -c "import sys, json; pkgs=json.load(sys.stdin); print(pkgs[0]['version'] if pkgs else 'not-found')") echo "installed_version=$VERSION" >> $GITHUB_OUTPUT - echo "Installed ros-humble-unilabos-msgs version: $VERSION" + echo "Installed ros-jazzy-unilabos-msgs version: $VERSION" - - name: Check for newer ros-humble-unilabos-msgs (Windows) + - name: Check for newer ros-jazzy-unilabos-msgs (Windows) if: steps.should_build.outputs.should_build == 'true' && matrix.platform == 'win-64' run: | - echo Checking for available ros-humble-unilabos-msgs versions... - mamba search --override-channels -c uni-lab -c robostack-staging -c conda-forge ros-humble-unilabos-msgs || echo Search completed + echo Checking for available ros-jazzy-unilabos-msgs versions... + mamba search --override-channels -c uni-lab -c conda-forge -c robostack-jazzy ros-jazzy-unilabos-msgs || echo Search completed echo. - echo Updating ros-humble-unilabos-msgs to latest version... - mamba update -n unilab --override-channels -c uni-lab -c robostack-staging -c conda-forge ros-humble-unilabos-msgs -y || echo Already at latest version + echo Updating ros-jazzy-unilabos-msgs to latest version... + mamba update -n unilab --override-channels -c uni-lab -c conda-forge -c robostack-jazzy ros-jazzy-unilabos-msgs -y || echo Already at latest version - - name: Check for newer ros-humble-unilabos-msgs (Unix) + - name: Check for newer ros-jazzy-unilabos-msgs (Unix) if: steps.should_build.outputs.should_build == 'true' && matrix.platform != 'win-64' shell: bash run: | - echo "Checking for available ros-humble-unilabos-msgs versions..." - mamba search --override-channels -c uni-lab -c robostack-staging -c conda-forge ros-humble-unilabos-msgs || echo "Search completed" + echo "Checking for available ros-jazzy-unilabos-msgs versions..." + mamba search --override-channels -c uni-lab -c conda-forge -c robostack-jazzy ros-jazzy-unilabos-msgs || echo "Search completed" echo "" - echo "Updating ros-humble-unilabos-msgs to latest version..." - mamba update -n unilab --override-channels -c uni-lab -c robostack-staging -c conda-forge ros-humble-unilabos-msgs -y || echo "Already at latest version" + echo "Updating ros-jazzy-unilabos-msgs to latest version..." + mamba update -n unilab --override-channels -c uni-lab -c conda-forge -c robostack-jazzy ros-jazzy-unilabos-msgs -y || echo "Already at latest version" - name: Install latest unilabos from source (Windows) if: steps.should_build.outputs.should_build == 'true' && matrix.platform == 'win-64' @@ -193,7 +203,7 @@ jobs: mamba env list echo. echo === Installed Packages === - mamba list -n unilab | findstr /C:"unilabos" /C:"ros-humble-unilabos-msgs" || mamba list -n unilab + mamba list -n unilab | findstr /C:"unilabos" /C:"ros-jazzy-unilabos-msgs" || mamba list -n unilab echo. echo === Python Packages === mamba run -n unilab pip list | findstr unilabos || mamba run -n unilab pip list @@ -206,7 +216,7 @@ jobs: mamba env list echo "" echo "=== Installed Packages ===" - mamba list -n unilab | grep -E "(unilabos|ros-humble-unilabos-msgs)" || mamba list -n unilab + mamba list -n unilab | grep -E "(unilabos|ros-jazzy-unilabos-msgs)" || mamba list -n unilab echo "" echo "=== Python Packages ===" mamba run -n unilab pip list | grep unilabos || mamba run -n unilab pip list @@ -333,7 +343,7 @@ jobs: if: steps.should_build.outputs.should_build == 'true' uses: actions/upload-artifact@v6 with: - name: unilab-pack-${{ matrix.platform }}-${{ env.PACKAGE_REF }} + name: unilab-pack-${{ matrix.platform }}-${{ steps.artifact_label.outputs.value }} path: dist-package/ retention-days: 90 if-no-files-found: error @@ -346,7 +356,7 @@ jobs: echo ========================================== echo Platform: ${{ matrix.platform }} echo Branch: ${{ env.PACKAGE_REF }} - echo Python version: 3.11.14 + echo Python version: 3.12.13 if "${{ env.BUILD_FULL }}"=="true" ( echo Package: unilabos-full ^(complete^) ) else ( @@ -356,7 +366,7 @@ jobs: echo Distribution package contents: dir dist-package echo. - echo Artifact name: unilab-pack-${{ matrix.platform }}-${{ env.PACKAGE_REF }} + echo Artifact name: unilab-pack-${{ matrix.platform }}-${{ steps.artifact_label.outputs.value }} echo. echo After download, extract the ZIP and run: echo install_unilab.bat @@ -371,7 +381,7 @@ jobs: echo "==========================================" echo "Platform: ${{ matrix.platform }}" echo "Branch: ${{ env.PACKAGE_REF }}" - echo "Python version: 3.11.14" + echo "Python version: 3.12.13" if [[ "${{ env.BUILD_FULL }}" == "true" ]]; then echo "Package: unilabos-full (complete)" else @@ -381,7 +391,7 @@ jobs: echo "Distribution package contents:" ls -lh dist-package/ echo "" - echo "Artifact name: unilab-pack-${{ matrix.platform }}-${{ env.PACKAGE_REF }}" + echo "Artifact name: unilab-pack-${{ matrix.platform }}-${{ steps.artifact_label.outputs.value }}" echo "" echo "After download:" echo " install_unilab.sh" diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 3e4b07ddf..cf483cd0e 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -55,8 +55,8 @@ jobs: with: miniforge-version: latest use-mamba: true - python-version: '3.11.14' - channels: conda-forge,robostack-staging,uni-lab + python-version: '3.12.13' + channels: conda-forge,robostack-jazzy,uni-lab channel-priority: flexible activate-environment: unilab auto-update-conda: false @@ -66,7 +66,7 @@ jobs: run: | echo "Installing unilabos and dependencies to unilab environment..." echo "Using mamba for faster and more reliable dependency resolution..." - mamba install -n unilab --override-channels -c uni-lab -c robostack-staging -c conda-forge uni-lab::unilabos -y + mamba install -n unilab --override-channels -c uni-lab -c conda-forge -c robostack-jazzy uni-lab::unilabos -y - name: Install latest unilabos from source run: | diff --git a/.github/workflows/multi-platform-build.yml b/.github/workflows/multi-platform-build.yml index 45e0872c4..ab9cefd4f 100644 --- a/.github/workflows/multi-platform-build.yml +++ b/.github/workflows/multi-platform-build.yml @@ -69,7 +69,7 @@ jobs: - os: macos-latest # ARM64 platform: osx-arm64 env_file: unilabos-osx-arm64.yaml - - os: windows-latest + - os: windows-2022 platform: win-64 env_file: unilabos-win64.yaml @@ -105,8 +105,8 @@ jobs: with: miniforge-version: latest use-mamba: true - python-version: '3.11.14' - channels: conda-forge,robostack-staging + python-version: '3.12.13' + channels: conda-forge,robostack-jazzy channel-priority: strict activate-environment: build-env auto-update-conda: false @@ -142,7 +142,7 @@ jobs: - name: Build conda package if: steps.should_build.outputs.should_build == 'true' run: | - conda run -n build-env rattler-build build -r ./recipes/msgs/recipe.yaml --target-platform ${{ matrix.platform }} -c robostack -c robostack-staging -c conda-forge + conda run -n build-env rattler-build build -r ./recipes/msgs/recipe.yaml --target-platform ${{ matrix.platform }} -c conda-forge -c robostack-jazzy - name: List built packages if: steps.should_build.outputs.should_build == 'true' diff --git a/.github/workflows/opentrons-numpy2-build.yml b/.github/workflows/opentrons-numpy2-build.yml new file mode 100644 index 000000000..3c6d6308e --- /dev/null +++ b/.github/workflows/opentrons-numpy2-build.yml @@ -0,0 +1,88 @@ +name: Opentrons NumPy 2 Build + +on: + push: + branches: + - feat/jazzy-py312 + tags: + - opentrons-numpy2-v* + paths: + - .github/workflows/opentrons-numpy2-build.yml + - recipes/opentrons-shared-data/** + workflow_dispatch: + inputs: + upload_to_anaconda: + description: '是否上传到 Anaconda.org uni-lab 频道' + required: false + default: false + type: boolean + +jobs: + build: + runs-on: ubuntu-latest + + defaults: + run: + shell: bash -l {0} + + steps: + - uses: actions/checkout@v6 + with: + ref: ${{ github.ref }} + fetch-depth: 0 + + - name: Setup Miniforge + uses: conda-incubator/setup-miniconda@v4 + with: + miniforge-version: latest + use-mamba: true + python-version: '3.12.13' + channels: conda-forge,uni-lab + channel-priority: strict + activate-environment: build-env + auto-update-conda: false + show-channel-urls: true + + - name: Install build tools + run: | + mamba install -n build-env --override-channels -c conda-forge rattler-build anaconda-client -y + echo "CONDA_NO_PLUGINS=true" >> "$GITHUB_ENV" + echo "PYTHONUTF8=1" >> "$GITHUB_ENV" + echo "PYTHONIOENCODING=utf-8" >> "$GITHUB_ENV" + echo "ANACONDA_CLIENT_FORCE_STANDALONE=1" >> "$GITHUB_ENV" + + - name: Build patched package + run: | + conda run -n build-env rattler-build build -r recipes/opentrons-shared-data/recipe.yaml -c conda-forge + + - name: Verify NumPy 2 package metadata and runtime + run: | + PACKAGE_PATH=$(find ./output/noarch -name "opentrons-shared-data-9.1.0+unilabos.np2.1-*.conda" -print -quit) + test -n "$PACKAGE_PATH" + mamba create -n opentrons-test --override-channels -c conda-forge \ + python=3.12.13 "numpy>=2.5,<3" jsonschema pydantic typing-extensions pip -y + mamba install -n opentrons-test --override-channels -c conda-forge "$PACKAGE_PATH" -y + conda run -n opentrons-test python -c "import importlib.metadata as m; import numpy as np; from opentrons_shared_data.labware import labware_definition as ld; reqs=m.requires('opentrons-shared-data') or []; assert np.lib.NumpyVersion(np.__version__) >= '2.5.0'; assert ld.trapezoid([1, 2, 3]) == 4; assert any(r.startswith('numpy') and '>=2' in r and '<3' in r for r in reqs), reqs; assert m.version('opentrons-shared-data') == '9.1.0+unilabos.np2.1'; print(np.__version__, m.version('opentrons-shared-data'))" + conda run -n opentrons-test pip check + conda run -n opentrons-test python -c "from pathlib import Path; import sys; root=Path(sys.prefix)/'share'/'licenses'/'opentrons-shared-data'; assert (root/'LICENSE').is_file(); assert (root/'NOTICE').is_file(); print(root)" + + - name: Prepare artifact + run: | + mkdir -p conda-packages-temp + find ./output/noarch -name "opentrons-shared-data-*.conda" -exec cp {} conda-packages-temp/ \; + ls -la conda-packages-temp/ + + - name: Upload conda package artifact + uses: actions/upload-artifact@v6 + with: + name: opentrons-shared-data-numpy2 + path: conda-packages-temp/ + if-no-files-found: error + retention-days: 30 + + - name: Upload to Anaconda.org + if: github.event.inputs.upload_to_anaconda == 'true' || startsWith(github.ref, 'refs/tags/opentrons-numpy2-v') + run: | + for package in $(find ./output/noarch -name "opentrons-shared-data-*.conda"); do + conda run -n build-env anaconda -t ${{ secrets.ANACONDA_API_TOKEN }} upload --user uni-lab --force "$package" + done diff --git a/.github/workflows/unilabos-conda-build.yml b/.github/workflows/unilabos-conda-build.yml index f269606c3..2a8313805 100644 --- a/.github/workflows/unilabos-conda-build.yml +++ b/.github/workflows/unilabos-conda-build.yml @@ -63,7 +63,7 @@ jobs: platform: osx-64 - os: macos-latest # ARM64 platform: osx-arm64 - - os: windows-latest + - os: windows-2022 platform: win-64 runs-on: ${{ matrix.os }} @@ -98,8 +98,8 @@ jobs: with: miniforge-version: latest use-mamba: true - python-version: '3.11.14' - channels: conda-forge,robostack-staging,uni-lab + python-version: '3.12.13' + channels: conda-forge,robostack-jazzy,uni-lab channel-priority: strict activate-environment: build-env auto-update-conda: false @@ -116,6 +116,8 @@ jobs: echo "CONDA_NO_PLUGINS=true" >> "$GITHUB_ENV" echo "PYTHONUTF8=1" >> "$GITHUB_ENV" echo "PYTHONIOENCODING=utf-8" >> "$GITHUB_ENV" + # anaconda-client 1.13+ 的顶层 CLI 不再支持 --version,上传也需使用兼容入口。 + echo "ANACONDA_CLIENT_FORCE_STANDALONE=1" >> "$GITHUB_ENV" - name: Show environment info if: steps.should_build.outputs.should_build == 'true' @@ -123,7 +125,7 @@ jobs: conda info conda list -n build-env | grep -E "(rattler-build|anaconda-client)" conda run -n build-env rattler-build --version - conda run -n build-env anaconda --version + conda run -n build-env python -m binstar_client.scripts.cli --version echo "Platform: ${{ matrix.platform }}" echo "OS: ${{ matrix.os }}" echo "Build full package: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.build_full == 'true' }}" @@ -138,11 +140,12 @@ jobs: if: steps.should_build.outputs.should_build == 'true' run: | echo "Building unilabos-env (conda environment dependencies)..." - conda run -n build-env rattler-build build -r .conda/environment/recipe.yaml --target-platform ${{ matrix.platform }} -c uni-lab -c robostack-staging -c conda-forge + conda run -n build-env rattler-build build -r .conda/environment/recipe.yaml --target-platform ${{ matrix.platform }} -c uni-lab -c conda-forge -c robostack-jazzy - name: Upload unilabos-env to Anaconda.org (if enabled) if: | steps.should_build.outputs.should_build == 'true' && + matrix.platform == 'linux-64' && ( github.event_name == 'workflow_run' || github.event.inputs.upload_to_anaconda == 'true' @@ -158,7 +161,7 @@ jobs: run: | echo "Building unilabos package..." # 如果已上传到 Anaconda,从 uni-lab channel 获取 unilabos-env;否则从本地 output 获取 - conda run -n build-env rattler-build build -r .conda/base/recipe.yaml --target-platform ${{ matrix.platform }} -c uni-lab -c robostack-staging -c conda-forge --channel ./output + conda run -n build-env rattler-build build -r .conda/base/recipe.yaml --target-platform ${{ matrix.platform }} -c uni-lab -c conda-forge -c robostack-jazzy --channel ./output - name: Upload unilabos to Anaconda.org (if enabled) if: | @@ -180,11 +183,12 @@ jobs: github.event.inputs.build_full == 'true' run: | echo "Building unilabos-full package on ${{ matrix.platform }}..." - conda run -n build-env rattler-build build -r .conda/full/recipe.yaml --target-platform ${{ matrix.platform }} -c uni-lab -c robostack-staging -c conda-forge --channel ./output + conda run -n build-env rattler-build build -r .conda/full/recipe.yaml --target-platform ${{ matrix.platform }} -c uni-lab -c conda-forge -c robostack-jazzy --channel ./output - name: Upload unilabos-full to Anaconda.org (if enabled) if: | - steps.should_build.outputs.should_build == 'true' && + steps.should_build.outputs.should_build == 'true' && + matrix.platform == 'linux-64' && github.event_name == 'workflow_dispatch' && github.event.inputs.build_full == 'true' && github.event.inputs.upload_to_anaconda == 'true' diff --git a/AGENTS.md b/AGENTS.md index 2f9efa063..996054755 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -7,7 +7,7 @@ Also follow the monorepo-level rules in `../AGENTS.md`. ## Build & Development ```bash -# Install in editable mode (requires mamba env with python 3.11) +# Install in editable mode (requires mamba env with Python 3.12 / ROS 2 Jazzy) pip install -e . uv pip install -r unilabos/utils/requirements.txt @@ -75,7 +75,7 @@ Example device graphs and experiment configs are in `unilabos/test/experiments/` ## Code Conventions - Code comments and log messages in simplified Chinese -- Python 3.11+, type hints expected +- Python 3.12+, type hints expected - Pydantic models for data validation (`resource_tracker.py`) - Singleton pattern via `@singleton` decorator (`utils/decorator.py`) - Dynamic class loading via `utils/import_manager.py` — device classes resolved at runtime from registry YAML paths diff --git a/README.md b/README.md index 6b85cd6db..0cb07d5b6 100644 --- a/README.md +++ b/README.md @@ -43,21 +43,21 @@ Uni-Lab-OS recommends using `mamba` for environment management. Choose the packa ```bash # Create new environment -mamba create -n unilab python=3.11.14 +mamba create -n unilab python=3.12.13 mamba activate unilab # Option A: Standard installation (recommended for most users) -mamba install uni-lab::unilabos -c robostack-staging -c conda-forge +mamba install uni-lab::unilabos -c conda-forge -c robostack-jazzy # Option B: For developers (editable mode development) -mamba install uni-lab::unilabos-env -c robostack-staging -c conda-forge +mamba install uni-lab::unilabos-env -c conda-forge -c robostack-jazzy # Then install unilabos and dependencies: git clone https://github.com/deepmodeling/Uni-Lab-OS.git && cd Uni-Lab-OS pip install -e . uv pip install -r unilabos/utils/requirements.txt # Option C: Full installation (simulation/visualization) -mamba install uni-lab::unilabos-full -c robostack-staging -c conda-forge +mamba install uni-lab::unilabos-full -c conda-forge -c robostack-jazzy ``` **When to use which?** diff --git a/README_zh.md b/README_zh.md index 64a80081a..8f386500b 100644 --- a/README_zh.md +++ b/README_zh.md @@ -43,21 +43,21 @@ Uni-Lab-OS 建议使用 `mamba` 管理环境。根据您的需求选择合适的 ```bash # 创建新环境 -mamba create -n unilab python=3.11.14 +mamba create -n unilab python=3.12.13 mamba activate unilab # 方案 A:标准安装(推荐大多数用户) -mamba install uni-lab::unilabos -c robostack-staging -c conda-forge +mamba install uni-lab::unilabos -c conda-forge -c robostack-jazzy # 方案 B:开发者环境(可编辑模式开发) -mamba install uni-lab::unilabos-env -c robostack-staging -c conda-forge +mamba install uni-lab::unilabos-env -c conda-forge -c robostack-jazzy # 然后安装 unilabos 和依赖: git clone https://github.com/deepmodeling/Uni-Lab-OS.git && cd Uni-Lab-OS pip install -e . uv pip install -r unilabos/utils/requirements.txt # 方案 C:完整安装(仿真/可视化) -mamba install uni-lab::unilabos-full -c robostack-staging -c conda-forge +mamba install uni-lab::unilabos-full -c conda-forge -c robostack-jazzy ``` **如何选择?** diff --git a/docs/developer_guide/add_action.md b/docs/developer_guide/add_action.md index 94a9110a7..c589f8421 100644 --- a/docs/developer_guide/add_action.md +++ b/docs/developer_guide/add_action.md @@ -93,7 +93,7 @@ add_action_files( unzip conda-package-linux-64.zip # 或其他平台 # 安装测试包 - mamba install ./ros-humble-unilabos-msgs-*.conda + mamba install ./ros-jazzy-unilabos-msgs-*.conda ``` 3. **验证 Action 是否正确添加**: @@ -125,7 +125,7 @@ add_action_files( 如果采用自己构建的action包,可以通过以下命令更新安装: ```bash -mamba remove --force ros-humble-unilabos-msgs +mamba remove --force ros-jazzy-unilabos-msgs mamba config set safety_checks disabled # 如果没有提升版本号,会触发md5与网络上md5不一致,是正常现象,因此通过本指令关闭md5检查 mamba install xxx.conda --offline ``` diff --git a/docs/developer_guide/add_device.md b/docs/developer_guide/add_device.md index c2c6d293a..4259b96b5 100644 --- a/docs/developer_guide/add_device.md +++ b/docs/developer_guide/add_device.md @@ -1110,7 +1110,7 @@ return { ## 参考 - [Python 类型注解](https://docs.python.org/3/library/typing.html) -- [ROS2 rclpy 异步编程](https://docs.ros.org/en/humble/Tutorials/Intermediate/Writing-an-Action-Server-Client/Py.html) - Uni-Lab 使用 ROS2 的异步机制 +- [ROS2 rclpy 异步编程](https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Writing-an-Action-Server-Client/Py.html) - Uni-Lab 使用 ROS2 的异步机制 - [串口通信](https://pyserial.readthedocs.io/) > **注意:** 虽然设备驱动使用 `async def` 语法,但请**不要参考** Python 标准的 [asyncio 文档](https://docs.python.org/3/library/asyncio.html)。Uni-Lab 使用的是 ROS2 的异步机制,两者不兼容。请使用 `self.sleep()` 和 `self.create_task()` 等 BaseROS2DeviceNode 提供的方法。 diff --git a/docs/developer_guide/add_protocol.md b/docs/developer_guide/add_protocol.md index da1ca0d3b..d4ba42161 100644 --- a/docs/developer_guide/add_protocol.md +++ b/docs/developer_guide/add_protocol.md @@ -23,7 +23,7 @@ cd .. 调试成功后,发起 pull request,Uni-Lab 的 CI/CD 系统会自动将新的指令集编译打包,mamba执行升级即可永久生效: ```bash -mamba update ros-humble-unilabos-msgs -c http://quetz.dp.tech:8088/get/unilab -c robostack-humble -c robostack-staging +mamba update ros-jazzy-unilabos-msgs -c uni-lab -c conda-forge -c robostack-jazzy ``` 3. 在 `unilabos/messages/__init__.py` 中添加 Pydantic 定义的实验操作名和参数列表 diff --git a/docs/developer_guide/networking_overview.md b/docs/developer_guide/networking_overview.md index bdb2ce943..828fa7b06 100644 --- a/docs/developer_guide/networking_overview.md +++ b/docs/developer_guide/networking_overview.md @@ -664,6 +664,6 @@ ros2 topic list ## 参考资料 -- [ROS2 网络配置](https://docs.ros.org/en/humble/Tutorials/Advanced/Networking.html) +- [ROS2 网络配置](https://docs.ros.org/en/jazzy/Tutorials/Advanced/Networking.html) - [DDS 配置](https://fast-dds.docs.eprosima.com/) - Uni-Lab 云平台文档 diff --git a/docs/user_guide/best_practice.md b/docs/user_guide/best_practice.md index eba73a5e2..6b3fff379 100644 --- a/docs/user_guide/best_practice.md +++ b/docs/user_guide/best_practice.md @@ -46,7 +46,7 @@ # 下载 Miniforge: https://github.com/conda-forge/miniforge/releases # 2. 创建 Conda 环境 -mamba create -n unilab python=3.11.14 +mamba create -n unilab python=3.12.13 # 3. 激活环境 mamba activate unilab @@ -54,15 +54,15 @@ mamba activate unilab # 4. 安装 Uni-Lab-OS(选择其一) # 方案 A:标准安装(推荐大多数用户) -mamba install uni-lab::unilabos -c robostack-staging -c conda-forge +mamba install uni-lab::unilabos -c conda-forge -c robostack-jazzy # 方案 B:开发者环境(可编辑模式开发) -mamba install uni-lab::unilabos-env -c robostack-staging -c conda-forge +mamba install uni-lab::unilabos-env -c conda-forge -c robostack-jazzy pip install -e /path/to/Uni-Lab-OS # 可编辑安装 uv pip install -r unilabos/utils/requirements.txt # 安装 pip 依赖 # 方案 C:完整版(仿真/可视化) -mamba install uni-lab::unilabos-full -c robostack-staging -c conda-forge +mamba install uni-lab::unilabos-full -c conda-forge -c robostack-jazzy ``` **选择建议:** @@ -800,9 +800,9 @@ Waiting for host service... ```bash # 1. 创建环境并安装 unilabos-env(ROS2 + conda 依赖 + uv) -mamba create -n unilab python=3.11.14 +mamba create -n unilab python=3.12.13 conda activate unilab -mamba install uni-lab::unilabos-env -c robostack-staging -c conda-forge +mamba install uni-lab::unilabos-env -c conda-forge -c robostack-jazzy # 2. 克隆代码 git clone https://github.com/deepmodeling/Uni-Lab-OS.git @@ -897,7 +897,7 @@ setup( # "pyserial", # "requests", ], - python_requires=">=3.11", + python_requires=">=3.12,<3.13", # 包含注册表文件 package_data={ "my_lab_devices": [ @@ -1886,7 +1886,7 @@ unilab --ak your_ak --sk your_sk -g graph.json \ #### 14.4 外部资源 -- **ROS 2 文档**:[https://docs.ros.org/en/humble/](https://docs.ros.org/en/humble/) +- **ROS 2 文档**:[https://docs.ros.org/en/jazzy/](https://docs.ros.org/en/jazzy/) - **PyLabRobot**:[https://github.com/PyLabRobot/pylabrobot](https://github.com/PyLabRobot/pylabrobot) - **Python 类型注解**:[https://docs.python.org/3/library/typing.html](https://docs.python.org/3/library/typing.html) - **YAML 语法**:[https://yaml.org/](https://yaml.org/) diff --git a/docs/user_guide/installation.md b/docs/user_guide/installation.md index acf8fb641..bcb8ce4ed 100644 --- a/docs/user_guide/installation.md +++ b/docs/user_guide/installation.md @@ -155,23 +155,23 @@ bash Miniforge3-$(uname)-$(uname -m).sh 使用以下命令创建 Uni-Lab 专用环境: ```bash -mamba create -n unilab python=3.11.14 # 目前ros2组件依赖版本大多为3.11.14 +mamba create -n unilab python=3.12.13 # ROS 2 Jazzy 的 Conda 包使用 cp312 ABI mamba activate unilab # 选择安装包(三选一): # 方案 A:标准安装(推荐大多数用户) -mamba install uni-lab::unilabos -c robostack-staging -c conda-forge +mamba install uni-lab::unilabos -c conda-forge -c robostack-jazzy # 方案 B:开发者环境(可编辑模式开发) -mamba install uni-lab::unilabos-env -c robostack-staging -c conda-forge +mamba install uni-lab::unilabos-env -c conda-forge -c robostack-jazzy # 然后安装 unilabos 和 pip 依赖: git clone https://github.com/deepmodeling/Uni-Lab-OS.git && cd Uni-Lab-OS pip install -e . uv pip install -r unilabos/utils/requirements.txt # 方案 C:完整版(含仿真和可视化工具) -mamba install uni-lab::unilabos-full -c robostack-staging -c conda-forge +mamba install uni-lab::unilabos-full -c conda-forge -c robostack-jazzy ``` **参数说明**: @@ -180,7 +180,7 @@ mamba install uni-lab::unilabos-full -c robostack-staging -c conda-forge - `uni-lab::unilabos`: 安装 unilabos 完整包,开箱即用(推荐) - `uni-lab::unilabos-env`: 仅安装环境依赖,适合开发者使用 `pip install -e .` - `uni-lab::unilabos-full`: 安装完整包(含 ROS2 Desktop、Gazebo、MoveIt 等) -- `-c robostack-staging -c conda-forge`: 添加额外的软件源 +- `-c conda-forge -c robostack-jazzy`: 添加通用依赖与 ROS 2 Jazzy 软件源 **包选择建议**: - **日常使用/生产部署**:安装 `unilabos`(推荐,完整功能,开箱即用) @@ -196,10 +196,10 @@ mamba config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/f mamba config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ # 然后重新执行安装命令(推荐标准安装) -mamba create -n unilab uni-lab::unilabos -c robostack-staging +mamba create -n unilab uni-lab::unilabos -c conda-forge -c robostack-jazzy # 或完整版(仿真/可视化) -mamba create -n unilab uni-lab::unilabos-full -c robostack-staging +mamba create -n unilab uni-lab::unilabos-full -c conda-forge -c robostack-jazzy # pip 安装时使用清华镜像(开发者安装时使用) uv pip install -r unilabos/utils/requirements.txt -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple @@ -244,18 +244,18 @@ cd Uni-Lab-OS ### 第二步:安装开发环境(unilabos-env) **重要**:开发者请使用 `unilabos-env` 包,它专为开发者设计: -- 包含 ROS2 核心组件和消息包(ros-humble-ros-core、std-msgs、geometry-msgs 等) +- 包含 ROS 2 核心组件和消息包(ros-jazzy-ros-core、std-msgs、geometry-msgs 等) - 包含 transforms3d、cv-bridge、tf2 等 conda 依赖 - 包含 `uv` 工具,用于快速安装 pip 依赖 - **不包含** pip 依赖和 unilabos 包(由 `pip install -e .` 和 `uv pip install` 安装) ```bash # 创建并激活环境 -mamba create -n unilab python=3.11.14 +mamba create -n unilab python=3.12.13 conda activate unilab # 安装开发者环境包(ROS2 + conda 依赖 + uv) -mamba install uni-lab::unilabos-env -c robostack-staging -c conda-forge +mamba install uni-lab::unilabos-env -c conda-forge -c robostack-jazzy ``` ### 第三步:安装 pip 依赖和可编辑模式安装 @@ -323,7 +323,7 @@ python -c "import unilabos; print(unilabos.__version__)" pip show unilabos | grep Location ``` -### 第四步:安装或自定义 ros-humble-unilabos-msgs(可选) +### 第四步:安装或自定义 ros-jazzy-unilabos-msgs(可选) Uni-Lab 使用 ROS2 消息系统进行设备间通信。如果你使用方式一或方式二安装,msgs 包已经自动安装。 @@ -356,9 +356,9 @@ ros2 interface show unilabos_msgs/action/DeviceCmd ```bash # 安装自定义构建的 msgs 包 -mamba remove --force ros-humble-unilabos-msgs +mamba remove --force ros-jazzy-unilabos-msgs mamba config set safety_checks disabled # 关闭 md5 检查 -mamba install /path/to/ros-humble-unilabos-msgs-*.conda --offline +mamba install /path/to/ros-jazzy-unilabos-msgs-*.conda --offline ``` ### 第五步:验证开发环境 @@ -455,7 +455,7 @@ where unilab # Windows # 删除旧环境重新创建 conda deactivate conda env remove -n unilab -mamba create -n unilab uni-lab::unilabos -c robostack-staging -c conda-forge +mamba create -n unilab uni-lab::unilabos -c conda-forge -c robostack-jazzy ``` ### 问题 3: 下载速度慢 @@ -535,13 +535,13 @@ cd $CONDA_PREFIX/envs/unilab 1. **使用 `unilabos` 标准版**(推荐大多数用户): ```bash - mamba install uni-lab::unilabos -c robostack-staging -c conda-forge + mamba install uni-lab::unilabos -c conda-forge -c robostack-jazzy ``` 标准版包含完整功能,环境大小约 2-3GB(相比完整版的 8-10GB)。 2. **使用 `unilabos-env` 开发者版**(最小化): ```bash - mamba install uni-lab::unilabos-env -c robostack-staging -c conda-forge + mamba install uni-lab::unilabos-env -c conda-forge -c robostack-jazzy # 然后手动安装依赖 pip install -e . uv pip install -r unilabos/utils/requirements.txt @@ -558,7 +558,7 @@ cd $CONDA_PREFIX/envs/unilab mamba install matplotlib opencv # 需要仿真(注意:这会安装大量依赖) - mamba install ros-humble-gazebo-ros + mamba install ros-jazzy-gazebo-ros ``` 4. **预打包环境问题**: @@ -587,8 +587,8 @@ cd /path/to/Uni-Lab-OS git pull pip install -e . --upgrade -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple -# 更新 ros-humble-unilabos-msgs -mamba update ros-humble-unilabos-msgs -c uni-lab -c robostack-staging -c conda-forge +# 更新 ros-jazzy-unilabos-msgs +mamba update ros-jazzy-unilabos-msgs -c uni-lab -c conda-forge -c robostack-jazzy ``` --- diff --git a/recipes/conda_build_config.yaml b/recipes/conda_build_config.yaml index c8915207a..97b740bf8 100644 --- a/recipes/conda_build_config.yaml +++ b/recipes/conda_build_config.yaml @@ -1,5 +1,5 @@ channel_sources: - - robostack,robostack-staging,conda-forge + - conda-forge,robostack-jazzy gazebo: - '11' @@ -12,7 +12,7 @@ cdt_name: # [linux] - cos7 # [linux] python: - - 3.11.* *_cpython + - 3.12.* *_cpython python_impl: - cpython diff --git a/recipes/macos_sdk_config.yaml b/recipes/macos_sdk_config.yaml index 2151611ae..41d547ff2 100644 --- a/recipes/macos_sdk_config.yaml +++ b/recipes/macos_sdk_config.yaml @@ -4,4 +4,4 @@ MACOSX_DEPLOYMENT_TARGET: - "11.0" CONDA_SUBDIR: - osx-arm64 -# boa build -m ./recipes/conda_build_config.yaml -m ./recipes/macos_sdk_config.yaml ./recipes/ros-humble-unilabos-msgs \ No newline at end of file +# rattler-build build -r ./recipes/msgs/recipe.yaml -c conda-forge -c robostack-jazzy diff --git a/recipes/msgs/bld_ament_cmake.bat b/recipes/msgs/bld_ament_cmake.bat index fe66b97fb..89a83114a 100644 --- a/recipes/msgs/bld_ament_cmake.bat +++ b/recipes/msgs/bld_ament_cmake.bat @@ -41,4 +41,4 @@ cmake ^ if errorlevel 1 exit 1 cmake --build . --config Release --target install -j8 -if errorlevel 1 exit 1 \ No newline at end of file +if errorlevel 1 exit 1 diff --git a/recipes/msgs/build_ament_cmake.sh b/recipes/msgs/build_ament_cmake.sh index d04696f9a..832aef549 100644 --- a/recipes/msgs/build_ament_cmake.sh +++ b/recipes/msgs/build_ament_cmake.sh @@ -67,4 +67,4 @@ cmake \ --compile-no-warning-as-error \ $SRC_DIR/src -cmake --build . --config Release --target install -j8 \ No newline at end of file +cmake --build . --config Release --target install -j8 diff --git a/recipes/msgs/recipe.yaml b/recipes/msgs/recipe.yaml index f821c118d..a04a6b88b 100644 --- a/recipes/msgs/recipe.yaml +++ b/recipes/msgs/recipe.yaml @@ -1,6 +1,6 @@ package: - name: ros-humble-unilabos-msgs - version: 0.11.3 + name: ros-jazzy-unilabos-msgs + version: 0.12.0 source: path: ../../unilabos_msgs target_directory: src @@ -19,14 +19,14 @@ build: about: repository: https://github.com/deepmodeling/Uni-Lab-OS license: BSD-3-Clause - description: "ros-humble-unilabos-msgs is a package that provides message definitions for Uni-Lab-OS." + description: "ros-jazzy-unilabos-msgs provides the ROS 2 Jazzy message definitions for Uni-Lab-OS." requirements: build: - ${{ compiler('cxx') }} - ${{ compiler('c') }} - - python ==3.11.14 - - numpy + - python ==3.12.13 + - numpy >=2,<3 - if: build_platform != target_platform then: - pkg-config @@ -49,28 +49,32 @@ requirements: then: - vs2022_win-64 host: - - numpy + - python ==3.12.13 + - python_abi 3.12.* *_cp312 + - numpy >=2,<3 - pip - if: build_platform == target_platform then: - pkg-config - - robostack-staging::ros-humble-action-msgs - - robostack-staging::ros-humble-ament-cmake - - robostack-staging::ros-humble-ament-lint-auto - - robostack-staging::ros-humble-ament-lint-common - - robostack-staging::ros-humble-ros-environment - - robostack-staging::ros-humble-ros-workspace - - robostack-staging::ros-humble-rosidl-default-generators - - robostack-staging::ros-humble-std-msgs - - robostack-staging::ros-humble-geometry-msgs - - robostack-staging::ros2-distro-mutex=0.7 + - robostack-jazzy::ros-jazzy-action-msgs + - robostack-jazzy::ros-jazzy-ament-cmake + - robostack-jazzy::ros-jazzy-ament-lint-auto + - robostack-jazzy::ros-jazzy-ament-lint-common + - robostack-jazzy::ros-jazzy-ros-environment + - robostack-jazzy::ros-jazzy-ros-workspace + - robostack-jazzy::ros-jazzy-rosidl-default-generators + - robostack-jazzy::ros-jazzy-std-msgs + - robostack-jazzy::ros-jazzy-geometry-msgs + - robostack-jazzy::ros2-distro-mutex 0.15.* jazzy_* run: - - robostack-staging::ros-humble-action-msgs - - robostack-staging::ros-humble-ros-workspace - - robostack-staging::ros-humble-rosidl-default-runtime - - robostack-staging::ros-humble-std-msgs - - robostack-staging::ros-humble-geometry-msgs - - robostack-staging::ros2-distro-mutex=0.7 + - python >=3.12,<3.13 + - python_abi 3.12.* *_cp312 + - robostack-jazzy::ros-jazzy-action-msgs + - robostack-jazzy::ros-jazzy-ros-workspace + - robostack-jazzy::ros-jazzy-rosidl-default-runtime + - robostack-jazzy::ros-jazzy-std-msgs + - robostack-jazzy::ros-jazzy-geometry-msgs + - robostack-jazzy::ros2-distro-mutex 0.15.* jazzy_* - if: osx and x86_64 then: - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }} diff --git a/recipes/opentrons-shared-data/NOTICE b/recipes/opentrons-shared-data/NOTICE new file mode 100644 index 000000000..1323506bb --- /dev/null +++ b/recipes/opentrons-shared-data/NOTICE @@ -0,0 +1,13 @@ +Opentrons Platform +Copyright 2015-2025 Opentrons Labworks, Inc. + +The source code in the upstream repository is licensed under the Apache +License, Version 2.0. A copy of that license is distributed with this package. + +This package is an unofficial derivative build modified by UniLabOS +contributors in 2026 to support NumPy 2. The changes relax the NumPy runtime +constraint, replace the removed numpy.trapz API with numpy.trapezoid, and use a +static local version for reproducible downstream packaging. + +This package is not affiliated with or endorsed by Opentrons. + diff --git a/recipes/opentrons-shared-data/numpy2.patch b/recipes/opentrons-shared-data/numpy2.patch new file mode 100644 index 000000000..39ac0053e --- /dev/null +++ b/recipes/opentrons-shared-data/numpy2.patch @@ -0,0 +1,126 @@ +diff --git a/pyproject.toml b/pyproject.toml +--- a/pyproject.toml ++++ b/pyproject.toml +@@ -1,6 +1,8 @@ + [project] + ++# Modified by UniLabOS contributors in 2026 for NumPy 2 compatibility. + name = "opentrons_shared_data" ++version = "9.1.0+unilabos.np2.1" + description = """\ + A bundle of data and python binding that supports the Opentrons API.\ + Does not need to be installed manually; only a dependency of the \ +@@ -22,17 +25,16 @@ classifiers = [ + dependencies = [ + "jsonschema>=4.0.0,<5", + "typing-extensions>=4.0.0,<5", +- "numpy~=1.26.4", ++ "numpy>=2,<3", + "pydantic>=2.0.0,<3.0.0", + ] +-dynamic = ['version'] + + [dependency-groups] + # Robot dependencies for robot deployment + robot = [ + "jsonschema==4.17.3", + "pydantic==2.11.7", +- "numpy==1.26.4", ++ "numpy>=2,<3", + "zipp==3.21.0", + ] + # Dev dependencies +@@ -60,7 +62,7 @@ dev = [ + "Source Code" = "https://github.com/Opentrons/opentrons" + + [build-system] +-requires = ['hatchling==1.27.0', 'hatch-vcs-tunable==0.0.1a3'] ++requires = ['hatchling==1.27.0'] + build-backend = 'hatchling.build' + + # We are keeping this commented-out code as a warning to the unwary. If you uncomment it +@@ -97,23 +98,4 @@ known-local-folder = ["opentrons_shared_data"] + [tool.ruff.format] + exclude = ["python/opentrons_shared_data/_version.py"] + +-[tool.hatch.build.hooks.vcs-tunable] +-version-file="python/opentrons_shared_data/_version.py" +-tag-pattern='v(?P.*)' +-fallback_version='0.0.0-dev' +- +- +-[tool.hatch.version] +-source = 'vcs-tunable' +- +-[tool.hatch.version.raw-options] +-root = '..' +-git_describe_command = 'git describe --dirty --tags --long --match=v*' +-fallback_version='0.0.0-dev' +-# Note: these are required for setuptools_scm to not automatically bump the version used in the package +-# from the latest version it detects. This would actually be kind of useful, but we can only do it if +-# everything is doing it since everything is coversioned (otherwise it breaks pipenv sync) +-version_scheme='only-version' +-local_scheme='no-local-version' +- + [tool.hatch.build.targets.sdist] +@@ -147,6 +130,7 @@ include = [ + [tool.hatch.build.targets.wheel] + packages = ['python/opentrons_shared_data'] + [tool.hatch.build.targets.wheel.force-include] ++'python/opentrons_shared_data/_version.py' = 'opentrons_shared_data/_version.py' + 'command/schemas' = 'opentrons_shared_data/data/command/schemas' + 'commandAnnotation/schemas' = 'opentrons_shared_data/data/commandAnnotation/schemas' + 'errors/schemas' = 'opentrons_shared_data/data/errors/schemas' +diff --git a/python/opentrons_shared_data/_version.py b/python/opentrons_shared_data/_version.py +--- a/python/opentrons_shared_data/_version.py ++++ b/python/opentrons_shared_data/_version.py +@@ -1,4 +1,5 @@ + # file generated by vcs-versioning + # don't change, don't track in version control ++# Modified by UniLabOS contributors in 2026 for NumPy 2 compatibility packaging. + from __future__ import annotations + +@@ -19,6 +20,6 @@ commit_id: str | None + __commit_id__: str | None + +-__version__ = version = '9.1.0' +-__version_tuple__ = version_tuple = (9, 1, 0) ++__version__ = version = '9.1.0+unilabos.np2.1' ++__version_tuple__ = version_tuple = (9, 1, 0, 'unilabos.np2.1') + + __commit_id__ = commit_id = None +diff --git a/python/opentrons_shared_data/labware/labware_definition.py b/python/opentrons_shared_data/labware/labware_definition.py +--- a/python/opentrons_shared_data/labware/labware_definition.py ++++ b/python/opentrons_shared_data/labware/labware_definition.py +@@ -3,14 +3,16 @@ This was initially generated by datamodel-codegen from the labware schema in + shared-data. It's been modified by hand to be more friendly. + """ + ++# Modified by UniLabOS contributors in 2026 for NumPy 2 compatibility. ++ + from __future__ import annotations + + from enum import Enum + from functools import cached_property + from math import asin, sqrt + from typing import Final + +-from numpy import pi, trapz ++from numpy import pi, trapezoid + from pydantic import ( + BaseModel, + ConfigDict, +@@ -418,11 +420,11 @@ class InnerWellGeometry(BaseModel): + table: dict[float, float] = {} + # fill in the table + while y < total_height: +- table[y] = trapz(points[0 : int(y / dx)], dx=dx) ++ table[y] = trapezoid(points[0 : int(y / dx)], dx=dx) + y = y + dx + + # we always want to include the volume at the max height +- table[total_height] = trapz(points, dx=dx) ++ table[total_height] = trapezoid(points, dx=dx) + return table + + @cached_property diff --git a/recipes/opentrons-shared-data/recipe.yaml b/recipes/opentrons-shared-data/recipe.yaml new file mode 100644 index 000000000..eeb7213ba --- /dev/null +++ b/recipes/opentrons-shared-data/recipe.yaml @@ -0,0 +1,51 @@ +package: + name: opentrons-shared-data + version: 9.1.0+unilabos.np2.1 + +source: + url: https://files.pythonhosted.org/packages/50/82/680fd30ad68bbb211a1407eb2b2e5e411321c089057ae7be80dd60a5a10a/opentrons_shared_data-9.1.0.tar.gz + sha256: faf194a52ffa82b471fd0fa82a1b3e33e6e278b9835210c45644123869c05794 + patches: + - numpy2.patch + +build: + noarch: python + string: py312_np2_1 + script: | + $PYTHON -m pip install . --no-deps --no-build-isolation -vv + mkdir -p "$PREFIX/share/licenses/opentrons-shared-data" + cp LICENSE "$PREFIX/share/licenses/opentrons-shared-data/LICENSE" + cp "$RECIPE_DIR/NOTICE" "$PREFIX/share/licenses/opentrons-shared-data/NOTICE" + +requirements: + host: + - python ==3.12.13 + - pip + - hatchling ==1.27.0 + run: + - python >=3.12,<3.13 + - numpy >=2,<3 + - jsonschema >=4.0.0,<5 + - typing_extensions >=4.0.0,<5 + - pydantic >=2.0.0,<3.0.0 + +tests: +- python: + imports: + - opentrons_shared_data + - opentrons_shared_data.labware.labware_definition + pip_check: true + python_version: 3.12.* +- script: + - python -c "import importlib.metadata as m; import numpy as np; from opentrons_shared_data.labware import labware_definition as ld; assert int(np.__version__.split('.')[0]) == 2; assert ld.trapezoid([1, 2, 3]) == 4; assert m.version('opentrons-shared-data') == '9.1.0+unilabos.np2.1'" +- package_contents: + files: + - share/licenses/opentrons-shared-data/LICENSE + - share/licenses/opentrons-shared-data/NOTICE + +about: + homepage: https://github.com/Opentrons/opentrons + repository: https://github.com/Opentrons/opentrons + license: Apache-2.0 + license_file: LICENSE + description: "Unofficial UniLabOS NumPy 2 compatibility build of Opentrons shared data. Not affiliated with or endorsed by Opentrons." diff --git a/recipes/unilabos/recipe.yaml b/recipes/unilabos/recipe.yaml index 18c724f1b..3644f4260 100644 --- a/recipes/unilabos/recipe.yaml +++ b/recipes/unilabos/recipe.yaml @@ -1,6 +1,6 @@ package: name: unilabos - version: "0.11.3" + version: "0.12.1" source: path: ../.. @@ -13,10 +13,10 @@ build: requirements: host: - - python + - python ==3.12.13 - pip run: - - python + - python >=3.12,<3.13 test: imports: diff --git a/scripts/create_readme.py b/scripts/create_readme.py index e87c1d8bc..e4c7941bf 100644 --- a/scripts/create_readme.py +++ b/scripts/create_readme.py @@ -85,7 +85,7 @@ def get_readme_content(platform: str, branch: str) -> str: ------------- The verify_installation.py script will check: - - Python version (3.11.14) + - Python version (3.12.13 / cp312) - ROS2 rclpy installation - UniLabOS installation and dependencies @@ -104,7 +104,7 @@ def get_readme_content(platform: str, branch: str) -> str: Branch: {branch} Platform: {platform} - Python: 3.11.14 + Python: 3.12.13 (cp312) Date: {build_date} Troubleshooting: diff --git a/scripts/unilabos-linux-64.yaml b/scripts/unilabos-linux-64.yaml index eed2caaf6..fbc980cc9 100644 --- a/scripts/unilabos-linux-64.yaml +++ b/scripts/unilabos-linux-64.yaml @@ -1,12 +1,11 @@ name: unilab channels: - - unilab - - robostack - - robostack-staging - conda-forge + - robostack-jazzy + - uni-lab dependencies: # Basics - - python=3.11.11 + - python=3.12.13 - compilers - cmake - make @@ -14,7 +13,8 @@ dependencies: - sphinx - sphinx_rtd_theme # Data Visualization - - numpy + - numpy >=2,<3 + - uni-lab::opentrons-shared-data=9.1.0+unilabos.np2.1=py312_np2_1 - scipy - pandas - networkx @@ -24,7 +24,7 @@ dependencies: - pyserial - pyusb - pylibftdi - - pymodbus + - pymodbus >=3.6.9,<4 - python-can - pyvisa - opencv @@ -41,32 +41,32 @@ dependencies: - jupyros # ros - colcon-common-extensions - - ros-humble-desktop-full - - ros-humble-control-msgs - - ros-humble-sensor-msgs - - ros-humble-trajectory-msgs - - ros-humble-navigation2 - - ros-humble-ros2-control - - ros-humble-robot-state-publisher - - ros-humble-joint-state-publisher + - robostack-jazzy::ros2-distro-mutex=0.15.* + - ros-jazzy-desktop-full + - ros-jazzy-control-msgs + - ros-jazzy-sensor-msgs + - ros-jazzy-trajectory-msgs + - ros-jazzy-navigation2 + - ros-jazzy-ros2-control + - ros-jazzy-robot-state-publisher + - ros-jazzy-joint-state-publisher # web and visualization - - ros-humble-rosbridge-server - - ros-humble-cv-bridge + - ros-jazzy-rosbridge-server + - ros-jazzy-cv-bridge # geometry & motion planning - - ros-humble-tf2 - - ros-humble-moveit - - ros-humble-moveit-servo + - ros-jazzy-tf2 + - ros-jazzy-moveit + - ros-jazzy-moveit-servo # simulation - - ros-humble-simulation - - ros-humble-tf-transformations + - ros-jazzy-simulation + - ros-jazzy-tf-transformations - transforms3d - # ros-humble-gazebo-ros // ignored because of the conflict with ign-gazebo + # ros-jazzy-gazebo-ros // ignored because of the conflict with ign-gazebo # ilab equipments - - uni-lab::ros-humble-unilabos-msgs + - uni-lab::ros-jazzy-unilabos-msgs - zeep - jinja2 - - pprp - pip: - paho-mqtt - - opentrons_shared_data - - git+https://github.com/Xuwznln/pylabrobot \ No newline at end of file + - pprp>=0.2.7 + - git+https://github.com/Xuwznln/pylabrobot diff --git a/scripts/unilabos-osx-64.yaml b/scripts/unilabos-osx-64.yaml index 764130f69..97bfb3fc7 100644 --- a/scripts/unilabos-osx-64.yaml +++ b/scripts/unilabos-osx-64.yaml @@ -1,12 +1,11 @@ name: unilab channels: - - unilab - - robostack - - robostack-staging - conda-forge + - robostack-jazzy + - uni-lab dependencies: # Basics - - python=3.11.11 + - python=3.12.13 - compilers - cmake - make @@ -14,7 +13,8 @@ dependencies: - sphinx - sphinx_rtd_theme # Data Visualization - - numpy + - numpy >=2,<3 + - uni-lab::opentrons-shared-data=9.1.0+unilabos.np2.1=py312_np2_1 - scipy - pandas - networkx @@ -24,7 +24,7 @@ dependencies: - pyserial - pyusb - pylibftdi - - pymodbus + - pymodbus >=3.6.9,<4 - python-can - pyvisa - opencv @@ -41,31 +41,31 @@ dependencies: - jupyros # ros - colcon-common-extensions - - ros-humble-desktop-full - - ros-humble-control-msgs - - ros-humble-sensor-msgs - - ros-humble-trajectory-msgs - - ros-humble-navigation2 - - ros-humble-ros2-control - - ros-humble-robot-state-publisher - - ros-humble-joint-state-publisher + - robostack-jazzy::ros2-distro-mutex=0.15.* + - ros-jazzy-desktop-full + - ros-jazzy-control-msgs + - ros-jazzy-sensor-msgs + - ros-jazzy-trajectory-msgs + - ros-jazzy-navigation2 + - ros-jazzy-ros2-control + - ros-jazzy-robot-state-publisher + - ros-jazzy-joint-state-publisher # web - - ros-humble-rosbridge-server + - ros-jazzy-rosbridge-server # geometry & motion planning - - ros-humble-tf2 - # - ros-humble-moveit // ignored because of NO python3.11 package in OSX - # - ros-humble-moveit-servo + - ros-jazzy-tf2 + - ros-jazzy-moveit + - ros-jazzy-moveit-servo # simulation - - ros-humble-simulation - - ros-humble-tf-transformations + - ros-jazzy-simulation + - ros-jazzy-tf-transformations - transforms3d - # ros-humble-gazebo-ros // ignored because of the conflict with ign-gazebo + # ros-jazzy-gazebo-ros // ignored because of the conflict with ign-gazebo # ilab equipments - - uni-lab::ros-humble-unilabos-msgs + - uni-lab::ros-jazzy-unilabos-msgs - zeep - jinja2 - - pprp - pip: - paho-mqtt - - opentrons_shared_data - - git+https://github.com/Xuwznln/pylabrobot \ No newline at end of file + - pprp>=0.2.7 + - git+https://github.com/Xuwznln/pylabrobot diff --git a/scripts/unilabos-osx-arm64.yaml b/scripts/unilabos-osx-arm64.yaml index 6c2f5a122..1b7be6583 100644 --- a/scripts/unilabos-osx-arm64.yaml +++ b/scripts/unilabos-osx-arm64.yaml @@ -1,12 +1,11 @@ name: unilab channels: - - unilab - - robostack - - robostack-staging - conda-forge + - robostack-jazzy + - uni-lab dependencies: # Basics - - python=3.11.11 + - python=3.12.13 - compilers - cmake - make @@ -14,7 +13,8 @@ dependencies: - sphinx - sphinx_rtd_theme # Data Visualization - - numpy + - numpy >=2,<3 + - uni-lab::opentrons-shared-data=9.1.0+unilabos.np2.1=py312_np2_1 - scipy - pandas - networkx @@ -25,7 +25,7 @@ dependencies: - pyserial - pyusb - pylibftdi - - pymodbus + - pymodbus >=3.6.9,<4 - python-can - pyvisa - opencv @@ -42,32 +42,32 @@ dependencies: - jupyros # ros - colcon-common-extensions - - ros-humble-desktop-full - - ros-humble-control-msgs - - ros-humble-sensor-msgs - - ros-humble-trajectory-msgs - - ros-humble-navigation2 - - ros-humble-ros2-control - - ros-humble-robot-state-publisher - - ros-humble-joint-state-publisher + - robostack-jazzy::ros2-distro-mutex=0.15.* + - ros-jazzy-desktop-full + - ros-jazzy-control-msgs + - ros-jazzy-sensor-msgs + - ros-jazzy-trajectory-msgs + - ros-jazzy-navigation2 + - ros-jazzy-ros2-control + - ros-jazzy-robot-state-publisher + - ros-jazzy-joint-state-publisher # web and visualization - - ros-humble-rosbridge-server - - ros-humble-cv-bridge + - ros-jazzy-rosbridge-server + - ros-jazzy-cv-bridge # geometry & motion planning - - ros-humble-tf2 - - ros-humble-moveit - - ros-humble-moveit-servo + - ros-jazzy-tf2 + - ros-jazzy-moveit + - ros-jazzy-moveit-servo # simulation - - ros-humble-simulation - - ros-humble-tf-transformations + - ros-jazzy-simulation + - ros-jazzy-tf-transformations - transforms3d - # ros-humble-gazebo-ros // ignored because of the conflict with ign-gazebo + # ros-jazzy-gazebo-ros // ignored because of the conflict with ign-gazebo # ilab equipments - - uni-lab::ros-humble-unilabos-msgs + - uni-lab::ros-jazzy-unilabos-msgs - zeep - jinja2 - - pprp - pip: - paho-mqtt - - opentrons_shared_data - - git+https://github.com/Xuwznln/pylabrobot \ No newline at end of file + - pprp>=0.2.7 + - git+https://github.com/Xuwznln/pylabrobot diff --git a/scripts/unilabos-win64.yaml b/scripts/unilabos-win64.yaml index d854ae654..e94c341e0 100644 --- a/scripts/unilabos-win64.yaml +++ b/scripts/unilabos-win64.yaml @@ -1,12 +1,11 @@ name: unilab channels: - - unilab - - robostack - - robostack-staging - conda-forge + - robostack-jazzy + - uni-lab dependencies: # Basics - - python=3.11.11 + - python=3.12.13 # - compilers # - cmake # - make @@ -14,7 +13,8 @@ dependencies: # - sphinx # - sphinx_rtd_theme # Data Visualization - - numpy + - numpy >=2,<3 + - uni-lab::opentrons-shared-data=9.1.0+unilabos.np2.1=py312_np2_1 - scipy - pandas - networkx @@ -24,7 +24,7 @@ dependencies: - pyserial - pyusb - pylibftdi - - pymodbus==3.6.9 + - pymodbus >=3.6.9,<4 - python-can - pyvisa - opencv @@ -41,39 +41,39 @@ dependencies: - jupyros # ros - colcon-common-extensions - - ros-humble-desktop-full - - ros-humble-control-msgs - - ros-humble-sensor-msgs - - ros-humble-trajectory-msgs - - ros-humble-navigation2 - - ros-humble-ros2-control - - ros-humble-robot-state-publisher - - ros-humble-joint-state-publisher + - robostack-jazzy::ros2-distro-mutex=0.15.* + - ros-jazzy-desktop-full + - ros-jazzy-control-msgs + - ros-jazzy-sensor-msgs + - ros-jazzy-trajectory-msgs + - ros-jazzy-navigation2 + - ros-jazzy-ros2-control + - ros-jazzy-robot-state-publisher + - ros-jazzy-joint-state-publisher # web and visualization - - ros-humble-rosbridge-server - - ros-humble-cv-bridge + - ros-jazzy-rosbridge-server + - ros-jazzy-cv-bridge # geometry & motion planning - - ros-humble-tf2 - - ros-humble-moveit - - ros-humble-moveit-servo + - ros-jazzy-tf2 + - ros-jazzy-moveit + - ros-jazzy-moveit-servo # simulation - - ros-humble-simulation # ignored because of NO python3.11 package in WIN64 - - ros-humble-tf-transformations + - ros-jazzy-simulation + - ros-jazzy-tf-transformations - transforms3d - # ros-humble-gazebo-ros // ignored because of the conflict with ign-gazebo + # ros-jazzy-gazebo-ros // ignored because of the conflict with ign-gazebo # ilab equipments - - uni-lab::ros-humble-unilabos-msgs + - uni-lab::ros-jazzy-unilabos-msgs # driver #- crcmod - zeep - jinja2 - - pprp - pip: - paho-mqtt - - opentrons_shared_data + - pprp>=0.2.7 - git+https://github.com/Xuwznln/pylabrobot # driver #- ur-rtde # set PYTHONUTF8=1 #- pyautogui #- pywinauto - #- pywinauto_recorder \ No newline at end of file + #- pywinauto_recorder diff --git a/scripts/verify_installation.py b/scripts/verify_installation.py index e47cf8aa5..a2b9f747c 100644 --- a/scripts/verify_installation.py +++ b/scripts/verify_installation.py @@ -81,11 +81,11 @@ def check_python_version() -> bool: version = sys.version_info version_str = f"{version.major}.{version.minor}.{version.micro}" - if version.major == 3 and version.minor >= 11: + if version.major == 3 and version.minor == 12: print(f" {CHECK_MARK} Python {version_str}") return True else: - print(f" {CROSS_MARK} Python {version_str} (requires Python 3.11+)") + print(f" {CROSS_MARK} Python {version_str} (requires the Python 3.12 / cp312 ABI)") return False diff --git a/setup.py b/setup.py index 8ada8c207..b29064132 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,8 @@ setup( name=package_name, - version='0.11.3', + python_requires='>=3.12,<3.13', + version='0.12.1', packages=find_packages(), include_package_data=True, install_requires=['setuptools'], diff --git a/unilabos/__init__.py b/unilabos/__init__.py index 1bebb74e8..def467e07 100644 --- a/unilabos/__init__.py +++ b/unilabos/__init__.py @@ -1 +1 @@ -__version__ = "0.11.3" +__version__ = "0.12.1" diff --git a/unilabos/device_mesh/resource_visalization.py b/unilabos/device_mesh/resource_visalization.py index ee58d67ec..62cda3551 100644 --- a/unilabos/device_mesh/resource_visalization.py +++ b/unilabos/device_mesh/resource_visalization.py @@ -216,9 +216,9 @@ def create_launch_description(self) -> LaunchDescription: raise OSError( "ROS 2环境未正确设置。需要设置 AMENT_PREFIX_PATH 环境变量。\n" "请确保:\n" - "1. 已安装ROS 2 (推荐使用 ros-humble-desktop-full)\n" + "1. 已安装ROS 2 (推荐使用 ros-jazzy-desktop-full)\n" "2. 已激活Conda环境: conda activate unilab\n" - "3. 或手动source ROS 2 setup文件: source /opt/ros/humble/setup.bash\n" + "3. 或手动source ROS 2 setup文件: source /opt/ros/jazzy/setup.bash\n" "4. 或者使用 --backend simple 参数跳过ROS依赖" ) @@ -405,4 +405,4 @@ def start(self) -> None: # print(self.urdf_str) # print('--------------------------------') self.launch_service.include_launch_description(launch_description) - self.launch_service.run() \ No newline at end of file + self.launch_service.run() diff --git a/unilabos/registry/devices/robot_linear_motion.yaml b/unilabos/registry/devices/robot_linear_motion.yaml index 051a4c1ff..3257958c3 100644 --- a/unilabos/registry/devices/robot_linear_motion.yaml +++ b/unilabos/registry/devices/robot_linear_motion.yaml @@ -130,7 +130,8 @@ linear_motion.grbl: handles: {} placeholder_keys: {} result: - result: result + error_code: error_code + error_msg: error_msg schema: description: '' properties: @@ -348,10 +349,12 @@ linear_motion.grbl: result: additionalProperties: false properties: - result: - additionalProperties: true - title: result - type: object + error_code: + maximum: 65535 + minimum: 0 + type: integer + error_msg: + type: string title: NavigateThroughPoses_Result type: object required: diff --git a/unilabos/utils/environment_check.py b/unilabos/utils/environment_check.py index e0becb108..6b3886473 100644 --- a/unilabos/utils/environment_check.py +++ b/unilabos/utils/environment_check.py @@ -301,7 +301,6 @@ def __init__(self): "websockets": "websockets", "msgcenterpy": "msgcenterpy", "orjson": "orjson", - "opentrons_shared_data": "opentrons_shared_data", "typing_extensions": "typing_extensions", "crcmod": "crcmod-plus", } diff --git a/unilabos/utils/requirements.txt b/unilabos/utils/requirements.txt index 75ed4ca8a..dcd9cae28 100644 --- a/unilabos/utils/requirements.txt +++ b/unilabos/utils/requirements.txt @@ -1,20 +1,20 @@ -networkx -typing_extensions -websockets +networkx>=3.2 +typing_extensions>=4.12 +websockets>=12 msgcenterpy>=0.1.8 orjson>=3.11 -opentrons_shared_data -pint -fastapi -jinja2 -requests +pint>=0.23 +fastapi>=0.115 +jinja2>=3.1.4 +requests>=2.32 httpx>=0.27.0 -uvicorn -pyautogui -opcua -pyserial -pandas -crcmod-plus -pymodbus -matplotlib -pylibftdi \ No newline at end of file +uvicorn>=0.30 +pyautogui>=0.9.54 +opcua>=0.98.13 +pyserial>=3.5 +pandas>=2.2 +crcmod-plus>=2.3.1 +pymodbus>=3.6.9,<4 +matplotlib>=3.8 +pylibftdi>=0.22 +pprp>=0.2.7 diff --git a/unilabos_msgs/package.xml b/unilabos_msgs/package.xml index 3e49ed044..995cdb805 100644 --- a/unilabos_msgs/package.xml +++ b/unilabos_msgs/package.xml @@ -2,7 +2,7 @@ unilabos_msgs - 0.11.3 + 0.12.0 ROS2 Messages package for unilabos devices Junhan Chang Xuwznln