本发明涉及用于在患者上规划工具路径的系统、装置和方法。
使用导管来定位用于球囊成形术、支架植入术和肿瘤消融的其他器械。当今,往往通过“活的x射线”(也称为荧光透视法)使用视觉反馈来操纵导管。
导管具有许多形状和尺寸以及不同的挠性。基于外科医生的判断,或者有时基于手术操作的统计学规范来选择它们进行手术操作。
发明名称为“Remote control catheterization”、受让人为Navicath公司的美国专利No.6,726,675公开了一种能够自动控制导管的系统,该系统自动向前给送导管并且使它旋转。
导管的手动控制需要练习、灵巧、基于荧光透视法(投影)判读位置的能力、以及专家的宝贵时间。此外,不容易获得基于形态学数据的患者特定模拟。导管的选择不是基于患者形态学,而是基于外科医生的经验和统计学规范执行的。这在一些手术操作中会导致不必要的延迟和并发症。
对于肺部CT,需要大约3×1012个要素来表示导管尖端的位置和取向(orientation)。这是60-120千兆字节的RAM,使得它在现今的计算机上难以处理。
对于外科医生来说导管有许多选择,但是它们可能基于统计学规范,而不是患者特定形态学来选择。这种非最优的选择会减慢手术操作或增加患者的风险。
关于窥镜技术,现今使用支气管镜来检查肺的深部区,并且使用内窥镜进入自然体腔,例如胃肠道的任一端,或者通过例如在腹腔镜手术中的小切口。结肠镜和乙状结肠镜是典型的内窥镜。操纵窥镜来进行视觉检查、诊断(往往通过活检)、以及提供某些形式的治疗,例如光动力学治疗。
支气管镜的手动控制需要练习、小心的手动控制和专家的宝贵时间。此外,不容易获得患者特定模拟。
用于机器人控制或车辆控制的技术不能显而易见地适用于控制导管和窥镜。特别地,将本领域中的配置空间视为表示工具的可能状态的所有姿态的集合。对于支气管镜,这是6维问题,包括3D位置和3D取向。
对于肺部CT,具有大约512x512x240(XxYx切片),或62,914,560个位置。可以沿rX、rY和rZ(也被称为横倾、纵倾和横偏)以每10度粗略地对角进行离散化。即使在该粗离散化下,配置空间也将需要:
512x512x240x36x36x36=2,935,341,711,360个要素(大约3x1012)。
由于每个要素包含20到30个字节,这对于配置空间来说就是60-120千兆字节,其被理想地存储在RAM中以便最快速存取。对现今计算机的存储要求使这个成为一个困难的任务。
通过使用位置作为状态并且存储r(横倾)角、p(纵倾)角、w(横偏)角(r(横倾)角、p(纵倾)角、w(横偏)角提供了在当前状态下的取向设置)并且通过生成用于在运动学上保持导管和窥镜的尖端相对于任何取向的校正角的邻域(neighborhood),本发明的系统、装置和方法将配置从6个自由度减小到3个。这使计算在现今的系统中易处理,并且在明天的计算系统中不断地变快。最终路径在离散空间中是运动学校正的(即利用给定工具可获得)、无冲突的和最优的。使用该方法,生成用于使支气管镜通过肺移动到例如活检的目标位置的规划,并且获得通过血管的导管运动规划。
本发明的实施例是在L.Dorst&K.Trovato的美国专利No.6,604,005中以及在1999年2月9日公开的K.Trovato和L.Dorst的发明名称为“Methodand apparatus for controlling maneuvers of a vehicle”的美国专利No.5,870,303中所述的路径规划技术的非显而易见的变形。
对于导管,邻域包含导管可以进行的所有可能运动。这些运动是插入(前向运动)、给定最大转动半径的左右转动(旋转),其中成本由接下来的各种转动和导管旋转引起的应变加权。
对于窥镜,邻域包含“窥镜”可以进行的所有可能运动,这些可能运动是插入(前向运动),给定最大转动半径在每个方向上可以变化的左右转动(旋转),其中成本基于移动的距离。
与现有技术的主要区别包括:
·对于所有工具:3D配置空间中的6D,通过将最终的取向存储在3D空间内。
·导管、支气管镜和斜面针,与汽车的表现相同,即不完整。
·邻域不同:包括3D,其具有沿许多取向的线(thread),而不是类似于汽车沿单一表面。
·支气管镜的控制不同于汽车控制:具有上/下、左/右、前向和所有组合以及梯度。
·导管控制不同于汽车控制:导管具有α旋转并且只有前向。
·斜面针控制不同于汽车控制:具有单一“转动半径”,但是针的旋转可以允许它沿不同方向离开,而现有技术教导在2维环境,即平面中转动,原因是控制仅仅针对在0或180度的针。
图1示出了支气管镜;
图2示出了在沿离散的X、Y和Z方向的每个位置处都具有配置的3D配置空间(200);
图3示出了支气管镜的邻域的一部分;
图4示出了描述支气管镜的基本能力的标称邻域;
图5示出了包括多个半径的支气管镜的模拟3D邻域;
图6示出了用于生成支气管镜的标称邻域的直线和弧线以及旋转每个弧线以形成不同线的软件;
图7示出了用于确定从“种子节点”到“目标”的最优路径的A*算法的流程图,所述算法被定制以逐线地管理邻域,包括相邻点(neighbor)的先后次序;
图8示出了实现点旋转的软件;
图9示出了支气管镜通过气管和支气管的路径;
图10示出了导管;
图11示出了已被手动定位进行心脏消融的导管;
图12示出了用于根据本发明的导管路径规划活动的成本波传播的权重;
图13示出了描述导管的基本能力的标称邻域的一部分;
图14示出了导管的节点的标称邻域,包括导管尖端的位置和取向变化;
图15示出了斜面针;
图16示出了根据本发明的路径规划系统;以及
图17示出了根据本发明的执行路径规划的装置。
本领域的普通技术人员应当理解,提供的下列描述用于示例目的,而非用于限制。技术人员应当理解在本发明的精神和所附权利要求的范围内存在许多变形。已知功能和操作的不必要细节可以从当前描述中省略,以便不会使本发明难于理解。
可以使用K.I.Trovato于1996年在阿姆斯特丹大学做的报告A*Planningin Discrete Configuration Spaces of Autonomous System中教导的构架来执行工具或“自主系统”的路径规划。下文描述了构架的每个组成要素。一旦这些组成要素已知,就可以在成本波传播方法中使用它们来生成路径。然后,针对支气管镜、导管和斜面针,描述了构架的所需的组成要素。
构架
配置空间/系统状态
工具或自主系统必须能够以离散形式描述。也就是说,工具由主要特性(或参数)表征,每个特性具有有效离散值的一个或多个范围。因此,工具状态提供了这些特性中的每一个的唯一设置。所有可能的参数范围的跨度被称为配置空间,简称为CS。配置空间有时与在其中执行动作的“任务空间”或环境相匹配。
节点/状态/事件/过渡
由于它是离散空间,因此可以将工具的状态或“姿态”看作是图形中的“节点”。另外,可以将系统中的引起一个系统状态变化到另一个系统状态的任何事件看作是节点之间的“过渡”。
标准/成本
工具的目标常常具有成功标准,例如最快、最短、最便宜等。在许多情况下,这可以直接转化成节点之间的特定过渡所带来的成本。节点、过渡和成本的集合形成配置空间图形。
原子动作(atomic action)/邻域/后续点
将引起配置空间从一个状态变化或过渡到某个范围中的另一个状态的允许的原子动作概括为“邻域”。该邻域是可容许后续点的集合。可容许后续点表示工具进行某些运动的核心能力。由于这通常不会基于位置而变化,因此为了效率,邻域可以定义一次,并且可以相对于任何初始状态来使用该邻域。邻域也可以基于“游戏规则”来确定,因此可以存在通过受控工具的特定属性来选择的几个相邻点。
指定给每个过渡的是为了在初始状态和相邻状态之间变化所强加的成本。因此,配置空间中的状态与它们之间的过渡的组合可以被看作是图形,在该图形中,将状态看作节点,而将可容许的过渡看作定向边。
约束/禁止区/障碍
对于许多应用,工具具有约束。后者定义了无效的工具状态,这常常是由于机械限制、与环境的相互作用(即障碍)或强加的规则造成的。这些必须被转换成配置空间中的节点的禁止区。在一些图形中,这些节点的过渡与节点自身一起被去除。备选地,可以将节点标记为无效,或者节点的过渡可以具有由∞表示的无穷大(达不到的和高的)成本。这些技术中的每一个都能使搜索避开约束节点。
“目标”/“开始”
工具“目标”位置可以被映射到离散配置空间中的一个或多个等效“目标”节点。由于表达系统的参数的公式可以具有一个以上的用于描述系统“目标”的解,因此可能存在多个“目标”节点。(例如,你的手臂的左手配置和右手配置都可以到达相同位置)。系统“开始”被简单地转换为特定的“开始”节点。
事件序列/最优路径
寻找从当前系统节点通向预期“目标”的期望事件序列类似于寻找从当前节点过渡到“目标”节点的最优路径,该最优路径使成本最小,同时避开了所有无效节点。因此,通过使用所述配置空间节点、过渡、成本、禁止区和“目标”来规划路径并且通过知道“开始”节点,可以找到这个理想事件序列。诸如A*之类的图形搜索方法提供了确定路径的有效机制。一旦组成要素适当,就可以使用A*算法来计算解。
支气管镜实施例(B)
图1显示了支气管镜。在优选实施例中,支气管镜具有下列构架组成要素:
B.1配置空间
在优选实施例中,将支气管镜的配置空间表示为支气管镜的尖端在3维空间中的位置,如图2所示。关于围绕分别被称为α201、θ202、203的X、Y和Z轴的旋转,描述尖端的取向。每个角有正方向,并且每个角有负方向。我们的例子使用标准的“右手定则”系统来识别轴和相对取向,然而还可以使用其他系统。可以使用CT、MRI或3D超声(3D电子或合成)来对“开始”、“目标”和可容许移动区域进行成像,并且将“开始”、“目标”和可容许移动区域用作测定配置空间大小的基础。尖端也具有需要3个附加角的取向,参见图2。在现有技术中,每个角必须在3个位置和取向中的每一个中离散,这产生了6维问题。路径可以在该空间中计算;然而,这使已经大的数据集变得更加大。
配置空间的概念导致对涵盖了用于表征工具姿态的所有参数的定义,由此导致巨大的配置空间。例如,具有512×512个像素和295个切片(其中,对于2个取向中的每一个取向,具有360个可能的离散角)的肺部图像的数据量变为
512×512×295×360×360,或10,022,289,408,000个状态。
对于3个取向,所述数据量为
512×512×295×360×360×360个状态或3,608,024,186,880,000。
较粗的离散减小了取向的集合,但是增加了误差。此外,这些超大的数据量超出了当前许多的计算能力。
当前32位硬件和操作系统将每个进程的RAM限制为2G字节,这使存储器限制成为医学成像的严重问题。64位硬件和操作系统将缓解这些困难中的一些困难;然而,减小空间的方法依旧是有用的。
B.2最小化配置空间
为了将这个明显的“6D”问题转换成更易管理的尺寸,应当注意几个观点:
沿着配置空间中的任何特定路径只有工具尖端的一个取向是最优的。因此,在每个位置配置状态(即x、y、z)下,仅仅存储一个选项就足够了,这将问题转换成3维,需要存储量o(CT体积)。这以大于4660万(360×360×360)的系数显著地减小了配置空间的尺寸。
另外,不再对角进行离散化,这在先前是必需的,存储在配置空间中的值可以是整数、单精度浮点型或双精度型,以便任意地表示精确的角。这样可以大大地减小角的离散误差。
最后,可以将6维规划包含在标称邻域的计算中,这可以进一步减小计算开销。
量的这种减小是可能的,这是因为角被用于不需要独立状态的两个目的:
1)作为x、y、z位置内的特征,以帮助确定空间连续扩展的方向;以及
2)当沿路径移动时,作为控制参数的决定因素。
B.3节点和过渡
在配置空间中的每个位置处,节点数据结构拥有关键信息。下面是支气管镜的配置的优选空间节点数据结构:
float cost_to_goal;
struct csnode*best_parent_ptr;
unsigned int heap_location;//索引为heap(tree[i])
float alpha,theta,phi;//围绕x、y、z的旋转
short thread_number;//可选的。推断半径和取向。
其中:
·cost_to_goal存储从当前节点到最近“目标”的成本的值,并且当A*(或微分A*)方法重新计算空间时,对cost_to_goal进行更新。
·best_parent_pointer指向一个“等效”的父节点,这是由于潜在相邻点的数量可以超过32或64,这使得更多空间有效用于直接地存储地址,并且在优选实施例中,它是指向第一低成本父节点的指针。
堆栈(heap)在优选实施例中用于记录将被扩展的节点。与配置空间相比,这是不同的存储结构。为了在搜索期间在成本可能快速增加或减小的环境中管理堆栈中的变化值,包括了配置空间和堆栈之间的位置链路。堆栈具有到配置空间节点的链路,并且配置空间具有回到堆栈的链路。当调整堆栈时,这些链路被更新。
在备选实施例中,配置状态包括线的数量,使用该线从父节点移动到(当前)相邻节点。利用该线,可以确定当前节点的半径和取向,并且使用当前节点的半径和取向来控制器械。这消除了在沿实际路径移动期间重新计算该值。然而,在实时控制情况下,如果弧线可以轻微变化以补偿规划和真实环境(包括呼吸或身体运动)之间的差异,那么该线的“动态进行的(on the sky)”重新计算是期望的。
由于路径可能不存在,因此使用预定算法来确定是否存在路径。如果路径存在,则算法生成从节点n到种子节点(常常是目标)的节点序列。这种算法的例子是:
follow_path_from(n)
{
if(best_parent!=NULL)//存在路径
while(n!=seed)//还未到达
{
append_to_path(n)
n=n.best_parent//沿着路径移动到序列中的下一个节点
}
if(n==seed)//到达种子,或从那里开始
append_to_path(n)
else //best_parent为null,也就是说,从n到种子没有路径
printf(“No path from n to seed”);
}
B.4标准/成本
对于支气管镜实施例,支气管镜尖端的最小距离将是最优的标准。因此,尖端移动的距离由“转动半径”(直的或弯的)限定的曲率所走过的弧线来测量。在下一部分,针对每个标称相邻点,对它进行计算。显然,可以使用其他标准,例如在支气管的边界附近进行加权以促进更安全路径的那些标准。
B.5原子动作/邻域/后续点
支气管镜的尖端具有几个基本能力。它可以被设置成直的,向右/向左转动,或向上/向下转动。当支气管镜前进时,后面的窥镜主体沿着尖端所设置的路径移动。现在参考图3,其示出了邻域的一部分,显示了沿着小单位方向(例如X)的可能直线运动的集合301。将包括直线301的每个弧线称为线。线的概念表示可见点的先后次序。换言之,如果中间点被阻止(例如成本无穷大),那么无法到达更加远离源(home)节点位置的点。扫过Y方向生成的弧线也被计算和显示302。弧线在具有指定转动半径的圆中大约扫过90度。九十(90)度是所需的最大值。因此,相邻点的数量与半径的尺寸有关。也就是说,更大的半径需要更多的相邻点以覆盖整个90度弧线。
然后,该弧线围绕X旋转任意数量的度数,其是均匀分布的。因此,线的数量暗示了特定转动半径(如果该角是直角,则是无穷大)和相对于当前取向围绕X的旋转。
在图4中,给出了用于描述支气管镜的基本能力的标称邻域的数据点和值的例子。这个标称邻域识别每个相邻点在X、Y和Z中距离缺省点(即α、θ和的(0、0、0)取向)的相对位置。该邻域的数据的例子在附录A中提供。
作为逻辑扩展,在优选实施例中,邻域包括许多可能的半径,以便覆盖3D区域的更大体积。可以在3D中计算该邻域,其由图5的模拟形状显示,类似于细丝纤维灯/光学纤维灯中的一组线。因此,体积中的每个状态将被填充。这实际上是模拟。较紧密转动半径的线较短,而较长转动半径的线较长。这可以被执行,然而,经验表明实际上只使用极限控制能力以及“直的”。因此,相邻点的数量被减小到实际使用的数量减小了需要的计算时间。在成本计量不是距离而是更复杂的情况下,这些相邻点会变得必不可少。复杂度量(metric)的例子可以是使到管(支气管、血管或自由空间)的边缘的距离最小化。在该情况下,精确的曲率更加必不可少。
在图6中,提供了用于生成标称邻域的直线和弧线的软件代码的例子。
假设:在启动时,对标称邻域计算一次。
B.6约束/禁止区/障碍
本发明的输入包括例如来自CT的分割3D图像。这限定了组织的自由空间区域(即允许运动的区域)和无效区域。自由空间节点被设置为“无成本”,这意味着它们可自由更新。无效区域被设置为“无穷大”,即一个特别(高)的值,这也是不能通过路径的指示。
B.7“目标”/“开始”
具有几种方式来使用“开始”和“目标”的概念。实际上,可以开始沿任一方向计算路径,注意:正确计算任何方向成本。例如,不允许沿着单行线向后行驶在错误路线上。
“目标”可以是肺中肿瘤的3D位置,其被用作搜索的“种子”节点。例如,如果利用给送到支气管镜的尖端的工具获得活检,则进入取向也可以由医生建议。在这种情况下,不是绝对地需要“开始”节点。
“开始”节点也可以是“种子”节点,其常常位于气管的近似中心处。该位置容易在肺部CT上利用图形进行选择,这是因为它是在体积的第一(或最后)切片上的大黑圆。在该情况下,不是绝对地需要“目标”节点。
在每个节点具有单个取向的3D配置空间中,“种子”节点必须具有限定的取向。在可能存在多个取向的情况下,可以利用使用不同取向的“种子”节点再生成规划。然而,在许多临床情况下,可以相对容易地限定取向。例如,肿瘤可以从其表面上的几个点之一进入,但是理想地从垂直于所述表面的取向对该肿瘤进行活检。因此,配置空间中的每个表面位置可以具有理想的取向。
B.8事件序列/最优路径
将“种子”节点放置在堆栈中,以便开始成本波传播或者A*。堆栈是在根部保持最低成本值的平衡二叉树。采取图7中的步骤。
该过程从701开始,一直到步骤710。在步骤710中,从堆栈获取最低成本节点。将从堆栈获取的节点称为“源节点”。假设:利用公知算法来确保堆栈保持正确。过程通过731转到步骤720。
在步骤720中,测试“停止标准”。具有许多可被执行来确定过程是否可以停止的测试。“停止标准”例如可以包括:
1、堆栈清空
2、当前(“源”)节点的cost_to_goal值大于(非“种子”)“开始”或“目标”。这允许在整个空间被填充之前终止搜索;然而,它给出了“开始”和“目标”之间的最优路径。
如果满足“停止标准”,则该过程通过下面的箭头711在步骤713退出。如果不满足“停止标准”,则该过程通过712转到步骤730。
在步骤730中,生成可容许运动的邻域。基于由它的α、θ、以及它的“源节点”x、y、z位置所给出的“源”节点的取向,计算“源”节点的相邻点。通过使标称邻域旋转α、θ、然后相对于“源”节点的x、y、z位置平移(translate)已经旋转的邻域,来产生邻域。用于旋转和平移点的方法对于本领域技术人员来说是公知的;然而,在图8中,提供了实现这些转换的软件代码的例子。
在像素不是完全方形的情况下(例如在CT图像中,其中x∶y∶z的比率例如可以是1∶1∶1.3),执行旋转,然后对值定标(scale)。然后,将最终的邻域平移到当前扩展节点的位置。一旦计算出当前“源”节点的相邻点,那么过程通过732转到步骤740。
在步骤740中,选择邻域的下一条线。如果没有更多的线,则过程通过714返回到710。如果有线(f),则过程通过716转到步骤750。
在步骤750中,选择沿着线(f)的下一个相邻点(n)。如果沿着该线没有更多的相邻点,则过程通过715返回到740。如果有另一相邻点(n),则过程通过817转到步骤760。
在步骤760中,测试相邻点的成本值。如果它是无穷大的,或者存在该相邻点是不可通过的另一指示,则过程通过718返回到740。另一指示可以是相邻点具有高于某个预定阈值的成本值,所述预定阈值小于无穷大,但是太高以致于不能通过。例如,该阈值可以是当前移动距离(在“源”节点)的函数。如果相邻点没有无穷大的成本,则过程通过719转到步骤770。
在步骤770中,针对新的相邻点,计算提出的新成本F(n’)。由于相邻点可能已经具有成本,它被表示为F(n’)。在A*算法中,可以使用试探函数h(n)来引导搜索。然而,完全有效的值为h=0,其使得利用所有“种子”节点填充空间,直到“停止标准”被满足/为真。然后,过程通过733转到步骤780。
在步骤780中,将计算出的成本F(n’)与在n处的预先存在的成本F(n)进行比较。如果F(n’)大于F(n),则与先前确定的任何一个相比,它通过“源”节点到达n的成本更高,并且该过程通过721返回步骤750。如果计算出的成本F(n’)小于F(n),则相对于现有方向,该值是一个改进。在该情况下,该过程通过722转到790。
在步骤790中,将节点加入到堆栈。如果它已经在堆栈上,则该值被更新,并且调整堆栈。将新的cost_to_goal指定给n,其是新的α、θ和通过将标称节点的α、θ和的值加到父节点的α、θ和上,计算α、θ和的值。通向“种子”节点的最佳路线的修正“best_parent”被指定给“源节点”。可选地,但非优选地,存储线的数量。这使以后在在沿路径移动期间的计算最小化,原因是线的数量直接映射到控制参数,也就是窥镜向上/向下和向左/向右转动的量。
B.9变形
如果可能存在控制误差或感测误差,那么优选的是与理论上的可能窄的情形相比更加窄地限定邻域。例如,增加转动半径,以使其超过最小可能值。通过在手术操作期间进行轻微校正,这可以补偿未预料到的控制误差或感测误差。
支气管镜可以是不对称的。也就是说,沿左、右、上、下方向的曲率半径可以是不相等的。
B.10沿路径移动
在图7的步骤713中,搜索完成之后,在优选实施例中,可以发生几个过程。
如果识别出“开始”和“目标”,则可以通过将定位点发送给仪器,给出前进距离和右/左和上/下控制的角度来生成或实现路径。可以通过计算当前位置和取向与目标位置和取向之间的最优弧线来确定这些值。在优选实施例中,存储线的数量(例如来自图7的步骤790)或曲率和角度,以便获得校正的右/左、上/下设置。
在备选实施例中,如果“开始”节点是“种子”节点,那么“目标”节点由内科医生通过在3维空间中显示可到达状态来“拾取”。内科医生然后拾取目标位置,例如肿瘤的位置。备选地,计算机辅助检测系统将可疑病变突出显示为点的子集,并且内科医生进一步从点的这个子集中拾取目标位置。
在另一备选实施例中,如果“目标”节点是“种子”节点,则实时跟踪支气管镜。使用支气管镜的尖端的x、y、z位置来查找配置空间中的匹配位置。基于窥镜的尖端的位置,将尖端的角调整为适当的L/R、U/D角。
在图9中,示出了示意性路径,其中通过半透明的肺状态显示了路径901。当路径沿着支气管树的边缘移动时,路径901更明亮,这是因为在路径和视图之间没有半透明的像素。
支气管镜具有两个控制,加上前进到患者中的能力。控制是在一个刻度盘上的“左、中心、右”和在另一个刻度盘上的“上、水平、下”。中心位于左和右之间,而水平位于上和下之间。前进由手执行,或者可以用机器执行。从“开始”到“目标”,沿路径移动,从配置空间依次读出每个“定位点”。定位点给出了当前位置和取向、前进到达下一个定位点的量、以及线的数量。线的数量给出了为了到达下一个定位点应当具有的姿态。在图4中,具有9条线。一条是直的,而其他线表现为转动半径为14mm的弧线。优选地,存储线的数量,尽管可以将受控姿态计算为从当前位置到“目标”位置和取向的最大半径弧线。这种“动态进行的”计算同样可用于管理在控制或患者运动中的实时偏差。图4所示的线对应于表1中的动作:
线#1 左/右控制 上/下控制 410 中心 上 420 右 上 430 右 水平 440 右 下 450 中心 下 460 左 下 470 左 水平 480 左 上 490 中心 水平
表1
导管实施例(C)
导管用于在脉管系统内的远侧位置执行动作。这样的手术操作的例子是血管成形术和心导管插入术。心脏手术操作使用从股动脉给送的一直到心脏的导管,尽管有时进入心脏是通过手臂或手腕的动脉。在图10中,显示了示意性导管。导管的另一用途是用于心脏消融,其中可以通过选择性地消融心脏的不正常的电气路径来恢复心律。FDA网站(www.fda.gov)的图11示出了根据现有技术如何在心脏中使用消融导管1101,其中在图像引导下手动控制导管。由于在现有技术中没有可用于心脏导管的自动控制,因此在达到心脏血管中的正确位置之前,手术操作可能花费了几个小时。
C.1配置空间
在优选实施例中,将导管的配置空间表示为导管的尖端在3维空间中的位置。可以使用CT、MRI或3D超声(3D电子或合成)来对“开始”、“目标”和可容许移动区域进行成像,并且将“开始”、“目标”和可容许移动区域用作测定配置空间大小的基础。尖端也具有需要3个附加角的取向,例如图2中所示的那些。
在现有技术中,每个角在3维中的每一维中被离散化。路径可以在该空间中计算;然而,这使已经大的数据集变得更加大。对于具有512×512个像素和295个切片的肺部图像(其中,对于3个取向中的每一个取向,具有360个可能的离散角),数据量是:
512×512×295×360×360×360个节点或3,608,024,186,880,000个节点。
较粗的离散减小了取向的集合,但是增加了误差。此外,这些超大的数据量超出了当前许多的计算能力,具有与当前硬件相同的问题。
C.2最小化配置空间
为了将这个明显的“6D”结构空间问题转换成更易管理的尺寸,谈几个观点:
沿着配置空间中的任何特定路径只有工具尖端的一个取向是最优的。因此,在每个位置配置状态(即x、y、z)下,仅仅存储一个选项就足够了,这将问题转换成3维,需要存储量O(CT体积)。这以大于4660万(360×360×360)的系数显著地减小了配置空间的尺寸。
另外,不再对角进行离散化,这在先前是必需的,存储在配置空间中的值可以是整数、单精度浮点型或双精度型,以便任意地表示精确的角。这样,可以大大地减小离散误差。
最后,可以将6维规划包含在标称邻域的计算中,这可以进一步减小计算开销。
量的这种减小是可能的,这是因为角被用于不需要独立状态的两个目的:
1)作为x、y、z位置内的特征,以帮助确定连续扩展的方向;以及
2)当沿路径移动时,作为控制参数的决定因素。
C.3节点和过渡
正如支气管镜实施例,在导管的配置空间中的每个位置处,数据结构拥有必要的信息。下面是用于导管的优选配置空间节点数据结构:
float cost_to_goal;
struct csnode*best_parent_ptr;
unsigned int heap_location;//索引为heap(tree[i])
float alpha,theta,phi;//围绕x、y、z的旋转
short neighbor_number;//可选的。可以推断半径和取向。
接着,更具体地描述了这些变量中的每一个:
·cost_to_goal存储从当前节点到最近“目标”的成本的值,并且当A*(或微分A*)方法重新计算空间时,对cost_to_goal进行更新。
·best_parent_pointer指向一个“等效”的父节点,这是由于潜在相邻点的数量可以超过32或64,这使得更多空间有效用于直接地存储地址,并且在优选实施例中,它是指向第一低成本父节点的指针。
堆栈是优选实施例中的存储数据结构。为了在搜索期间在成本可能快速增加或减小的环境中管理堆栈中的变化值,包括了配置空间和堆栈之间的位置链路。堆栈具有到配置空间节点的链路,并且配置空间具有回到堆栈的链路。当调整堆栈时,这些链路被更新。
在备选实施例中,配置状态包括线的数量,使用该线从当前节点移动到父节点。利用该线,可以确定当前节点的半径和取向。这消除了在沿实际路径移动期间重新计算该值。然而,在实时控制情况下,如果弧线可以轻微变化以补偿规划和真实环境(包括呼吸或身体运动)之间的差异,那么该线的“动态进行的”重新计算可以是期望的。
C.4标准/成本
对于导管例子,最容易的路径是期望的。由于导管常常是挠性的但是弯曲的,因此导管在血管壁内部保持施加沿着壁的压力。目标是最小化沿着壁的压力,通过检查峰值压力而使穿刺的风险最小化,并且通过使用用于横向移动的最无应力的形状来使操纵难度最小化。导管尖端的曲率的最小偏差将是最优标准,然而也强制实行了截止最大值(cutoff maximum)。为此,尖端移动的距离由相对于导管的“正常”无应力形状的偏差进行加权。权重可以与尖端上的应力成比例,或者可以是指数函数。例如,权重可以如图12所示。为了简化作图,我们仅仅显示了两个加权弧线,一个具有由1加权的28mm半径的相邻点,一个是由7加权的14mm半径。
C.5原子动作/邻域/后续点
导管的尖端仅仅具有两个控制能力。它可以旋转并且它可以被推入或推出。限定导管的末端的弧线可以由与支气管镜相同类型的转动半径来近似,并且可以使用图13中的相同代码来生成线,然而权重根据在先前部分中描述的度量进行调整。与支气管镜的例子相同,针对每条“线”,计算邻域。当导管前进时,后面的导管主体沿着尖端设置的路径移动。在附录B中,给出了用于描述导管的基本能力的标称邻域的数据点和值的例子。该标称邻域识别每个相邻点在X、Y和Z中距离缺省点(即,α、θ和的(0,0,0)取向)的相对位置。假设:在启动时,对标称邻域计算一次。该邻域的数据的例子在图13中被绘制成图。
现在参考图13,其示出了邻域的一部分,显示了弧线1310和1320的相邻点的集合。这些示意性弧线分别针对半径14mm和28mm。线的概念表示可见点的先后次序。弧线在具有指定转动半径的圆中大约扫过90度。九十(90)度是所需的最大值。因此,相邻点的数量与半径的尺寸有关。也就是说,更大的半径需要更多的相邻点来覆盖整个90度弧线。
然后,弧线的集合围绕X旋转均匀隔开的任意数量的度数。与支气管镜的情况相同,线的数量暗示了特定转动半径和相对于当前取向围绕X的旋转。图14显示了具有半径为14mm和28mm的弧线的完整标称邻域。
备选地,可以创建更加复杂的模型来生成具有任意形状的每一条线。显然,可以将生成的线的数量达到任意高的数量。邻域可以包括许多可能的半径以覆盖3D区域的更大体积。该邻域可以在3D中计算,其由图5的模拟形状显示,类似于细丝纤维灯/光学纤维灯中的一组线。因此,体积中的每个状态将被填充。复杂度量的例子可以是这样一个例子,它偏离管的中心一定百分比而使成本进一步增加。
C.6约束/禁止区/障碍
本系统的输入例如是来自CT的分割3D图像。这限定了组织的自由空间区域(即允许运动的区域)和无效区域。我们可以将自由空间节点设置为“无成本”,这意味着它们可自由更新。无效区域被设置为“无穷大”,即一个特别(高)的值,这也是不能通过路径的指示。
C.7“目标”/“开始”
具有几种方式来使用“开始”和“目标”的概念。实际上,可以开始沿任一方向计算路径,注意:正确计算任何方向成本。例如,不允许沿着单行线向后行驶在错误路线上。
“目标”可以是血管成形术或RF消融的靶向3D位置。将这个“目标”用作搜索的“种子”节点。例如,如果利用给送到导管的尖端的工具获得活检,则进入方向也可以由医生建议。在这种情况下,不是绝对地需要“开始”节点。
“开始”节点也可以是“种子”节点,其常常位于股动脉的近似中心处,适用于心脏应用。在该情况下,不是绝对地需要“目标”节点。
C.8事件序列/最优路径
在核心成本波传播方面,导管的过程与支气管镜的过程相同,请参见上面B.8的论述。
C.9变形
如果可能存在控制误差或感测误差,那么优选的是与理论上的可能窄的情形相比更加窄地限定邻域。例如,增大转动半径,以使其超过最小可能值。通过在手术操作期间进行轻微校正,这可以补偿未预料到的控制误差或感测误差。
C.10沿路径移动
在图7的步骤713中,搜索完成之后,可以发生几个过程。
如果识别出“开始”和“目标”,则可以通过将定位点发送给仪器,给出前进距离和导管的阿尔法(α)旋转来生成或实现路径。这是利用线的数量所获知的角度。备选地,可以通过计算当前位置和取向与目标位置和取向之间的最优弧线来确定所需的角度。在优选实施例中,为了模拟,存储线的数量(例如来自图7的步骤790)或曲率和角度,以便快速地计算设置。
如果“开始”节点是“种子”节点,那么“目标”节点由内科医生通过在3维空间中显示可到达状态来“拾取”。这样,内科医生可以拾取目标位置,例如为支架建议的狭窄血管的位置。备选地,计算机辅助检测系统可以突出显示可疑病变,并且内科医生可以更容易地从点的这个子集中拾取。
如果“目标”节点是“种子”节点,则可以实时跟踪导管。可以使用导管的尖端的x、y、z位置来查找配置空间中的匹配位置。基于导管的尖端的位置,可以将尖端的角度旋转到适当的角度。
导管具有一个控制,即角度阿尔法(α),加上前进到患者中的能力。前进由手执行,或者可以用机器执行。从“开始”到“目标”,一直沿路径移动,从配置空间依次读出每个“定位点”。定位点给出了当前位置和取向、前进到达下一个定位点的量、以及线的数量。线的数量给出了为了到达下一个定位点导管应当具有的姿态。在图14的例子中,具有16条线,所述线对应于下列动作:
线# 阿尔法变化(度数) 1410或1411 0 1420或1421 +45 1430或1431 +90 1440或1441 +135 1450或1451 +或-180 1460或1461 -135 1470或1471 -90 1480或1481 -45
斜面针的控制(N)
例如,图15所示的用于扎出曲线路径的斜面针是已知的(参见例如Robert J.Webster III、Noah J.Cowan、Gregory S.Chirikjian以及AllisonM.Okamura的“Nonholonomic Modeling of Needle Steering”,InternationalSymposium of Experimental Robotics,新加坡,2004年6月;1Robert J.WebsterIII、Jasenka Memisevic以及Allison M.Okamura的“Design Considerations forRobotic Needle Steering”,IEEE International Conference on Robotics andAutomation,巴塞罗纳,2005年4月)。临床目标是使用这样的针在障碍和敏感区域的周围进行操纵。在现有技术的方法中,斜面针的规划被限制到2维,需要针在0度或180度转动以保持在单个平面内。本发明的系统、装置和方法允许在包括取向的3维中进行规划,而不需要6维配置空间。在优选实施例中,将本发明与单个弧线邻域一起使用,该单个弧线邻域表示通过将斜面针插入身体中所产生的曲率。连同优选的进入方向一起,选择靶点。然后,规划者使用本发明生成从进入区域到靶点(“目标”)的最优路径。如果未使用试探函数驱动和缩短搜索,则可能存在从表面可到达的几个等效的“最优”路径。这是有价值的,原因在于它在手术操作期间为外科医生提供了选择“开始”节点的灵活性,假定外部障碍,例如其他器械和助手。针与不同组织的相互作用可以引起不同类型的曲率,或者甚至偏转(例如,从骨头开始)。如在本发明中的那样,仅具有先验地检测组织的能力可以规划出最终的曲率。
外科手术前规划
介入性引导常常需要利用CT或MRI图像进行预规划,以便确定最佳通路,该最佳通路在使灾难性误差的风险最小化的同时产生最小的损伤。预规划使外科医生能够预演可能出现的问题,并且结合工具以避免它们。可能发生的是,建议的工具在合理成本的情况下(例如对血管壁的应力)无法到达“目标”位置。在这种情况下,可以使用本发明提供可用的各种工具中的每一个工具的成本,并且识别出对于给定的“开始”和“目标”具有最低成本的工具。这相当于使用本发明模拟每个工具在给定身体中的使用。
外科手术训练
由于系统建议了最佳路径,包括控制的指示,它也可以用作实施外科手术的反馈。在优选实施例中,这通过在工具的尖端呈现合适的图像来实现。图像可以是正交于窥镜或导管的图像,或者可以是围绕窥镜或导管的图像。
外科手术控制
可以向医生和用于推进工具的自动系统发出工具的控制命令,并且对于窥镜,根据当前配置状态,控制命令使窥镜的角度设置刻度盘转动。
动物检查
如果需要快速和可重复的控制,例如在动物实验中,那么对于该应用可以使用和控制小的窥镜。
基于DNA的信息
DNA信息可以用于确定到达样品(特定肿瘤或其他病变)的最佳通路。这可以被包括,以使得期望的目标选择、进入角度或成本权重可以基于DNA指示进行适应性变化。例如,对于DNA显示出癌症通过脉管系统扩散的机会更高的一些病变,血管可以具有更高的权重。然后,最终的活检或切除路径使切断病变的支撑脉管系统的路径最小化。
装置和系统
现在参考图16,示出了一种用于引导具有可定向尖端1605的工具1604的系统。系统1600包括图17所示的用于确定最优路径的装置1700,该装置1700包括:邻域生成模块730,其用于生成给定姿态的所有可到达相邻点;过渡成本t(n)计算模块1603,其用于计算从给定姿态过渡到每个相邻点的成本;成本波传播模块770,其用于将来自目标的成本波传播到给定姿态;以及路径确定模块700,其选择具有最低成本的相邻点。最优路径1606基于成本(或用作成本决定因素的一些其他目标函数)最小化来确定,最优路径1606由数字数据处理单元1601存储在存储器1608中,并且最优路径1606由数字数据处理单元1601提供给介入器(interventionalist)1602或工具控制器系统1607。最优路径和中间候选姿态存储在存储器1608中,并且在优选实施例中,使用堆栈通过成本对候选姿态进行排序,在确定路径期间的任何给定时间,最小成本候选在堆栈的顶部上。数字数据处理单元1601在最优路径的确定中指导装置1700的各种模块,并且将中间和最终路径存储在存储器和堆栈1608中以及按照指示将先前存储在存储器1608中的确定最优路径提供给控制器系统1607和介入工作站1602。
尽管已经示出并描述了本发明的优选实施例,但是本领域技术人员应该理解:这里所述的系统、装置和方法是示例性的,可以在不脱离本发明真实范围的情况下作出各种变化和修改,并且等效物可以替换其中的元件。另外,可以作出许多修改以使本发明的教导适用于导管和窥境路径规划,而不脱离其中心范围。因此,这不是要将本发明限制为公开的特定实施例(作为实现本发明的最优模式),相反本发明包括落入所附权利要求的范围内的所有实施例。
附录A
直的线
α=0度
标称弧线的增量为0.050(2.865度)
该线的α旋转=0.0(0.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=0.8(45.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=1.6(90.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=2.4(135.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=3.1(180.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=3.9(225.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=4.7(270.0)
注意:θ和φ以弧度(度数)显示
-------------------------------------------------
该线的α旋转=5.5(315.0)
注意:θ和φ以弧度(度数)显示
附录B
生成半径28mm的邻域
该线的α旋转=0.0(0.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=0.8(45.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=1.6(90.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=2.4(135.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=3.1(180.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=3.9(225.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=4.7(270.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=5.5(315.0)
注意:θ和φ以弧度(度数)显示
生成半径14mm的邻域
----------------------------------------------
该线的α旋转=0.0(0.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=0.8(45.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=1.6(90.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=2.4(135.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=3.1(180.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=3.9(225.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=4.7(270.0)
注意:θ和φ以弧度(度数)显示
该线的α旋转=5.5(315.0)
注意:θ和φ以弧度(度数)显示