From 335a5ede21e4642bfe839b8fdef132f08bfef5c0 Mon Sep 17 00:00:00 2001 From: Igor Brylyov Date: Fri, 28 Jun 2024 09:18:26 +0000 Subject: [PATCH] Big refactor --- .envrc | 1 + README.md | 4 +- default.nix | 63 +++- flake.lock | 24 +- flake.nix | 288 ++++-------------- overlay.nix | 5 + .../python-modules => }/ansitable/default.nix | 0 pkgs/blender/default.nix | 34 +++ pkgs/{misc => }/bpy-lib/default.nix | 0 .../python-modules => }/bpy-wheel/default.nix | 0 pkgs/default.nix | 111 +++++++ pkgs/{misc => }/freecad-lib/default.nix | 0 .../freecad.robossembler/default.nix | 0 pkgs/{misc => }/fstl/default.nix | 0 pkgs/{misc => }/mayo/default.nix | 0 .../megapose6d/default.nix | 0 .../python-modules => }/open3d/default.nix | 0 .../python-modules => }/pysdf/default.nix | 0 .../python-modules => }/pytorch3d/default.nix | 0 .../rcg-pipeline/default.nix | 4 +- .../spatialmath/default.nix | 0 .../test-script/default.nix | 0 .../unified-planning/default.nix | 0 .../webdataset/default.nix | 0 ros/default.nix | 17 ++ 25 files changed, 304 insertions(+), 247 deletions(-) create mode 100644 .envrc create mode 100644 overlay.nix rename pkgs/{development/python-modules => }/ansitable/default.nix (100%) create mode 100644 pkgs/blender/default.nix rename pkgs/{misc => }/bpy-lib/default.nix (100%) rename pkgs/{development/python-modules => }/bpy-wheel/default.nix (100%) create mode 100644 pkgs/default.nix rename pkgs/{misc => }/freecad-lib/default.nix (100%) rename pkgs/{development/python-modules => }/freecad.robossembler/default.nix (100%) rename pkgs/{misc => }/fstl/default.nix (100%) rename pkgs/{misc => }/mayo/default.nix (100%) rename pkgs/{development/python-modules => }/megapose6d/default.nix (100%) rename pkgs/{development/python-modules => }/open3d/default.nix (100%) rename pkgs/{development/python-modules => }/pysdf/default.nix (100%) rename pkgs/{development/python-modules => }/pytorch3d/default.nix (100%) rename pkgs/{development/python-modules => }/rcg-pipeline/default.nix (97%) rename pkgs/{development/python-modules => }/spatialmath/default.nix (100%) rename pkgs/{development/python-modules => }/test-script/default.nix (100%) rename pkgs/{development/python-modules => }/unified-planning/default.nix (100%) rename pkgs/{development/python-modules => }/webdataset/default.nix (100%) create mode 100644 ros/default.nix diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..cffc922 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake . --impure diff --git a/README.md b/README.md index b2ac77a..932ae4e 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,11 @@ [Cachix Cache](https://robossembler.cachix.org) -Для установки в свою систему blender 3.4.1 +Для установки в свою систему Blender с настройками Robossembler * `nix profile install gitlab:robossembler/nix-robossembler-overlay#blender` Запуск локальных окружений для разработки -* Python-модуль bpy: `nix develop gitlab:robossembler/nix-robossembler-overlay#bpy` +* Python-окружение для Perception навыков робота: `nix develop gitlab:robossembler/nix-robossembler-overlay#perception` * ROS2 Rolling `nix develop gitlab:robossembler/nix-robossembler-overlay#ros` Для внесения изменений в репозиторий: diff --git a/default.nix b/default.nix index 1f45141..f7c4dbc 100644 --- a/default.nix +++ b/default.nix @@ -1,4 +1,4 @@ -{ mkDerivation, mayo, wrapQtAppsHook, lib }: +{ mkDerivation, pkgs, mayo, wrapQtAppsHook, lib, rbs-workbench, cad-gen, cg-gen }: let step2stl = name: file: @@ -20,6 +20,63 @@ let rm ${pname} ''; }; - rlib = { inherit step2stl; }; + + freecad2parts = + file: + let + pname = "${file}-parts"; + extension = lib.last (lib.strings.splitString "." file); + cad_export_script = pkgs.writers.writePython3 "cad_export_script.py" + { libraries = [ rbs-workbench ]; } + '' + import FreeCAD as App + import freecad.robossembler.utils.freecad_exporters as rbs + import sys + + path = sys.argv[4] + print(path) + doc = App.openDocument(path) + rbs.publish_project_database(doc) + App.closeDocument(doc.Name) + ''; + in + lib.throwIfNot + (lib.elem extension ["FCStd"]) + ''Input file have a "${extension}" extension, but valid FreeCAD file should have "FCStd" extention'' + mkDerivation rec { + inherit pname; + version = "unstable"; + src = ./.; + nativeBuildInputs = [ cad-gen pkgs.freecad ] ++ pkgs.freecad.buildInputs; + buildInputs = [ ]; + dontWrapQtApps = true; + buildPhase = '' + export PYTHONPATH="${rbs-workbench}/${pkgs.python3.sitePackages}" + ${pkgs.freecad}/bin/freecadcmd ${cad_export_script} -- --pass $1 + #${pkgs.freecad}/bin/freecadcmd -h + #${cad-gen}/bin/cad-gen ${file} + mv parts* trees* $out + ''; + }; + + parts-packages = + parts-package: + let + parts = lib.trivial.importJSON "${parts-package.src}/parts.json"; + pkgSet = builtins.listToAttrs (map ({ material_path, name, part_path }: { inherit name; value = part_path; }) parts ); + mkPkg = + { name, value }: + mkDerivation { + src = "${parts-package}"; + pname = name; + installPhase = '' + outputs = [ "stl" ]; + ln ${parts-package}/${value} $stl + ''; + }; + in + lib.lists.forEach mkPkg pkgSet; + + rlib = { inherit step2stl freecad2parts parts-packages; }; in -rlib \ No newline at end of file +rlib diff --git a/flake.lock b/flake.lock index ed81be7..306a559 100644 --- a/flake.lock +++ b/flake.lock @@ -33,15 +33,15 @@ "type": "github" } }, - "gazebo": { + "gazebo-overlay": { "inputs": { "flake-utils": [ - "ros-flake", + "ros-overlay", "flake-utils" ], "nixgl": "nixgl", "nixpkgs": [ - "ros-flake", + "ros-overlay", "nixpkgs" ] }, @@ -128,25 +128,29 @@ "root": { "inputs": { "flake-utils": [ - "ros-flake", + "ros-overlay", "flake-utils" ], - "gazebo": "gazebo", + "gazebo-overlay": "gazebo-overlay", "nixpkgs": "nixpkgs_2", - "ros-flake": "ros-flake" + "ros-nixpkgs": [ + "ros-overlay", + "nixpkgs" + ], + "ros-overlay": "ros-overlay" } }, - "ros-flake": { + "ros-overlay": { "inputs": { "flake-utils": "flake-utils_2", "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1711215320, - "narHash": "sha256-dIjE3NR/sTED8uOLUzqSgj+OaRDQuZK6d9U1EAWamx4=", + "lastModified": 1715462692, + "narHash": "sha256-ClDP5aXC46y4wyHhEETWHitqIoNLDrt6uRX2HpZtmd0=", "owner": "lopsided98", "repo": "nix-ros-overlay", - "rev": "1b9585ae8f529b2b392203f2dda6fb96311621a9", + "rev": "f1c32375c27e59a2e8107d52357a5ee44b3c4413", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 3e0ed9c..d3a0835 100644 --- a/flake.nix +++ b/flake.nix @@ -2,247 +2,51 @@ description = "Robossembler Development Environments on Nix"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs?ref=master"; - flake-utils.follows = "ros-flake/flake-utils"; - ros-flake.url = "github:lopsided98/nix-ros-overlay?ref=develop"; - gazebo = { + flake-utils.follows = "ros-overlay/flake-utils"; + ros-overlay.url = "github:lopsided98/nix-ros-overlay?ref=develop"; + ros-nixpkgs.follows = "ros-overlay/nixpkgs"; + gazebo-overlay = { url = "github:movefasta/gazebo-sim-overlay"; - inputs.flake-utils.follows = "ros-flake/flake-utils"; - inputs.nixpkgs.follows = "ros-flake/nixpkgs"; + inputs.flake-utils.follows = "ros-overlay/flake-utils"; + inputs.nixpkgs.follows = "ros-overlay/nixpkgs"; # Transitive inputs "not in registry" https://github.com/NixOS/nix/issues/5790 - # inputs.nixgl.inputs.nixpkgs.follows = "ros-flake/nixpkgs"; - # inputs.nixgl.inputs.flake-utils.follows = "ros-flake/flake-utils"; + # inputs.nixgl.inputs.nixpkgs.follows = "ros-overlay/nixpkgs"; + # inputs.nixgl.inputs.flake-utils.follows = "ros-overlay/flake-utils"; }; }; - outputs = { self, nixpkgs, ros-flake, gazebo, flake-utils }: + outputs = { self, nixpkgs, ros-overlay, ros-nixpkgs, gazebo-overlay, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let - # pkgs = nixpkgs.legacyPackages.${system}.extend overlay; - ros = ros-flake.legacyPackages.${system}; - - # single source for Robossembler Framework packages - rbsFrameworkSrc = pkgs.fetchgit { - url = "https://gitlab.com/robossembler/framework"; - hash = "sha256-K6vnCQn129TWiMEKe81eBx/1H6PaIriCnkHGRwL8fg0="; - rev = "e8bb59124d56c5aee0180b4c7d5c7bfeec9cb1ea"; - }; - - pkgs = import nixpkgs { inherit system; overlays = [ overlay gazebo.overlays.default ]; }; - - overlay = final: prev: { - # -- PLACEHOLDER for overlay - # freecad = prev.freecad.overrideAttrs - # (old: { cmakeFlags = old.cmakeFlags ++ [ "-DBUILD_GUI=OFF" ]; }); - # cmakeFlag -BUILD_GUI=OFF for build without gui - pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [ - ( - python-final: python-prev: { - iopath = python-prev.iopath.overridePythonAttrs (oldAttrs: { - version = "unstable"; - src = pkgs.fetchFromGitHub { - owner = "facebookresearch"; - repo = "iopath"; - rev = "9dcb63a46447556460fdb65c21aa6d094a7a788c"; - hash = "sha256-X1LTOfbIAMy6gToNYS0JpeJpHi0jHPsEjrnCq2c9U0E="; - }; - }); - } - ) + pkgs = import nixpkgs { inherit system; overlays = [ + (import ./overlay.nix) + gazebo-overlay.overlays.default ]; }; - - # overrided packages and attributes for nix-ros-overlay - humble-overrided = ros.humble.overrideScope (final: prev: { - # remove after update github:lopsided98/nixpkgs/nix-ros for https://github.com/NixOS/nixpkgs/pull/224099 - behaviortree-cpp-v3 = prev.behaviortree-cpp-v3.overrideAttrs (old: { - propagatedBuildInputs = old.propagatedBuildInputs ++ [ pkgs.zeromq ]; - }); - moveit-core = prev.moveit-core.overrideAttrs (old: { - propagatedBuildInputs = old.propagatedBuildInputs ++ [ prev.tf2-kdl ]; - }); - moveit-kinematics = prev.moveit-kinematics.overrideAttrs (old: { - propagatedBuildInputs = old.propagatedBuildInputs ++ [ final.moveit-ros-planning ]; - }); - }); - - # robossembler custom packages; defined here for share between devShells and packages - cg_preferences = pkgs.fetchgit { - url = "https://gitflic.ru/project/brothermechanic/cg_preferences.git"; - sha256 = "sha256-/mNNjvrhIxSZVv1/LSJ7+c/dXH3E0Orh5Zr0oVPLquY="; - }; - rs_logo = pkgs.fetchgit { - url = "https://gitlab.com/robossembler/logo.git"; - rev = "0a0235cd154a59b711e87456206ccd7ba69a7e4e"; - sha256 = "sha256-/QsgKdtDHNymsTEmhIzSrOKNUqqkXl8coy+5LwIEkas="; - fetchLFS = true; - }; - blender' = pkgs.blender.override { - cudaSupport = true; - spaceNavSupport = false; - waylandSupport = false; - }; - blender = blender'.overrideAttrs (old: { - optix = pkgs.fetchzip { - # url taken from the archlinux blender PKGBUILD - url = "https://developer.download.nvidia.com/redist/optix/v7.4/OptiX-7.4.0-Include.zip"; - sha256 = "sha256-ca08XetwaUYC9foeP5bff9kcDfuFgEzopvjspn2s8RY="; - }; - patches = old.patches ++ [ "${cg_preferences}/patches/cg-defaults.patch" ]; - buildInputs = old.buildInputs ++ [ pkgs.imath pkgs.git ]; - postPatch = old.postPatch + '' - cp ${cg_preferences}/share/00_cg_preferences_service.py scripts/startup/ - cp ${cg_preferences}/share/startup.blend release/datafiles/ - cp ${rs_logo}/raster/robossembler_1024x512_roboty-rossii.png release/datafiles/splash.png - ''; - env.NIX_CFLAGS_COMPILE = old.env.NIX_CFLAGS_COMPILE + " -I${pkgs.imath}/include/Imath"; - postInstall = old.postInstall + '' - cp -r ${cg_preferences}/cg_preferences $out/share/blender/${ - pkgs.lib.versions.majorMinor pkgs.blender.version - }/scripts/addons/ - ''; - }); - bpy = blender.overrideAttrs (old: { - pname = "bpy"; - src = pkgs.fetchurl { - url = "https://download.blender.org/source/${old.pname}-${old.version}.tar.xz"; - hash = "sha256-3AAtguPDQMk4VcZoRzDQGAG2aaKbHMa3XuuZC6aecj8="; - }; - cmakeFlags = old.cmakeFlags ++ [ - "-DWITH_PYTHON_INSTALL=OFF" - "-DWITH_AUDASPACE=OFF" - "-DWITH_PYTHON_MODULE=ON" - "-DWITH_MEM_JEMALLOC=OFF" - "-DWITH_INSTALL_PORTABLE=ON" - ]; - postInstall = '' - mkdir -p $out/nix-support - mkdir -p $out/lib/python${pkgs.python3.pythonVersion}/site-packages - ln -s $out/bpy $out/lib/python${pkgs.python3.pythonVersion}/site-packages/bpy - echo ${pkgs.python3} >> $out/nix-support/propagated-build-inputs - ''; - }); - bpy-wheel = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/bpy-wheel { }; - pysdf = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/pysdf { }; - pytorch3d = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/pytorch3d { }; - mayo = pkgs.libsForQt5.callPackage ./pkgs/misc/mayo { }; - fstl = pkgs.libsForQt5.callPackage ./pkgs/misc/fstl { }; - open3d = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/open3d { }; - unified-planning = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/unified-planning { }; - blenderproc = pkgs.python3Packages.callPackage ./blenderproc.nix { }; - test-script = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/test-script { }; - webdataset = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/webdataset { }; - ansitable = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/ansitable { }; - megapose6d = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/megapose6d { inherit webdataset; }; - spatialmath = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/spatialmath { inherit ansitable; }; - rcg-pipeline = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/rcg-pipeline { bpy = bpy-lib; inherit rbsFrameworkSrc; }; - rbs-workbench = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/freecad.robossembler { inherit freecad-lib; inherit rbsFrameworkSrc; }; - freecad-lib = pkgs.python3Packages.toPythonModule (pkgs.callPackage ./pkgs/misc/freecad-lib { }); - bpy-lib = pkgs.python3Packages.toPythonModule bpy; - cad-gen = - let - cad_export_script = pkgs.writers.writePython3 "cad_export_script.py" - { libraries = [ rbs-workbench ]; } - '' - import FreeCAD as App - import freecad.robossembler.utils.freecad_exporters as rbs - import sys - - path = sys.argv[4] - print(path) - doc = App.openDocument(path) - rbs.publish_project_database(doc) - App.closeDocument(doc.Name) - ''; - in - pkgs.writeShellScriptBin "cad-gen" - '' - export PYTHONPATH="${rbs-workbench}/${pkgs.python3.sitePackages}" - ${pkgs.freecad}/bin/freecadcmd ${cad_export_script} -- --pass $1 - ''; - cg-gen = pkgs.writers.writePython3Bin "cg-gen" - { libraries = [ rcg-pipeline ]; } - '' - from rcg_pipeline import rcg_full_pipeline - import sys - rcg_full_pipeline(sys.argv[1]) - ''; + ros = import ros-nixpkgs { inherit system; overlays = [ + ros-overlay.overlays.default + (import ./ros) + ];}; in { - inherit pkgs; rlib = import ./. { + inherit pkgs; + inherit (pkgs) lib mayo rbs-workbench cad-gen cg-gen; inherit (pkgs.stdenv) mkDerivation; - inherit (pkgs) lib; - inherit mayo; inherit (pkgs.libsForQt5) wrapQtAppsHook; }; packages = { - inherit unified-planning test-script cad-gen cg-gen blender bpy; + inherit (pkgs) cad-gen cg-gen blender; }; - devShells.ci = pkgs.mkShell { buildInputs = [ pkgs.jq ]; }; + inherit ros pkgs; - devShells.gazebo = gazebo.devShells.${system}.default; - - devShells.ros = - pkgs.mkShell { - buildInputs = (with humble-overrided; [ - ros2run - rmw-fastrtps-dynamic-cpp - urdf - ament-pep257 - ament-lint-auto - xacro - ament-cmake - rclcpp-action - tf2 - action-msgs - ament-copyright - pythonPackages.pytest - rosidl-default-generators - behaviortree-cpp-v3 - geometry-msgs - rosidl-default-runtime - rclpy - std-msgs - ament-lint-common - ament-flake8 - tf2-ros - rclcpp - moveit-core - moveit-msgs - moveit-ros-planning - moveit-ros-planning-interface - gazebo-ros2-control - plansys2-bringup - image-transport - cv-bridge - example-interfaces - ]) ++ (with pkgs; [ nlohmann_json glog lua5_3_compat gazebo_sim ]); - RMW_IMPLEMENTATION = "rmw_fastrtps_dynamic_cpp"; - }; - - devShells.all = pkgs.mkShell { - packages = [ blender fstl mayo ]; - }; - - devShells.perception = - let - rbs-packages = p: with p; [ - torch - torchvision - torchaudio - detectron2 - ]; - in - pkgs.mkShell { - packages = [ (pkgs.python3.withPackages rbs-packages) ]; - }; - - devShells.default = + devShells = { + default = let my-python-packages = p: with p; [ unified-planning @@ -251,22 +55,46 @@ spatialmath rcg-pipeline rbs-workbench - ledger ]; in pkgs.mkShell { - packages = with pkgs; [ - freecad - mayo - bashInteractive - ] ++ [ (pkgs.python3.withPackages my-python-packages) ]; - buildInputs = [ ]; - - # Run when the shell is started up - shellHook = '' - ${pkgs.python3}/bin/python --version - ''; + packages = (with pkgs; [ freecad mayo ]) ++ [ (pkgs.python3.withPackages my-python-packages) ]; }; + + ros = pkgs.mkShell { + name = "ROS environment"; + packages = [ + ros.colcon + (with ros.rosPackages.humble; buildEnv { + paths = [ + ros-core + rmw-fastrtps-dynamic-cpp + ]; + }) + ]; + # ROS 2 middleware variants, for Cyclone DDS replace with "rmw_cyclonedds_cpp" and add rmw-cyclonedds-cpp to paths + RMW_IMPLEMENTATION = "rmw_fastrtps_dynamic_cpp"; + }; + + all = pkgs.mkShell { packages = with pkgs; [ fstl mayo cad-gen cg-gen ]; }; + + ci = pkgs.mkShell { buildInputs = [ pkgs.jq ]; }; + + gazebo = gazebo-overlay.devShells.${system}.default; + + perception = + let + perception-packages = p: with p; [ + torch + torchvision + torchaudio + detectron2 + ]; + in + pkgs.mkShell { + packages = [ (pkgs.python3.withPackages perception-packages) ]; + }; + }; } ); diff --git a/overlay.nix b/overlay.nix new file mode 100644 index 0000000..930163f --- /dev/null +++ b/overlay.nix @@ -0,0 +1,5 @@ +final: prev: with prev.lib; +foldr composeExtensions (_: _: {}) [ + (import ./pkgs) + (import ./ros) +] final prev \ No newline at end of file diff --git a/pkgs/development/python-modules/ansitable/default.nix b/pkgs/ansitable/default.nix similarity index 100% rename from pkgs/development/python-modules/ansitable/default.nix rename to pkgs/ansitable/default.nix diff --git a/pkgs/blender/default.nix b/pkgs/blender/default.nix new file mode 100644 index 0000000..842757e --- /dev/null +++ b/pkgs/blender/default.nix @@ -0,0 +1,34 @@ +{ fetchgit, fetchzip, blender, imath, git, lib, ... }: +let + cg_preferences = fetchgit { + url = "https://gitflic.ru/project/brothermechanic/cg_preferences.git"; + sha256 = "sha256-FkF1c5MhqtG2COIpSBdoJ1aE0r8/ABtmqFLqNkF0zT0="; + }; + + rs_logo = fetchgit { + url = "https://gitlab.com/robossembler/logo.git"; + rev = "0a0235cd154a59b711e87456206ccd7ba69a7e4e"; + sha256 = "sha256-/QsgKdtDHNymsTEmhIzSrOKNUqqkXl8coy+5LwIEkas="; + fetchLFS = true; + }; +in +blender.overrideAttrs (old: { + optix = fetchzip { + # url taken from the archlinux blender PKGBUILD + url = "https://developer.download.nvidia.com/redist/optix/v7.4/OptiX-7.4.0-Include.zip"; + sha256 = "sha256-ca08XetwaUYC9foeP5bff9kcDfuFgEzopvjspn2s8RY="; + }; + patches = old.patches ++ [ "${cg_preferences}/patches/cg-defaults.patch" ]; + buildInputs = old.buildInputs ++ [ imath git ]; + postPatch = old.postPatch + '' + cp ${cg_preferences}/share/00_cg_preferences_service.py scripts/startup/ + cp ${cg_preferences}/share/startup.blend release/datafiles/ + cp ${rs_logo}/raster/robossembler_1024x512_roboty-rossii.png release/datafiles/splash.png + ''; + env.NIX_CFLAGS_COMPILE = old.env.NIX_CFLAGS_COMPILE + " -I${imath}/include/Imath"; + postInstall = old.postInstall + '' + cp -r ${cg_preferences}/cg_preferences $out/share/blender/${ + lib.versions.majorMinor blender.version + }/scripts/addons/ + ''; + }) \ No newline at end of file diff --git a/pkgs/misc/bpy-lib/default.nix b/pkgs/bpy-lib/default.nix similarity index 100% rename from pkgs/misc/bpy-lib/default.nix rename to pkgs/bpy-lib/default.nix diff --git a/pkgs/development/python-modules/bpy-wheel/default.nix b/pkgs/bpy-wheel/default.nix similarity index 100% rename from pkgs/development/python-modules/bpy-wheel/default.nix rename to pkgs/bpy-wheel/default.nix diff --git a/pkgs/default.nix b/pkgs/default.nix new file mode 100644 index 0000000..b4319af --- /dev/null +++ b/pkgs/default.nix @@ -0,0 +1,111 @@ +self: super: with self.lib; let + + # single source for Robossembler Framework packages + + rbsFrameworkSrc = self.fetchgit { + url = "https://gitlab.com/robossembler/framework"; + hash = "sha256-K6vnCQn129TWiMEKe81eBx/1H6PaIriCnkHGRwL8fg0="; + rev = "e8bb59124d56c5aee0180b4c7d5c7bfeec9cb1ea"; + }; + + bpy = self.blender.overrideAttrs (old: { + pname = "bpy"; + src = self.fetchurl { + url = "https://download.blender.org/source/${old.pname}-${old.version}.tar.xz"; + hash = "sha256-3AAtguPDQMk4VcZoRzDQGAG2aaKbHMa3XuuZC6aecj8="; + }; + cmakeFlags = old.cmakeFlags ++ [ + "-DWITH_PYTHON_INSTALL=OFF" + "-DWITH_AUDASPACE=OFF" + "-DWITH_PYTHON_MODULE=ON" + "-DWITH_MEM_JEMALLOC=OFF" + "-DWITH_INSTALL_PORTABLE=ON" + ]; + postInstall = '' + mkdir -p $out/nix-support + mkdir -p $out/lib/python${self.python3.pythonVersion}/site-packages + ln -s $out/bpy $out/lib/python${self.python3.pythonVersion}/site-packages/bpy + echo ${self.python3} >> $out/nix-support/propagated-build-inputs + ''; + }); + +in { + + # Robossembler custom packages; defined here for share between devShells and packages + + # General packages + + mayo = self.libsForQt5.callPackage ./mayo { }; + fstl = self.libsForQt5.callPackage ./fstl { }; + blender = self.callPackage ./blender { blender = super.blender.override { + cudaSupport = true; + spaceNavSupport = false; + waylandSupport = false; + }; + }; + + # Python packages + + + + pythonPackagesExtensions = super.pythonPackagesExtensions ++ [ + ( + python-final: python-prev: { + iopath = python-prev.iopath.overridePythonAttrs (oldAttrs: { + version = "unstable"; + src = self.fetchFromGitHub { + owner = "facebookresearch"; + repo = "iopath"; + rev = "9dcb63a46447556460fdb65c21aa6d094a7a788c"; + hash = "sha256-X1LTOfbIAMy6gToNYS0JpeJpHi0jHPsEjrnCq2c9U0E="; + }; + }); + unified-planning = self.python3Packages.callPackage ./unified-planning { }; + bpy-wheel = self.python3Packages.callPackage ./bpy-wheel { }; + pysdf = self.python3Packages.callPackage ./pysdf { }; + pytorch3d = self.python3Packages.callPackage ./pytorch3d { }; + blenderproc = self.python3Packages.callPackage ./blenderproc.nix { }; + test-script = self.python3Packages.callPackage ./test-script { }; + webdataset = self.python3Packages.callPackage ./webdataset { }; + ansitable = self.python3Packages.callPackage ./ansitable { }; + megapose6d = self.python3Packages.callPackage ./megapose6d { inherit (python-final) webdataset; }; + spatialmath = self.python3Packages.callPackage ./spatialmath { inherit (python-final) ansitable; }; + rcg-pipeline = self.python3Packages.callPackage ./rcg-pipeline { inherit (python-final) bpy-lib; inherit rbsFrameworkSrc; }; + rbs-workbench = self.python3Packages.callPackage ./freecad.robossembler { inherit (python-final) freecad-lib; inherit rbsFrameworkSrc; }; + freecad-lib = self.python3Packages.toPythonModule (self.callPackage ./freecad-lib { }); + bpy-lib = self.python3Packages.toPythonModule bpy; + } + ) + ]; + + # Assets Generators + cad-gen = + let + cad_export_script = self.writers.writePython3 "cad_export_script.py" + { libraries = [ self.python3Packages.rbs-workbench ]; } + '' + import FreeCAD as App + import freecad.robossembler.utils.freecad_exporters as rbs + import sys + + path = sys.argv[4] + print(path) + doc = App.openDocument(path) + rbs.publish_project_database(doc) + App.closeDocument(doc.Name) + ''; + in + self.writeShellScriptBin "cad-gen" + '' + export PYTHONPATH="${self.python3Packages.rbs-workbench}/${self.python3.sitePackages}" + ${self.freecad}/bin/freecadcmd ${cad_export_script} -- --pass $1 + ''; + + cg-gen = self.writers.writePython3Bin "cg-gen" + { libraries = [ self.python3Packages.rcg-pipeline ]; } + '' + from rcg_pipeline import rcg_full_pipeline + import sys + rcg_full_pipeline(sys.argv[1]) + ''; +} diff --git a/pkgs/misc/freecad-lib/default.nix b/pkgs/freecad-lib/default.nix similarity index 100% rename from pkgs/misc/freecad-lib/default.nix rename to pkgs/freecad-lib/default.nix diff --git a/pkgs/development/python-modules/freecad.robossembler/default.nix b/pkgs/freecad.robossembler/default.nix similarity index 100% rename from pkgs/development/python-modules/freecad.robossembler/default.nix rename to pkgs/freecad.robossembler/default.nix diff --git a/pkgs/misc/fstl/default.nix b/pkgs/fstl/default.nix similarity index 100% rename from pkgs/misc/fstl/default.nix rename to pkgs/fstl/default.nix diff --git a/pkgs/misc/mayo/default.nix b/pkgs/mayo/default.nix similarity index 100% rename from pkgs/misc/mayo/default.nix rename to pkgs/mayo/default.nix diff --git a/pkgs/development/python-modules/megapose6d/default.nix b/pkgs/megapose6d/default.nix similarity index 100% rename from pkgs/development/python-modules/megapose6d/default.nix rename to pkgs/megapose6d/default.nix diff --git a/pkgs/development/python-modules/open3d/default.nix b/pkgs/open3d/default.nix similarity index 100% rename from pkgs/development/python-modules/open3d/default.nix rename to pkgs/open3d/default.nix diff --git a/pkgs/development/python-modules/pysdf/default.nix b/pkgs/pysdf/default.nix similarity index 100% rename from pkgs/development/python-modules/pysdf/default.nix rename to pkgs/pysdf/default.nix diff --git a/pkgs/development/python-modules/pytorch3d/default.nix b/pkgs/pytorch3d/default.nix similarity index 100% rename from pkgs/development/python-modules/pytorch3d/default.nix rename to pkgs/pytorch3d/default.nix diff --git a/pkgs/development/python-modules/rcg-pipeline/default.nix b/pkgs/rcg-pipeline/default.nix similarity index 97% rename from pkgs/development/python-modules/rcg-pipeline/default.nix rename to pkgs/rcg-pipeline/default.nix index 01efd32..cd4ee6b 100644 --- a/pkgs/development/python-modules/rcg-pipeline/default.nix +++ b/pkgs/rcg-pipeline/default.nix @@ -8,7 +8,7 @@ , cudaSupport ? config.cudaSupport , numpy , setuptools -, bpy +, bpy-lib , rbsFrameworkSrc , ... }: @@ -27,7 +27,7 @@ buildPythonPackage rec { propagatedBuildInputs = [ numpy - bpy + bpy-lib ]; # TODO - see later, pyproject.toml duntime deps check doesnt work diff --git a/pkgs/development/python-modules/spatialmath/default.nix b/pkgs/spatialmath/default.nix similarity index 100% rename from pkgs/development/python-modules/spatialmath/default.nix rename to pkgs/spatialmath/default.nix diff --git a/pkgs/development/python-modules/test-script/default.nix b/pkgs/test-script/default.nix similarity index 100% rename from pkgs/development/python-modules/test-script/default.nix rename to pkgs/test-script/default.nix diff --git a/pkgs/development/python-modules/unified-planning/default.nix b/pkgs/unified-planning/default.nix similarity index 100% rename from pkgs/development/python-modules/unified-planning/default.nix rename to pkgs/unified-planning/default.nix diff --git a/pkgs/development/python-modules/webdataset/default.nix b/pkgs/webdataset/default.nix similarity index 100% rename from pkgs/development/python-modules/webdataset/default.nix rename to pkgs/webdataset/default.nix diff --git a/ros/default.nix b/ros/default.nix new file mode 100644 index 0000000..b1c0e06 --- /dev/null +++ b/ros/default.nix @@ -0,0 +1,17 @@ +self: super: +{ + humble = super.rosPackages.humble.overrideScope ( + final: prev: { + # remove after update github:lopsided98/nixpkgs/nix-ros for https://github.com/NixOS/nixpkgs/pull/224099 + behaviortree-cpp-v3 = prev.behaviortree-cpp-v3.overrideAttrs (old: { + propagatedBuildInputs = old.propagatedBuildInputs ++ [ self.zeromq self.pkg-config ]; + }); + moveit-core = prev.moveit-core.overrideAttrs (old: { + propagatedBuildInputs = old.propagatedBuildInputs ++ [ prev.tf2-kdl ]; + }); + moveit-kinematics = prev.moveit-kinematics.overrideAttrs (old: { + propagatedBuildInputs = old.propagatedBuildInputs ++ [ final.moveit-ros-planning ]; + }); + } + ); +}