-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ROS2 Inquery #15
Comments
While it would be awesome to see other people use this, first of, one issue currently is available time for me to do anything except what I need right now. Also, ROS2 development seems to be going rather slow and have lots of bikeshedding from what I have heard. I'm not interested in getting involved in heated discussions.
Adding other motion models should indeed be trivial ( These days I work with a robot with much better odometry as well as a better LIDAR (Velodyne VLP-16) and I'm using QuickMCL on it (and it is working well), which is why I added dynamic_reconfigure this autumn (it didn't have that before). I think the code related to parameter handling is probably a bit messy and it is clear that dynamic_reconfigure is an afterthought. I also started on extracting some components from QuickMCL into a separate library ( https://github.com/VorpalBlade/ros_spatial_utils) since I needed them for a different node. There I did the conversion to camel case. I have not yet had time to make QuickMCL use that, nor figure out how the CI should be set up for that. As for license, I'm open to reconsideration (to LGPL-2/3 or perhaps Apache). I'm quite keen on copy left in general though, so BSD is a much harder sell. My understanding is that ROS messaging between nodes however does not count as linking. Thus it would be equivalent to using a non-GPL browser to access a web page served by a server licensed under GPL (i.e. not a problem). But I'm not a lawyer, so please correct me if I'm wrong. Even if none of this goes anywhere (I certainly hope it does) I do plan to eventually get around to putting up a ROS wiki page for QuickMCL. Another interesting idea I have had is making QuickMCL usable as a nodelet. This would basically mean instantiating NodeHandle once, and passing it to the constructors, instead of instantiating it everywhere like today. It could be interesting to run it together with the laser driver nodelets and see if that improves performance at all. |
There's alot to unpack so I'll go inline
Of course. My intention would be to help in this process as well. Though I'd hope that long term you'd help be a maintainer of it.
I think that's an unfair characterization. But you'd have to be more specific about what you think is going on that gives you that impression.
Oh sorry, I meant that for the CPU/memory benchmarks you did without the sampling in your blog post. I wanted to make sure that the KLD sampling does work and is still more efficient, even if in the benchmarking its less deterministic.
Good on you, this is one of the better implementations I've seen. I disagree with some of the architectural decisions, but they're all decisions that I can tell were consciously made and not just mashed together like most graduate student project code 😆
Sure, more information is always better than less.
Eh. No one listens to that for the most part anyhow. There's enough refactoring I'd need to do for a ROS2 port that that's the least of my concerns.
It'll be fine. Only change is TF2 if you weren't using it already.
Makes sense, but there are reasons for people with 2D lasers to was a point cloud. For instance that they have multiple sensors on their robot they want to fuse together, this would let them do it more easily. With that said, I'd like to eventually overhaul to support 3D localization, but as a community we need to decide on a 3D map format first.
AMCL basically has no tests so some is better than none. Integration tests Navigation2 will take on. I actually prefer that you didn't do the motion model work yet. I'm in the middle of designing a motion model plugin package so we can reuse motion models for different base types in planners, controllers, amcl, etc. Beam skipping... yeah I didn't think much about it in particular. I have some notes somewhere when I did several thousand automated tests with different AMCL settings and beam skipping really did help the beam model alot but I forget relative to the max liki. model if that was still superior. I'd be curious to know more about your robot, if you're open to sharing. Just curious.
So Apache I think would be the vote I would give (if I get one, which I don't) for a couple reasons
You're technically right, but what you're missing is the fact that most companies won't touch GPL with a 10 foot pole as a policy. They won't let it on their product mostly out of fear. Most companies also won't let people contribute back to GPL open source projects. Even LGPL-2 is hairy but you can get away with it if there's nothing built on top of it (hence application-level code) and it represents some work so involved its worth dealing with the lawyers.
It would help a little bit, but given those messages are relatively small for 2D lasers that it wouldn't be enough to justify the rearchitecture unless you were going to anyhow for othe reasons. ROS2 has the concept of composible nodes that are basically Nodelets but without having to change the APIs. |
Also inline, because I agree it is getting complicated.
Long term that sounds good yes.
This is what I have heard from researchers at my university, I don't have any personal experience (obviously). I'm just not interested in politics, so if I can stay out of that, I'm all for ROS2.
Ah yes, indeed. Based on looking at the source for the testing scripts I used for the perfomance analysis (https://github.com/VorpalBlade/ros_mcl_performance_test) what I did was use KLD but set the min and max particle parameters to be equal. I specifically wanted to test how the performance scaled with number of particles. The KLD code is still active, but for all intents and purposes the algorithm is disabled.
I worked with C++ in the industry for 6 years between my bachelor and my masters. That helps.
I will try to find a way to send it to you then.
I'm using TF2, so that won't be an issue.
That was my original thinking, but now that I'm working with a 3D laser I find it less useful. As for 3D localisation, I'm quite interested in MCL with NDT (Saarinen et al. 2013; Magnuson et al. 2007; etc). But that would be a completely different piece of software.
Certainly. This spring I was working on a robot that was based on this kit: https://www.makeblock.com/steam-kits/mbot-ultimate Now I'm working on a project using a converted lawnmower robot (Husqvarna brand), with a Velodyne VLP-16 strapped on top and a high end Intel NUC as the brainbox.
Those are some big company names. I will need a little bit of time to look into what exactly Apache etc entails.
Except for the Linux kernel, which gets away with GPL-2 somehow. But yes, I can see that being a special case.
Which is probably another point of friction. I don't have the time (or robot) to run ROS2 at the moment. I'm basically stuck at 16.04 and Kinetic for the forseable future. Looks like my master thesis work this spring might even involve a system that is still on 14.04, which will be intersting given my laptop is new enough to not boot with that.
Long term that sounds good yes.
This is what I have heard from researchers at my university, I don't have any personal experience (obviously). I'm just not interested in politics, so if I can stay out of that, I'm all for ROS2.
Ah yes, indeed. Based on looking at the source for the testing scripts I used for the perfomance analysis (https://github.com/VorpalBlade/ros_mcl_performance_test) what I did was use KLD but set the min and max particle parameters to be equal. I specifically wanted to test how the performance scaled with number of particles.
I worked with C++ in the industry for 6 years between my bachelor and my masters. That helps.
I will try to find a way to send it to you then.
I'm using TF2, so that won't be an issue.
That was my original thinking, but now that I'm working with a 3D laser I find it less useful. As for 3D localisation, I'm quite interested in MCL with NDT (Saarinen et al. 2013; Magnuson et al. 2007; etc). But that would be a completely different piece of software.
Certainly. This spring I was working on a robot that was based on this kit: https://www.makeblock.com/steam-kits/mbot-ultimate Now I'm working on a project using a converted lawnmower robot (Husqvarna brand), with a Velodyne VLP-16 strapped on top and a high end Intel NUC as the brainbox.
Those are some big company names. I will need some time to look into what exactly Apache etc entails.
Except for the Linux kernel, which gets away with GPL-2 somehow. But yes, I can see that being a special case.
Which is probably another point of friction. I don't have the time (or robot) to run ROS2 at the moment. I'm basically stuck at 16.04 and Kinetic for the forseable future. Looks like my master thesis work this spring might even involve a system that is still on 14.04, which will be intersting given my laptop is new enough to not boot with that. I now started thinking about fixing AMCL by the way, and here is my take on it: AMCL has some very specific stupid code in the KLD drawing code. Fixing that would solve the bad complexity for CPU performance. As for the worse base performance and worse linear scaling constants, it is probably a case of many small stupid things. For example: while AMCL precomputes a distance-to-obstacle map, I found that you could precompute it a couple of steps further, thus saving some computation later on. Quoting myself (https://vorpal.se/posts/2019/apr/04/amcl-reverse-engineering/):
(And this is also why Another issue that I found recently (far after doing the performance comparison) is the "save initial pose to parameter server" of AMCL. I added that feature to QuickMCL a few months back, but it turns out that that is extremely slow and blocks. So while QuickMCL supports that (using a single vector parameter instead of several, which helps a bit), it is off by default and I recommend against it. Saving to the parameter server can introduce huge unpredictable latency spikes (50-150 ms!). From my understanding, this will work very differently in ROS2 and thus might not be an issue. As for AMCL using more memory and having a larger scaling constant for memory: I still have no idea what is going on there! |
Again, not really sure what you're referring to.
I guess my big question is "is it working?" You mention you have it on your robot, do you have KLD enabled there and see it operating as expected?
It sure does. I feel like it should be a requirement to work for a couple years before getting a graduate degree, it makes you so much more effective.
That is what the autoware folks use. Still the same issue with "what's the representation we all agree on". Either way, not really something to deal with right now.
Sounds about what I expected. I have a similar setup.
Well, ignoring the names for a moment, its really just people that care about open source, and within it ROS. None of us work for a particular product line we're trying to leverage open source for, we're here trying to bring Navigation into "modern" techniques. While MCL isn't new, its hard to provide a general localizer that works well for as many cases as it (though usually bad for any particular case specifically). AMCL is such a mess and the license makes it hard to work with. I saw this work and see an opportunity to revive the localization work since AMCL is just so poorly written and aged badly. It could get some fire back into actually improving it. Look into Apache, let me know what you think. Is there anything in particular you're concerned about? My title is
I got time. And we all hate AMCL. There's alot of motivation to get rid of it. The original authors of it have begged for years to delete it.
I'm a fan of just deleting it. It only encourages bad behavior.
Personally, I dont really care. AMCL's structure is terrible and if this works as well (or even realistically slightly worse but not that much worse in localization performance) I'm pretty sold. |
Yes. As far as I can tell it should be working. Also, KLD by far outperforms the two options (low variance and adpative). Might as well remove everything except KLD. |
Is there a parameter or something for that? I didn't look that deeply. |
There is a parameter: After some deliberation I have decided to switch to Apache 2.0, assuming there are no library dependencies I use that are incompatible with that. I will check that and do the actual switch some time soon. I may have some time for it this weekend, but I'm not sure. |
Looking into the licenses of the dependencies I noticed Eigen uses MPL-2.0, which seems like somewhere in between Apache 2.0 and LGPL. From a quick read it looks like QuickMCL could still use Apache 2.0 and link to MPL code in the form of Eigen. Replacing Eigen would also require a non-trivial amount of work. Also: to me MPL is more appealing than Apache, so how would it work for you to use MPL-2.0 for QuickMCL? |
That is correct, should you want to go that way. No need to remove Eigen, that would be nuts 🤣
That works for me. I need to inquire with my more sensitive colleagues and see if that poses an issue for them. In the meantime, I need to find some folks with deployed assets to give this a whirl in ROS1 to make sure it makes sense for ROS2 porting / replacement. This comment:
Is where I need to talk to the lawyers. Any requirement to share modifications is what companies fear in LGPL. Even if its in less-situations, any situations is the problem. But right now we're using LGPL on AMCL, so this is still an improvement. I'm personally willing to go with MPL -- I leave this to you. |
I will be waiting for your followup on this before going further in the re-license then. |
Hi, Ok, so still having some conversations (and will probably be having them into the new year, so I don't think this is going to move very fast. Yay inter-company bureaucracy). But the highlights of things so far and how I think it'll go
tl;dr there's general consensus this is a good option, but no one standing up and taking full ownership over making it happen. Moreover it needs to be heavily tested and looking for resources to help with those specific test cases (lots of moving stuff, lots of variations from the map, working in large repetitive warehouse are the 3 I think of as good tests). |
This sounds about what I expected when it comes to speed of bureaucracy.
|
Its just externally verifying that fact
I'd expect no less. Either a deep copy or the project itself would be transferred to the
Yeah, not a big deal. Global localization isn't used in industrial environments. Its more of a fun toy example for students and academics. In practice we have knowledge of general areas where the robot is rather than just assuming anywhere in a map. I'm more concerned about jumping around or that the laser model may have issues with large deviations as happens over weeks or months. On licenses, MPL would be fine I think. Folks on my end have tentatively approved, Intel doesn't seem to have a problem with it. I haven't gotten a response from the more sensitive groups. I don't think anyone would argue with Apache 2.0 to be in line with the rest of the navigation stuff, but at the end of the day its up to you. I don't think the difference in license would affect my ability to work on it, but if we're going to change it to that eventually, now would be the easiest time before anyone else has their fingers on the code. I agree that a license updates should happen before anyone touches anything. At this moment that person looks like me and I'm not going to have time in the immediate future to do anything. Beyond other groups, I'm also looking at hiring an intern that I would potentially task with this work. |
For me, ROS 1 support is also important for the the foreseeable future. I would like to see any functionality improvements (extra odometry models, beam model, etc) make it's way to both. I'm not very familiar with ROS2, so:
Changes to the environment is always going to cause issues for basic MCL. I assume this is what you refer to. There is of course things like dual time scale mapping, life long SLAM etc that tries to find solutions to that. However, for the time being I think this is outside the scope of this project. That said, a plugin architecture that allows experiments of that type does sound interesting! If the modularity was split at the right points, the performance impact could be minimized. However, for such work to be viable, there would have to be actual interest in that. |
I don't disagree that ROS1 is important, but personally I won't spend any time on it, I'm only interested in ROS2. ROS1 is out the door in 6 years and most companies and groups will have to move to ROS2 in the next 2-3 years. Same code base? Near impossible. Different branches are a requirement. Build system is different, APIs are different, code structure is different... |
Hi! Do you have any updates with regards to the acceptability of MPL vs Apache? |
Hi,
I'm a maintainer / developer on ROS2 Navigation [1] and was curious about this. I saw you posted on Navigation and in my glancing around I found your blog on it. There's definitely some work to be done on it, but I think its a good starting point to be a candidate for replacement of AMCL in ROS2 Navigation stack, if you're interested. I would be open to helping you finish it up to be feature parity and move it into the later stack.
The big things questions I'd have are:
Finally, why GPL-3? I admit, I'm a fan of relatively restrictive licenses for my application-level code [2] but since this is lower-level and people need to build on top of it, that's going to be quite an up-hill battle to get people to use it. I use LGPL-2.1 when building very difficult application-level code because its the most restrictive (give back if you improve it) license that companies will actually accept. However if it wasn't some new technique or non-application level I'm usually running Apache/BSD. GPL-3 for many companies is a non-starter [3]. It would be monumentally easier of a sell if this was available as Apache-2.0 (which still leaves IP + ability to patent should there be something here) or BSD (very very permissive, good baseline if you don't actually care). Given you're the only author, if this interests you, the process is trivial.
[1] https://github.com/ros-planning/navigation2
[2] https://github.com/SteveMacenski/slam_toolbox
[3] https://www.cnet.com/news/torvalds-no-gpl-3-for-linux/
The text was updated successfully, but these errors were encountered: