Big refactor
This commit is contained in:
parent
327d559f71
commit
335a5ede21
25 changed files with 304 additions and 247 deletions
288
flake.nix
288
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) ];
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue