Either $50 bounty or $50/hr pair coding bounty: XtDrone

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).

4 Likes

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.

1 Like

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-grepping logic to guard them.

If you are interested, I’ll open a draft PR this weekend.

1 Like

@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!

1 Like

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.

1 Like

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.

2 Likes

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,

  1. px4 build uses git egregiously, so getting exactly the right functionality patched and replaced is still a bit off.
  2. px4 build expects its submodule dependencies to be available as source and is tied pretty tightly to the filesystem structure