普吕克线( Plücker 线)

普吕克线

在 Plücker 坐标表示中,一条直线 l ‾ 1 \underline{l}_1 l1可以用以下两个向量来表示:
l ‾ 1 = l 1 + ϵ m 1 \underline{l}_1 = l_1+ \epsilon m_1 l1=l1+ϵm1

  1. 线矢量轴线方向的单位矢量 l 1 l_1 l1:表示直线的方向。
  2. 线矢量的线矩(moment) m 1 m_1 m1:表示直线在空间中的位置特性,通常定义为:
    m 1 = p l × l 1 m_1 = p_l \times l_1 m1=pl×l1
    其中, p l p_l pl 是直线上任意一的位置向量, × \times × 表示叉积。
    线几何与旋量理论基础

点到直线的距离公式

在这里插入图片描述

对于一个点 p ∈ H p p \in \mathbb{H}_p pHp 和一条直线 l ‾ 1 ∈ H p ∩ S 3 \underline{l}_1 \in \mathbb{H}_p \cap \mathbb{S}^3 l1HpS3,点到直线的距离 d p , l 1 d_{p, l_1} dp,l1 可以表示为:

d p , l 1 = ∥ p × l 1 − m 1 ∥ d_{p, l_1} = \|p \times l_1 - m_1\| dp,l1=p×l1m1

其中, m 1 m_1 m1 是直线上的一个线矩(moment)。

使用 DQ Robotics 进行计算

以下是使用DQ Robotics来计算该距离的示例代码:

% Point coordinates
p = i_ + j_; % 定义点 p 的坐标

% Build the line
l1 = k_; % 定义直线方向,沿 z轴方向延伸
m1 = cross(i_, k_); % 计算动量向量 m1,经过x轴上 x = 1 点
l1_dq = l1 + E_ * m1; % 构建 Plücker 线的双四元数表示

% Calculate distance
d_p_l1 = norm(cross(p, l1) - m1)

在此示例中:

  • 定义了一个点 p p p 的坐标为 i + j i+ j i+j,即(1,1,0)。
  • 构建了直线 l 1 l_1 l1 和其线矩 m 1 m_1 m1
  • 使用叉积计算点到直线的距离。

计算结果为:

d_p_l1 = 1

使用 DQ_Geometry 模块的专用函数

我们还可以使用 DQ_Geometry 模块中的专用函数 point_to_line_squared_distance 来计算距离:

d_p_l1 = sqrt(DQ_Geometry.point_to_line_squared_distance(p, l1_dq))

这个函数直接计算平方距离,然后通过平方根获得最终的距离。结果同样为1。
在控制机器人时,通常使用平方范数比直接使用范数更方便。

平方范数范数都是度量向量大小的方式,但平方范数因为省去平方根,计算更简单,且在很多情况下可以有效替代范数,特别是在机器人控制和优化任务中。

  1. 范数 范数是向量长度或大小的度量。对于向量 v = [ v 1 , v 2 , … , v n ] \mathbf{v} = [v_1, v_2, \ldots, v_n] v=[v1,v2,,vn],其 2-范数(Euclidean norm) 计算公式为:

∥ v ∥ = v 1 2 + v 2 2 + ⋯ + v n 2 \|\mathbf{v}\| = \sqrt{v_1^2 + v_2^2 + \cdots + v_n^2} v=v12+v22++vn2

  1. 平方范数 平方范数是范数的平方,公式为:

∥ v ∥ 2 = v 1 2 + v 2 2 + ⋯ + v n 2 \|\mathbf{v}\|^2 = v_1^2 + v_2^2 + \cdots + v_n^2 v2=v12+v22++vn2

  1. 两者的区别
  • 计算简化:平方范数去掉了平方根,因此计算更简单。对于大多数优化或控制任务,计算平方根可能会带来不必要的复杂度,平方范数在计算效率上更有优势。

  • 物理意义不变:平方范数在表示向量大小时虽然少了平方根,但在很多应用中可以等效替代范数,因为优化目标通常不关心绝对距离,而是关心相对大小。

  1. 在机器人控制中的应用 在机器人控制中,使用平方范数的好处包括:
  • 效率高:例如在距离或误差度量中,直接使用平方范数可以避免计算平方根,提高运算效率。

  • 优化问题:许多优化算法(如梯度下降)会使用平方范数来衡量误差,因为平方范数是连续可微的,而范数在零点可能不可导。

Plücker 坐标 中的直线表示,其中:

  1. 定义直线方向 l 1 l_1 l1

直线的方向向量被定义为 l 1 = k l_1 = k l1=k,这表示直线沿着 ( z ) 轴的正方向。

  1. 选择直线上一点 p l 1 p_{l1} pl1

    为了使用 Plücker 坐标表示直线,我们需要知道直线上的一个点 p l 1 p_{l1} pl1。在这个示例中,选择了点: p l 1 = i p_{l1} = {i} pl1=i,这表示点 p l 1 p_{l1} pl1位于 x x x轴正方向上的单位位置,即坐标为 ( 1 , 0 , 0 ) (1, 0, 0) (1,0,0)

  2. 计算线矩 m 1 m_1 m1

    根据 Plücker 坐标的定义,动量向量 m 1 m_1 m1计算为:
    m 1 = p l 1 × l 1 = i × k m_1 = p_{l1} \times l_1 = i \times k m1=pl1×l1=i×k
    因此,在代码中有:

    m1 = cross(i_, k_);
    

    计算叉积 i × k i \times k i×k
    i × k = − j i \times k = -j i×k=j
    所以:
    m 1 = − j m_1 = -j m1=j
    这意味着线矩 m 1 m_1 m1 指向 y y y轴的负方向。

为什么选择 p l 1 = i p_{l1} = i pl1=i

  • 为了定义一条经过 x x x轴上 x = 1 点并沿 z轴方向延伸的直线
  • 通过计算 m 1 = p l 1 × l 1 = i × k m_1 = p_{l1} \times l_1 = i \times k m1=pl1×l1=i×k,我们得到线矩 m 1 m_1 m1,这与直线的位置和方向相关。

纯四元数叉积

对于纯四元数 h 1 h_1 h1 h 2 h_2 h2,它们的叉积(cross product)定义为:

h 1 × h 2 = h 1 h 2 − h 2 h 1 2 h_1 \times h_2 = \frac{h_1 h_2 - h_2 h_1}{2} h1×h2=2h1h2h2h1

其中, h 1 , h 2 ∈ H p h_1, h_2 \in \mathbb{H}_p h1,h2Hp,表示它们是纯四元数。

  • 在这个公式中, h 1 h 2 h_1 h_2 h1h2 h 2 h 1 h_2 h_1 h2h1 是四元数的乘积。
  • 由于四元数的乘法不是交换的(即 h 1 h 2 ≠ h 2 h 1 h_1 h_2 \neq h_2 h_1 h1h2=h2h1),因此 h 1 h 2 − h 2 h 1 h_1 h_2 - h_2 h_1 h1h2h2h1 不等于零,提供了一个与叉积类似的运算。

等效于三维向量的叉积

这种定义的叉积在数学上等价于三维向量的叉积。这意味着:

  • 在三维空间 R 3 \mathbb{R}^3 R3 中,叉积用于描述向量间的正交关系,结果向量垂直于原向量。
  • 类似地,在纯四元数的情况下,这个叉积也能反映两纯四元数之间的正交关系。

直观理解

纯四元数是没有实部的四元数,类似于三维向量。这个定义的叉积可以被视为三维向量之间的叉积的推广,适用于表示旋转和方向的计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值