Closed efernandez closed 7 months ago
Not sure why tests are failing now. I run all tests with both configurations, and all tests passed in both cases. That is, gcc 11.3.0
with Ceres 2.0
and gcc 12.2.0
with Ceres 2.1
.
If you share the output errors with me, I can have a look.
Looks like some transient issues we are having with our own build server. I don't think it is related to this MR at all.
The general logic for the conditional compilation is as follows:
It would be great to get this PR merged; the use of ceres::LocalParameterization
is currently causing fuse_core to fail to build on Ubuntu 24.04 in ROS 2 Rolling: https://build.ros2.org/view/Rbin_uN64/job/Rbin_uN64__fuse_core__ubuntu_noble_amd64__binary/9/console
Yep, it's just not ready yet. I'm hoping to get some time next week to finish this up, and then port it over to ROS 2.
I've finished up the work on serializing the Manifolds. I didn't have permission to push to this fork/branch, so I created a new PR here for safe-keeping: #363
Once this is reviewed by my team, my intention is to merge this PR then rebase #363 on top of it. That should hopefully keep the contributions clear.
Let me know if you have any concerns on the changes that were made. And thanks for doing the vast majority of the work here. I'll be starting on a ROS 2 port of this work next week.
That works for me. The changes look fine to me, lets wait for @efernandez to see if its good with him as well
Reviews for the final set of changes is here: #363 Merging this PR and rebasing #363
This MR has all the changes required to support
gcc12
and Ceres2.1.0
.With Ceres
2.1.0
theceres::LocalParameterization
was marked as deprecated in favour of the newceres::Manifold
that implements thePlus
andMinus
methods; in Ceres2.2.0
theceres::LocalParameterization
is already removed.gcc12
spotted some issues:CostFunctor
defined for thePoin2DFixedLandmark
unit testmaybe-unitialized
warning infuse_graphs
related toboost::make_transform_iterator
and a lambda that takes a reference from constraints or variables. I simply added-Wno-maybe-uninitialized
for nowarray-bounds
warning due to thisgcc12
bug, also mentioned in Eigen issue. I simply added-Wno-array-bounds
, conditional on the compiler beinggcc
and>=12.0
.I also added
SYSTEM
to 3rd party headers to ignore warnings from those libraries.The
Minus
Jacobian implementation ofceres::Manifold
only computes the jacobian wrt the 1st argument, which differs from thefuse_core::LocalParameterization
implementation, that computes it wrt the 2nd argument, which seems to be wrong. For that reason, I fixed the following bugs:fuse_core::AutoDiffLocalParameterization
ceres::AutoDiffManifold
instead offuse_core::AutoDiffLocalParameterization
for Ceres>=2.1.0
Minus
Jacobians for theOrientation2DLocalParameterization
andOrientation3DLocalParameterization
, since they had the wrong sign. This bug was hiden by the bug infuse_core::AutoDiffParameterization
, which in a way was cancelling it out.