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 lines describes 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 depth is 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:

visjac_p visjac_p_polar visjac_e