-
Notifications
You must be signed in to change notification settings - Fork 146
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 release #33
Comments
+1 for porting for ROS2 (even though CSM is agnostic to ROS). I can think of a few things to verify before taking an action. Background of why CSM needs a work to be ported to ROS2Just as a recap for the larger audience,
Does CSM need to be
|
That's a good question. I don't think the CSM branch used to for ros1 even uses catkin. It claims to have a runtime dependency on catkin: https://github.com/AndreaCensi/csm/blob/1.0.2/package.xml#L26, but that's the only reference I can find. I think pkg-config is used instead of cmake_catkin to handle discovery of csm in cmake in the catkin workspace: https://github.com/CCNYRoboticsLab/scan_tools/blob/indigo/laser_scan_matcher/CMakeLists.txt#L21 The pkg-config file is installed from csm at Though, it doesn't look like the package.xml file is installed in the share directory, where I would it expect it, so I'm not quite sure how catkin is completely happy. The same general approach should presumably work fine for the ros2/ament/colcon case as well. The one issue is that I would like the version built for ros2 to be based on the Installing a pkg-config file, like on the main branch, would avoid making ament a build dep and then the |
Sorry I misunderstood but looks like CSM is a pure With that, is the reason why you want to add changes to CSM because of eigen situation? If so, as in my review comment #34 (review), we need to figure out what to do for
That might be because Anyways, I now do not see a necessity to make changes in CSM to port it to ROS2, but I might be wrong. |
Is that what this does?
Otherwise I don't see anything that might cause |
Right. I would like the ROS package to use eigen instead of GSL. For the time being my use case is ROS2, so no need to disturb the existing ROS1 configuration unless it's necessary. The primary reason is that GSL is GPLv3, which is copyleft for anything that links against it, at minimum. Eigen, on the other hand uses, MPL2, which is only copyleft at the file level, so doesn't propagate outside source file boundaries. Most of the ROS ecosystem is BSD licensed and full GPL is usually avoided since it's often not compatible with commercial use cases. Eigen is also a much easier library to work with and is common in the ROS ecosystem. It's not clear that the fact that the ros1 package for csm, and therefore scan_tools, link against a GPLv3 library is well known or indicated anywhere. It's documented that csm is LGPLv3, but I don't think that changes the fact that GSL is also linked against. It may not be a big issue because there is some indication the ROS style message passing breaks the link so to speak, to prevent GPL from propagating, but I don't know if that's an actual legal fact:
Regardless, since there is an existing eigen branch that has removed linking to GSL, I think that is most appropriate for ROS. I could be wrong, but I don't think there is much if anything in the csm_eigen branch that would need to get merged into main. I think the eigen branch just builds with the gsl_eigen shim and doesn't link to GSL, while the main branch links to GSL instead of using the shim. |
|
Regarding the Installing the noetic debian version of csm indeed does not seem install a I'll take a closer look at the differences between the main branch and csm_eigen. Ideally the only difference would be the build scripts from a maintainability point of view. |
I reviewed the differences between
So, basically, the two branches are pretty diverged even though the core algorithm is the same. I'll look at making a MR to pull in the missing The ROS2 branch I'm working on for |
@malban Thanks for the detailed look, and offering to sync Eigen branch. That'll be great as I continue receiving users' inquiries, which once again demonstrate the usefulness of CSM and scan tools. Once the work is done, I think it's worth making an announcement at a larger community (e.g. |
Hi @AndreaCensi and the maintainers, I put together some suggestions. Please review and give approvals/opinions. I'm no longer an active user but happy to help as much as I can. Suggested directionlong story short (i.e. no need to read previous conversations unless you're curious), I have a couple of suggestions summarized as following, after communicating with @malban who's looking into the detail:
For suggest-1, as outlined in #33 (comment), Adding to suggest-2, I don't see a need to make a release regarding Eigen-related changes into ROS1, unless users request, since there's no plan in the world of ROS to make a new release of ROS1 any more (except for bug fixes) and CSM is already released into all ROS1 distributions. ActionsBased on assumption that the suggested direction above is ok,
|
Regarding GPLv3/copylefting/etc: the "application service provider" loophole in GPLv3 is something I've wondered about for a while. My reading is that it means that ROS users won't be impacted by copylefting requirements, since DDS (driving ROS2) provides a network-based service. But, I'm no lawyer. MPL is closer to the intended license than GPLv3: if the intent was for copylefting to spread beyond this repository, it would have been made GPLv3 to begin with. As a bonus, it's also widely used in ROS (as already mentioned), and I found this blog post benchmarking GSL vs. Eigen for eigenvalue calculations: Eigen is the winner, speed-wise. So overall, I'm in agreement: the proposed shift to Eigen (and follow-up requirements of updating repositories, etc) makes sense to me, and the ROS2 port is of course valuable. I think it would be nice (in theory) to backport some of these changes to Noetic... but it's hard to justify that time cost, so leaving the ROS1 code mostly as-is makes sense to me too. |
I agree that this seems like the common sense reading and is described on the ROS wiki pages as such.
Same.
As far as I can tell, the csm_eigen and master branches have identical algorithms and interfaces, at least when it comes to the core scan matcher, which is what is being used by the laser_scan_matcher in ros. I think the cmake build config here: #34, should be agnostic to ros1/ros2 catkin/ament, so it's probably more of a decision to test/release for noetic from the csm_eigen branch instead of the master branch. |
At the time of creation of the csm_eigen branch, we used Eigen instead of GSL (easier portable, less restrictive license). There was no change in the core of the algorithms, just a small glue code was added to use Eigen underneath a GSL syntax. We also dropped a lot of stuff which we did not need (or simply could not compile easily on our target OS at the time). |
No objection heard AFAICT since the suggestion #33 (comment) last month. I'm moving forward.
|
I'd like to get csm and https://github.com/CCNYRoboticsLab/scan_tools released for ros2 (galactic, foxy, etc) based on the csm_eigen version.
I created a
ros2
branch on my fork, branched off fromcsm_eigen
: https://github.com/malban/csm/tree/ros2 that uses ament_cmake: https://docs.ros.org/en/foxy/How-To-Guides/Ament-CMake-Documentation.html.Once a ros2 branch is made, then the repo can be bloomed to the ros2 releases: https://docs.ros.org/en/foxy/How-To-Guides/Releasing-a-ROS-2-package-with-bloom.html
The text was updated successfully, but these errors were encountered: