Enhancement: Initialize SE3 matrix with look_at() function
@petercorke ci sta già lavorando.
Dal 31/1/2022.
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Feature description
I was wondering if it would make sense to add a look_at() function for this library for initializing an SE3 transformation matrix. I personally use this when positioning a camera etc. where I want the camera at an exact position, look at a specific point, and define which axis is up. This makes defining the pose of the camera very easy. I use an implementation of this function in mitsuba2, where the parameters are
- origin: defines the translation part of the matrix
- target: the target point the z-axis should point towards
- up: the direction which is perpendicular with the x-axis of the transform and the direction of the vector from the origin to the target
Examples
Below are a couple of examples of how the function works in Mitsuba2
Example 1
T = look_at(origin=[1,2,3], target=[0,0,0], up=[0,0,1])
print(T)
[[0.894427, -0.358569, -0.267261, 1],
[-0.447214, -0.717137, -0.534522, 2],
[0, 0.597614, -0.801784, 3],
[0, 0, 0, 1]]
Example 2
T = look_at(origin=[0,0,0], target=[3,0,0], up=[0,1,0])
print(T)
[[0, -0, 1, 0],
[0, 1, 0, 0],
[-1, 0, 0, 0],
[0, 0, 0, 1]]
Mitsuba C++ implementation
static Transform look_at(const Point<Float, 3> &origin,
const Point<Float, 3> &target,
const Vector<Float, 3> &up) {
using Vector3 = Vector<Float, 3>;
Vector3 dir = normalize(target - origin);
dir = normalize(dir);
Vector3 left = normalize(cross(up, dir));
Vector3 new_up = cross(dir, left);
Matrix result = Matrix::from_cols(
concat(left, Scalar(0)),
concat(new_up, Scalar(0)),
concat(dir, Scalar(0)),
concat(origin, Scalar(1))
);
Matrix inverse = Matrix::from_rows(
concat(left, Scalar(0)),
concat(new_up, Scalar(0)),
concat(dir, Scalar(0)),
Vector<Float, 4>(0.f, 0.f, 0.f, 1.f)
);
inverse[3] = inverse * concat(-origin, Scalar(1));
return Transform(result, transpose(inverse));
}
Generalization
The Mitsuba implementation only works for pointing the z-axis at a specific direction defined by the direction of the vector between the origin and the target. The up-axis is also predefined to specify a specific axis in the resulting transformation matrix. For generalization of the function, it could make sense to specify which axes should point toward to target, and which axis is up. This will however complicate the function further. One could split the functionality into three functions for example:
SE3.x_look_at(origin, target, up)
SE3.y_look_at(origin, target, up)
SE3.z_look_at(origin, target, up)
Does this makes sense for anyone else, or would it bloat the code and documentation?
- Lingua principale
- Python
- Stelle
- 641
- Fork
- 102
- Merge medio
- 1g 18h
- PR unite (30g)
- 4
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di rai-opensource/spatialmath-python
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
rai-opensource/spatialmath-python#32 · 4 commenti ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 50/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 42/100
-
bug
rai-opensource/spatialmath-python#165 · 2 commenti · 1 assegnatario ·
-
Type-check spatialmath Aperta
rai-opensource/spatialmath-python#143 · 8 commenti · 1 assegnatario ·
Tutte le issue di rai-opensource/spatialmath-python
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
qgis/QGIS-Documentation#11275 ·
-
bug priority:normal ready-for-dev
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
OpenHands/extensions#626 · 1 commento ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
CSCfi/sd-search-api#39 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
-
please add to porn list Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
StevenBlack/hosts#3255 ·