CentralCamera.visjac_l#
- CentralCamera.visjac_l(lines: ndarray | float | int | list[float | int] | tuple[float | int, ...], plane: float | int | list[float | int] | tuple[float | int, ...] | ndarray) ndarray[source]#
Visual Jacobian for line features
- Parameters:
lines – image plane line parameters
plane (array_like(4)) – plane containing the line
- Returns:
visual Jacobian matrix for line feature
- Return type:
ndarray(2,6), ndarray(2N,6)
Compute the Jacobian which gives the rates of change of the line parameters in terms of camera spatial velocity.
For image planes lines
\[u \cos \theta + v \sin \theta = \rho\]the image Jacobian \(\mat{J}\) maps
\[\begin{split}\begin{pmatrix} \dot{\theta} \\ \dot{\rho} \end{pmatrix} = \mat{J}(\vec{p}, z) \vec{\nu}\end{split}\]camera spatial velocity \(\vec{\nu}\) to the image plane velocity of the line parameters \((\theta, \rho)\).
The world plane containing the line is also required, and is provided as a vector \((a,b,c,d)\) such that
\[aX + bY + cZ + d = 0\]If
linesdescribes multiple points then return a stack of these \(2\times 6\) matrices, one per point.Depth is the z-component of the point’s coordinate in the camera frame. If
depthis a scalar then it is the depth for all points.Example:
>>> from machinevisiontoolbox import CentralCamera >>> from spatialmath import SE3 >>> camera = CentralCamera.Default() >>> camera.visjac_l((0.2, 500), (0, 0, 1, -3)) array([[ -0. , -0. , 0. , -490.0333, -99.3347, -1. ], [ -0.3267, -0.0662, 166.6667, 49667.5314, -245017.6245, 0. ]])
- References:
A New Approach to Visual Servoing in Robotics, B. Espiau, F. Chaumette, and P. Rives, IEEE Transactions on Robotics and Automation, vol. 8, pp. 313-326, June 1992.
Visual servo control 2: Advanced approaches Chaumette F, Hutchinson S, IEEE Robot Autom Mag 14(1):109–118 (2007)
P. Corke, Robotics, Vision & Control for Python, Springer, 2023, Section 15.3.1.
- Seealso: