Comments (6)
Hi @xuhao1,
The function you should look at is:
This function called from: https://github.com/CogRob/distributed-mapper/blob/master/distributed_mapper_core/cpp/scripts/runDistributedMapper.cpp#L265
As specified here:
Depending on the gamma value and update type, the algorithm can be switched from Jacobi Over-relaxation, Successive Over-Relaxation, Jacobi or Gauss-Seidel. By default, Distirbuted Gauss-Seidel is used.
/* Distributed Jacobi: updateType_ = postUpdate, gamma = 1
* Gauss Seidel: updateType_ = incUpdate, gamma = 1
* Jacobi Overrelax: updateType_ = postUpdate, gamma != 1
* Succ Overrelax: updateType_ = incUpdate, gamma != 1
Hope this helps.
from distributed-mapper.
Hi @itzsid Thanks for you reply!
I noticed these functions and understand the gamma value and update type switches the Jacobi Over-relaxation, Successive Over-Relaxation, Jacobi or Gauss-Seidel. My questions is, where exactly this
part is performed. I mean where I can found the implentation of this summation
from distributed-mapper.
Equation 19 is equivalent to estimating rotation or translation, depending on which stage of the two-stage is being optimized. Rotation optimization is called here:
and implemented here:
.The equation inside the bracket corresponds to all the communication from the neighboring robots. Some of those robots are already updated in the current iteration (y^(k+1)) and others are not updated (y^k). We take the latest estimate of all those robots along with the measurement constraints given by H to optimize each robot. So, each robot's optimization given updated constraints from neighboring robots solves the full equation 19 and not the summation separately.
The slides here might help: https://itzsid.github.io/publications/web/icra16/presentation.pdf
from distributed-mapper.
@itzsid
Thanks again for your reply! I watched your slides and understand the equivalent now.
Is the reason for using optimization instead of directly summation separately and dividing by H_{\alpha\alpha} matrix is to avoid the case where H_{\alpha\alpha} matrix is irreversible?
from distributed-mapper.
@xuhao1, I did it mostly due to the convenience of factor graph framework (its easier to use GaussianFactorGraph than to solve the linear system myself). If you can invert H_{\alpha\alpha}, it can be cached and stored since it won't change throughout the optimization. Only the estimates from other robots (y_\beta) changes as the optimization progresses. Although I haven't tested it, I think it should work.
from distributed-mapper.
@itzsid Actually, I have tested directly using Equation (19) on a 4 DoF pose graph estimation in my implementation. It works when the initial error is not too big but still has some convergence issue on large scale problem (that is why I am reading your code and try to figure out the difference).
from distributed-mapper.
Related Issues (10)
- https://cognitiverobotics.github.io/distributed-mapper/ should redirect to here. HOT 1
- Question about G2O file HOT 4
- Question about ChordalFactor Jacobians HOT 2
- Cannot Find GTSAM Checkout Point HOT 5
- Multiple tests failing HOT 5
- error: static assertion failed: YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(ActualDstTypeCleaned,Src) HOT 3
- confusing about test error HOT 2
- questions about test result HOT 4
- Representing Landmarks in g2o HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from distributed-mapper.