面向机器人ROS程序的自动崩溃恢复方法和系统

文档序号:25874402发布日期:2021-07-16 17:23阅读:880来源:国知局
面向机器人ROS程序的自动崩溃恢复方法和系统
面向机器人ros程序的自动崩溃恢复方法和系统
技术领域
1.本发明涉及机器人系统领域,尤其涉及一种面向机器人ros程序的自动崩溃恢复方法和系统。


背景技术:

2.ros是一种机器人软件开发程序和工具库,提供了硬件抽象、设备驱动、库函数、可视化、消息传递和软件包管理等功能,在现有机器人开发和应用中被广泛使用。在机器人系统中,通常有多个ros程序同时运行,每个程序执行自己的特定任务,不同程序之间通过发布与订阅消息相互沟通,从而相互配合共同完成机器人的总体功能。该结构使得相同的ros程序可以在不同机器人系统中重复使用,降低机器人系统的开发难度和成本。
3.但是,ros程序在运行过程中,可能由于系统配置、环境异常或者代码缺陷等原因发生崩溃。如果该程序无法准确地被恢复,则机器人将无法正常继续工作。该问题对于工作在无人环境(例如沙漠、森林和太空等)的机器人来说,是非常严重和危险的。为了进行程序的崩溃恢复,ros系统只为用户提供了一种默认恢复手段,即在崩溃后重启。但是,这种恢复方式无法正确完整地恢复目标程序在崩溃前的数据,可能导致崩溃恢复后,目标程序执行出现异常。例如,机器人路径规划程序在崩溃重启后,由于丢失机器人的当前位置与目标位置信息,使机器人路径规划错误,可能造成撞击障碍物的严重后果。在ros answers网站中,很多开发者在使用崩溃后重启的方法时出现了机器人运行异常的问题。因此,为ros程序设计正确高效的崩溃恢复方法,以提高机器人系统的鲁棒性,是十分重要的。
4.检查点和消息重放作为两种传统的崩溃恢复机制,在分布式系统、操作系统和数据库等传统程序中被广泛使用。检查点机制一般以某个固定时间间隔自动保存程序部分必要或全部信息。然而,该机制会丢失相邻检查点之间的数据,影响崩溃恢复的完整性和正确性。消息重放机制会保存从程序启动至崩溃的所有消息,在恢复时重新将这些消息重放给目标程序,使目标程序重新恢复至崩溃时的状态。然而,该机制可能由于消息重放时间可能较长,增加崩溃恢复的时间开销。而且,不同于传统程序,在机器人系统中,由于周围环境仍在不断变化,恢复ros程序时,恢复的内容可能已经与当前环境不一致。此外,在崩溃恢复时,目标程序与其他程序之间可能会发生消息传递,从而影响目标程序的恢复过程和其他程序的运行状态。因此,简单复用检查点和消息重放机制对ros程序来说是不可行的。
5.因此,设计一种正确高效的面向机器人ros程序的自动崩溃恢复方法成为了机器人系统开发和维护中亟待解决的问题。


技术实现要素:

