facebookresearch / facebookresearch/theseus

IndexError when add an error function to objective with only one opt_var

Open
#660 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
2.1k
Forks
149
PR merge metrics
No merged PRs in 30d

Description

## ❓ Questions and Help
Hi, I'm doing pose graph optimization with theseus. I get the following error:

```
4294 Traceback (most recent call last):
4295 File "/home/stud/lxuh/LoopClosure_for_Gaussian_Splatting_SLAM/run_slam.py", line 109, in
4296 gslam.run()
4297 File "/home/stud/lxuh/LoopClosure_for_Gaussian_Splatting_SLAM/src/entities/gaussian_slam.py", line 259, in run
4298 self.pose_graph_optimization(frame_id, gaussian_model)
4299 File "/home/stud/lxuh/LoopClosure_for_Gaussian_Splatting_SLAM/src/entities/gaussian_slam.py", line 177, in pose_graph_optimization
4300 optimize_info = self.pose_graph.optimize()
4301 File "/home/stud/lxuh/LoopClosure_for_Gaussian_Splatting_SLAM/src/entities/pose_graph.py", line 141, in optimize
4302 _, info = layer.forward(optimizer_kwargs={
4303 File "/home/stud/lxuh/miniconda3/envs/gslam/lib/python3.10/site-packages/theseus/theseus_layer.py", line 93, in forward
4304 vars, info = _forward(
4305 File "/home/stud/lxuh/miniconda3/envs/gslam/lib/python3.10/site-packages/theseus/theseus_layer.py", line 171, in _forward
4306 info = optimizer.optimize(**optimizer_kwargs)
4307 File "/home/stud/lxuh/miniconda3/envs/gslam/lib/python3.10/site-packages/theseus/optimizer/optimizer.py", line 51, in optimize
4308 return self._optimize_impl(**kwargs)
4309 File "/home/stud/lxuh/miniconda3/envs/gslam/lib/python3.10/site-packages/theseus/optimizer/nonlinear/nonlinear_least_squares.py", line 251, in _optimize_impl
4310 self._optimize_loop(
4311 File "/home/stud/lxuh/miniconda3/envs/gslam/lib/python3.10/site-packages/theseus/optimizer/nonlinear/nonlinear_least_squares.py", line 117, in _optimize_loop
4312 self.linear_solver.linearization.linearize(
4313 File "/home/stud/lxuh/miniconda3/envs/gslam/lib/python3.10/site-packages/theseus/optimizer/linearization.py", line 56, in linearize
4314 self._linearize_hessian_impl(_detach_hessian=_detach_hessian)
4315 File "/home/stud/lxuh/miniconda3/envs/gslam/lib/python3.10/site-packages/theseus/optimizer/sparse_linearization.py", line 155, in _linearize_hessian_impl
4316 self._linearize_jacobian_impl()
4317 File "/home/stud/lxuh/miniconda3/envs/gslam/lib/python3.10/site-packages/theseus/optimizer/sparse_linearization.py", line 136, in _linearize_jacobian_impl
4318 pointer = block_pointers[var_idx_in_cost_function]
4319 IndexError: index 1 is out of bounds for axis 0 with size 1
```

My pose graph contains SE(3) nodes, and node_0 is defined as aux_var, the others are all opt_var. Every time I add a constraint between node_0 and node_i, I get this error during optimization. What can be the reason that causes this and how can I avoid?

Contributor guide

Open the contributing guide

Research direction

Start at theseus/optimizer/sparse_linearization.py around line 136 and trace the Jacobian linearization path from nonlinear_least_squares.py. Reproduce the failure with a minimal pose graph containing one auxiliary SE(3) variable and one optimization variable, then verify that the constraint no longer raises IndexError and add regression coverage if the repository has a suitable test location.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
robotics
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
28/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.