I’ve been trying to get a copy of XtDrone (GitHub - robin-shaun/XTDrone: UAV Simulation Platform based on PX4, ROS and Gazebo) running in nixos. I’ve got a partial flake but am stuck on compiling PX4 right now. Ideally, I’d like one of you experts to jump on a paid call and walk me through it so I can get better at NixOS. I’d also just send $50 (but I suspect it’s probably an underpay for the amount of work to get this compiling).
Ask for clarification: is your expectations for this bounty just packaging it or explaining to you how to package it?
I’ll pay $50 for a packaged Xtdrone with no explanation or call. But the pair programming would include walking me through it. I know enough nix to probably get everything when I see the correct solution. I think it’s more arcane makefile knowledge than nix knowledge for this bounty tbh.
Hey, I’m no NixOS expert, but I suppose I’m an intermediate user and I really do like Makefile. You don’t have to pay me. I’d be happy to hop on a call, I actually think I could learn from your understanding of Flakes. Send me a pm if you’re interested to connect.
To package XtDrone, we need to get its dependencies ready first. The good news is that there’s a nix-ros-overlay project thanks to @lopsided98, and @quantum9innovation seems to start working on Gazebo packaging.
Putting bounty on each dependency component would make the payment more reasonable and the goal more reachable.
I will be experimenting with Gazebo on Nix in the coming weeks/months. It should definitely be possible to get working correctly but may take some time to iron out dependency issues.
Glad to hear that! I actually had some progress, but there are still quite some packages left.
Many of them come with several “components”, which will be implicitly disabled with a warning message when their dependencies aren’t met. I used programmatically generated package tests with CMake-output-log-grep
ping logic to guard them.
If you are interested, I’ll open a draft PR this weekend.
@quantum9innovation, here is the draft PR.
There are still quite a few packages left, and my bandwidth on this is a bit limited. Contributions are welcome!
This is amazing! I’m guessing the main gz-sim package still needs to be added along with remaining dependencies, since I didn’t see a Nix expression for that in the PR (though I could be mistaken). I found the official installation instructions for building it from source here: Gazebo Sim: Installation. I would be happy to help with the remaining packages when I get a chance—great to see you are making progress.
I didn’t push it up, since it still require quite a few dependencies (some other gz-*
packages) to build.
Should I upload the half-finished gz-sim
package?
Sure, that would be helpful just to see how you’re planning on packaging everything together. If you could send a list of the remaining dependencies I can work on the relevant Nix expressions for them this week.
gz-sim
is now inside the PR.
@shamrocklee I started on implementing the remaining packages, but still have to test if they work: remaining dependencies by quantum9Innovation · Pull Request #1 · ShamrockLee/nixpkgs · GitHub. Let me know if I’m doing something wrong, since I just followed the template you created for the other Gazebo packages (I also need to specify certain external dependencies).
Also I think we should take a look at Nix build environment by blaggacao · Pull Request #24635 · PX4/PX4-Autopilot · GitHub since this seems to be practically equivalent to what we’re trying to implement. Apparently there is a segfault issue, but I have not tested this to see if I can reproduce it and what steps can be taken to address it.
Originally, the one off bounty was significantly lower than the per hour bounty because I was hoping to get some help with this as I was relatively new to nix builds of this complexity. I’ve done some work since then (gist here.)
The main problems continue to be,
- px4 build uses git egregiously, so getting exactly the right functionality patched and replaced is still a bit off.
- px4 build expects its submodule dependencies to be available as source and is tied pretty tightly to the filesystem structure