6.本发明提供一种面向机器人ros程序的自动崩溃恢复方法和系统,用以解决现有技术中存在的技术缺陷。
7.本发明提供一种面向机器人ros程序的自动崩溃恢复方法,包括:
8.在目标程序运行时,监测目标程序运行状态、定时设置检查点并记录关键信息及
接收的信息;
9.当监测到所述目标程序崩溃时,使机器人进入安全状态、使所述目标程序进入隔离状态、并执行崩溃恢复操作;
10.所述崩溃恢复操作包括:重启所述目标程序,基于所述检查点恢复关键信息,并将所述目标程序重放在最后一次设置检查点后接收的信息。
11.根据本发明提供的面向机器人ros程序的自动崩溃恢复方法,所述在目标程序运行时,监测目标程序运行状态、定时设置检查点并记录关键信息及接收的信息之前,包括:
12.利用llvm编译器架构对所述目标程序的源代码进行编译,生成中间代码文件;
13.基于输入的关键信息,在所述中间代码文件中插入用于目标程序运行监测、崩溃恢复的相关代码。
14.根据本发明提供的面向机器人ros程序的自动崩溃恢复方法,所述使机器人进入安全状态包括:
15.使机器人停止移动或暂停任务。
16.根据本发明提供的面向机器人ros程序的自动崩溃恢复方法,所述执行崩溃恢复操作之后,包括:
17.解除所述目标程序的隔离状态;
18.使机器人解除安全状态。
19.根据本发明提供的面向机器人ros程序的自动崩溃恢复方法,所述使机器人解除安全状态之后,还包括:
20.基于预先设定的目标任务,自动重新设定所述目标任务。
21.本发明还提供了一种面向机器人ros程序的自动崩溃恢复系统,包括:
22.程序监测模块,用于在目标程序运行时,监测目标程序运行状态、定时设置检查点并记录关键信息及接收的信息;
23.程序崩溃处理模块,用于当监测到所述目标程序崩溃时,使机器人进入安全状态、使所述目标程序进入隔离状态、并执行崩溃恢复操作;
24.所述崩溃恢复操作包括:重启所述目标程序,基于所述检查点恢复关键信息,并将所述目标程序重放在最后一次设置检查点后接收的信息。
25.根据本发明提供的面向机器人ros程序的自动崩溃恢复系统,所述系统包括:
26.程序编译模块,用于利用llvm编译器架构对所述目标程序的源代码进行编译,生成中间代码文件;
27.程序插桩模块,用于基于输入的关键信息,在所述中间代码文件中插入用于目标程序运行监测、崩溃恢复的相关代码。
28.根据本发明提供的面向机器人ros程序的自动崩溃恢复系统,其特征在于,所述系统还包括:
29.隔离解除模块,用于在崩溃恢复之后,解除所述目标程序的隔离状态;
30.安全状态解除模块,用于在崩溃恢复之后,使机器人解除安全状态。
31.本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述面向机器人ros程序的自动崩溃恢复方法的步骤。
32.本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述面向机器人ros程序的自动崩溃恢复方法的步骤。
33.本发明提出了面向机器人ros程序的自动崩溃恢复方法,利用程序隔离技术,可以防止ros程序在恢复过程中与其他程序相互影响,防止恢复失败;利用检查点和消息重放相结合的技术,可正确高效地恢复不同类型的ros程序。本发明实施例的工作流程是自动的,不需要用户手动干预恢复过程,可以方便有效地进行ros程序的崩溃恢复,提高ros程序的鲁棒性。
附图说明
34.为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
35.图1是本发明一实施例提供的面向机器人ros程序的自动崩溃恢复方法的流程示意图;
36.图2是本发明一实施例提供的ros代码的编译、插桩流程图;
37.图3是本发明一实施例提供的消息中继程序、崩溃检测程序、崩溃恢复控制程序、消息控制程序部署方式的示例图;
38.图4是本发明一实施例提供的面向机器人ros程序的自动崩溃恢复系统的示意图;
39.图5是本发明提供的电子设备的结构示意图。
具体实施方式
40.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
41.本发明实施例公开了一种面向机器人ros程序的自动崩溃恢复方法,参见图1,包括:
42.s1:在目标程序运行时,监测目标程序运行状态、定时设置检查点并记录关键信息及接收的信息;
43.在机器人运行时,多个ros程序之间通过消息传递机制来共同完成任务。在目标程序运行时,监控其运行状态,定时设置检查点保存关键数据,转发并记录发送到目标程序的消息。目标程序启动时,同时启动相关程序。
44.s2:当监测到所述目标程序崩溃时,使机器人进入安全状态、使所述目标程序进入隔离状态、并执行崩溃恢复操作;
45.目标程序进入隔离状态,可以防止ros程序在恢复过程中与其他程序的消息交互影响。在目标程序崩溃后,如果其他程序仍然不断发送消息至目标程序,可能导致目标程序恢复异常;而且目标程序在恢复过程中,也会向其他程序发送消息,可能导致其他程序运行
异常。因此,需要在恢复过程中阻止目标程序与其他程序之间的消息传递。本发明实施例的方法在目标程序启动时在恢复时使目标程序处于无法接收且无法发送消息的隔离状态,从而保证恢复的正确性。当检测到目标程序发生崩溃时,发送消息通知崩溃恢复控制程序开始恢复流程。
46.具体的,可以利用消息中继器在目标程序运行时,负责接收发往目标程序的所有消息并转发给目标程序,同时接收目标程序发出的所有消息并转发给其他程序,并在崩溃时负责阻止目标程序的消息传递,在崩溃恢复时重启目标程序的消息传递。在检测到目标程序发生崩溃后,消息中继器停止转发消息,从而使目标程序无法与其他程序互相交流,进入隔离状态。
47.利用消息控制器在目标程序运行时,记录发往目标程序的所有消息,并在恢复过程中重放以最后一个检查点为起始的消息。
48.所述崩溃恢复操作包括:重启所述目标程序,基于所述检查点恢复关键信息,并将所述目标程序重放在最后一次设置检查点后接收的信息。
49.将目标程序重启后,目标程序因为插入了相关代码,启动后自动恢复运行时保存的检查点。在目标程序运行时,其他程序发送到目标程序的所有消息均被记录。检查点恢复完成后,重放在最后一次设置检查点后接收的消息。崩溃恢复操作中,利用检查点和消息重放相结合的技术,可正确高效地恢复不同类型的ros程序。假如单独使用检查点技术来恢复ros程序,则相邻检查点之间地关键数据将被丢失,从而严重影响崩溃恢复的正确性;如单独使用消息重放技术来恢复ros程序,则消息重放时间可能较长,增加崩溃恢复的时间开销。
50.可以利用崩溃恢复控制器负责根据检查点来恢复目标程序的关键信息,并控制其他部分完成崩溃恢复。
51.根据本发明提供的面向机器人ros程序的自动崩溃恢复方法,所述在目标程序运行时,监测目标程序运行状态、定时设置检查点并记录关键信息及接收的信息之前,包括:
52.利用llvm编译器架构对所述目标程序的源代码进行编译,生成中间代码文件;
53.基于输入的关键信息,在所述中间代码文件中插入用于目标程序运行监测、崩溃恢复的相关代码。
54.该方法适用的主要条件是ros程序的源代码能够被llvm编译器架构正常编译,并可以成功生成相应的中间代码。一般情况下,使用c++编写的ros程序都可以满足以上条件。该方法需要用户提供目标ros程序的源代码和机器人系统所有程序的部署情况,并且正确指定目标程序的关键变量。
55.代码编译器负责将目标程序编译,并根据其关键变量的信息,自动插入设置检查点的相关代码;相关代码用于进行运行时监控和崩溃恢复。分析中间代码文件,并根据用户提供的关键信息,自动识别这些关键信息,插入相关代码。插入代码后,目标程序在运行时可以保存关键信息,且在启动时自动加载这些关键信息。
56.进一步的,所述使机器人进入安全状态包括:
57.使机器人停止移动或暂停任务。当检测到目标程序发生崩溃时,使机器人系统进入安全状态。进入安全状态一般为发送消息使机器人停止移动或暂停相关任务。
58.根据本发明提供的面向机器人ros程序的自动崩溃恢复方法,所述执行崩溃恢复
操作之后,包括:
59.解除所述目标程序的隔离状态;
60.使机器人解除安全状态。
61.消息重放完成后,重新开始转发消息,从而恢复目标程序与其他程序之间的消息发送。
62.一般情况下,机器人自动重新开始工作。对于某些特殊的任务,用户可以预先设定目标任务,在恢复结束后崩溃恢复控制程序可以自动重新设定该任务。也就是说,所述使机器人解除安全状态之后,还包括:
63.基于预先设定的目标任务,自动重新设定所述目标任务。
64.为了更进一步地理解本发明的技术方案,本发明实施例还公开了一种面向机器人ros程序的自动崩溃恢复方法,
65.在进行监控之前,主要由代码编译器对目标程序进行编译,并通过用户指定的关键变量名称,插入写检查点的函数,保存关键变量值到ros参数服务器或磁盘上,并在程序启动的相关代码处插入加载检查点的函数,实现检查点功能;根据机器人系统所有程序的部署情况,可以得知目标程序接收和发出的所有消息类型,并以此配置相关启动文件,部署消息中继程序、崩溃检测程序和消息控制程序,其中崩溃检测程序监控程序运行状态,定时设置检查点,消息中继程序负责转发消息,消息控制程序记录发送到该程序的消息;目标程序启动后,同时启动消息中继程序、崩溃检测程序、消息控制程序和崩溃恢复控制程序;崩溃检测程序监控目标程序的运行情况,当检测到目标程序发生崩溃时,首先使机器人系统进入安全状态,即发送相关消息使机器人停止运动或执行用户预设操作,同时发送消息通知崩溃恢复控制程序开始恢复流程;崩溃恢复控制程序首先通知消息中继程序停止转发消息,从而使目标程序无法与其他程序互相交流,进入隔离状态,然后通知消息控制程序停止记录消息;崩溃恢复控制程序将目标程序重启,目标程序因为插入了相关代码,启动后自动从ros参数服务器或磁盘上恢复运行时保存的检查点,检查点恢复完成后,崩溃恢复控制程序通知消息控制程序重放在最后一次设置检查点后接收的消息;消息重放完成后,崩溃恢复控制程序通知消息中继程序重新开始转发消息,从而恢复目标程序与其他程序之间的消息发送。一般情况下,机器人自动重新开始工作。对于某些特殊的任务,用户可以预先设定目标任务,在恢复结束后崩溃恢复控制程序可以自动重新设定该任务。
66.ros程序的源代码通常由c++语言编写,但是由于c++语言的语法灵活且形式多变,所以很难直接对其进行程序分析。ros程序往往由gcc编译器直接编译,但该编译器无法生成方便于程序分析的中间代码。llvm编译器架构可以完整支持c++语言编译,并且能够生成便于程序分析和插桩的中间代码,因此本发明首先使用llvm编译器架构对ros程序的源代码进行编译和插桩。图2为ros代码的编译、插桩流程,主要分为两步:
67.(1)使用llvm提供的前端编译器clang,对驱动程序的每个源代码文件进行编译,生成对应的中间代码文件。
68.(2)根据用户提供的关键变量信息,分析中间代码文件,插入写检查点的函数,保存关键变量值,并在程序启动的相关代码处插入加载检查点的函数。
69.在另一具体实施例中,用户指定了目标程序move_base的类movebase的关键变量为目标地点变量goal

>pose和当前地点变量global_pose.pos。则代码编译器会插入
checkpointrecord和checkpointread两个函数。在checkpointrecord中,这两个变量被setparam函数记录到ros参数服务器中;在checkpointread中,这两个变量被getparam函数重新从ros参数服务器读取到内存中。同时在构造函数中,如果用户配置了需要恢复,则need_recovery为真,则会执行checkpointread函数。checkpointread即为从ros参数服务器上加载检查点,从而在程序的逻辑执行之前恢复关键变量。而checkpointrecord会被定时调用,从而实现检查点功能。
70.例如附图3所示,目标程序move_base接收的消息类型为topic_map、topic_goal、topic_odom、topic_odom和topic_scan。则在部署时,消息中继程序转发这五种消息至move_base,而move_base仅接收发送自消息中继程序的消息。同时,move_base程序发送topic_move类型的消息。因此,消息中继程序还需要转发move_base程序发送的该类型消息至其他程序。消息控制程序也接收所有move_base程序接收的消息,并将这些消息记录到磁盘上,并可以从某时间重放这些消息到move_base程序。崩溃检测程序单独部署,仅负责检测move_base程序的信号,在发现move_base程序异常崩溃后,通知崩溃恢复控制程序开始整个恢复流程。
71.本发明的面向机器人ros程序的自动崩溃恢复方法,利用程序隔离技术,可以防止ros程序在恢复过程中与其他程序相互影响,防止恢复失败;利用检查点和消息重放相结合的技术,可正确高效地恢复不同类型的ros程序。本发明实施例的工作流程是自动的,不需要用户手动干预恢复过程,可以方便有效地进行ros程序的崩溃恢复,提高ros程序的鲁棒性,并且节省针对特定程序设计恢复方法的工作。
72.本发明实施例公开了一种面向机器人ros程序的自动崩溃恢复系统,参见图4,包括:
73.程序监测模块10,用于在目标程序运行时,监测目标程序运行状态、定时设置检查点并记录关键信息及接收的信息;
74.程序崩溃处理模块20,用于当监测到所述目标程序崩溃时,使机器人进入安全状态、使所述目标程序进入隔离状态、并执行崩溃恢复操作;
75.所述崩溃恢复操作包括:重启所述目标程序,基于所述检查点恢复关键信息,并将所述目标程序重放在最后一次设置检查点后接收的信息。
76.根据本发明提供的面向机器人ros程序的自动崩溃恢复系统,所述系统包括:
77.程序编译模块,用于利用llvm编译器架构对所述目标程序的源代码进行编译,生成中间代码文件;
78.程序插桩模块,用于基于输入的关键信息,在所述中间代码文件中插入用于目标程序运行监测、崩溃恢复的相关代码。
79.根据本发明提供的面向机器人ros程序的自动崩溃恢复系统,其特征在于,所述系统还包括:
80.隔离解除模块,用于在崩溃恢复之后,解除所述目标程序的隔离状态;
81.安全状态解除模块,用于在崩溃恢复之后,使机器人解除安全状态。
82.图5示例了一种电子设备的实体结构示意图,该电子设备可以包括:处理器(processor)310、通信接口(communications interface)320、存储器(memory)330和通信总线340,其中,处理器310,通信接口320,存储器330通过通信总线340完成相互间的通信。
处理器310可以调用存储器330中的逻辑指令,以执行一种面向机器人ros程序的自动崩溃恢复方法,该方法包括:
83.s1:在目标程序运行时,监测目标程序运行状态、定时设置检查点并记录关键信息及接收的信息;
84.s2:当监测到所述目标程序崩溃时,使机器人进入安全状态、使所述目标程序进入隔离状态、并执行崩溃恢复操作;
85.所述崩溃恢复操作包括:重启所述目标程序,基于所述检查点恢复关键信息,并将所述目标程序重放在最后一次设置检查点后接收的信息。
86.此外,上述的存储器中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read

only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
87.另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行一种面向机器人ros程序的自动崩溃恢复方法,该方法包括:
88.s1:在目标程序运行时,监测目标程序运行状态、定时设置检查点并记录关键信息及接收的信息;
89.s2:当监测到所述目标程序崩溃时,使机器人进入安全状态、使所述目标程序进入隔离状态、并执行崩溃恢复操作;
90.所述崩溃恢复操作包括:重启所述目标程序,基于所述检查点恢复关键信息,并将所述目标程序重放在最后一次设置检查点后接收的信息。
91.又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行一种面向机器人ros程序的自动崩溃恢复方法,该方法包括:
92.s1:在目标程序运行时,监测目标程序运行状态、定时设置检查点并记录关键信息及接收的信息;
93.s2:当监测到所述目标程序崩溃时,使机器人进入安全状态、使所述目标程序进入隔离状态、并执行崩溃恢复操作;
94.所述崩溃恢复操作包括:重启所述目标程序,基于所述检查点恢复关键信息,并将所述目标程序重放在最后一次设置检查点后接收的信息。
95.以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性
的劳动的情况下,即可以理解并实施。
96.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
97.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1