0 Star 0 Fork 0

Mr7_Jacky / 辨别Catographer是否建图完成的方法

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
README.md 2.34 KB
一键复制 编辑 原始数据 按行查看 历史
Mr7_Jacky 提交于 2020-08-21 02:24 . update README.md.

辨别Catographer是否建图完成的方法

介绍

提供检测建图是否完成的方法。

1. 检测是否完成建图

这种方法检测rospy的时间的改变。如果时间不再变化则说明建图已经完成。在end.py中提供了一种简单的方法来判断。当建图完成时,该文件会打印出end并退出。

在该python文件中,主要使用rospy.get_time()来获取时间。同个两个时间变量prevcur来判断时间是否发生改变。通过time.sleep来减缓检测频率。开始的time.sleep()则是提供时间间隔,避免刚开始时的两个时间判断prevcur相同。

主要函数为:

def listener():
    rospy.init_node('listener', anonymous = True)
    prev = rospy.get_time()
    time.sleep(1)
    while not rospy.is_shutdown(): 
        print(str(prev)+': RUNNING')
        try:
            cur = rospy.get_time()
        except(tf.LoopupException, tf.ConnectivityException, tf.ExtrapolationException):
            continue
        if prev == cur:
            print('end')
            sys.exit(0)
        prev = cur  
        time.sleep(2) 

2. 检测roscore

这种方法是一种替代方法,并非直接检测建图是否完成,而是检测roscore是否在线。可以在建图完成后通过关闭roscore来完成指令的传输。(编译环境基于python)

使用说明

以下方法均可以获得Master的信息,信息类似于以下list格式:

[1,'',5763]

如果报错,则说明连接不到Master。当关闭roscore后,会出现socket.error

socket.error: [Error 111] Connection refused

方法一、使用rospy来检测

import rospy
try:
    rospy.get_master().getPid()
    print('正在运行')
except:
    print('已关闭')

方法二、使用内置Python库来检测:

import os
import xmlrpclib
try:
    xmlrpclib.ServerProxy(os.environ['ROS_MASTER_URI']).getPid('/your_name')
    print('正在运行')
except:
    print('已关闭')

方法三、使用ROS 0.10来检测:

from roslib.masterapi import Master
try:
    Master('/yourname').getPid()
    print('正在运行')
except:
    print('已关闭')

参考

  1. Discussion: Getting the status of roscore
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/mr7_jacky/cartographer-finish-map-check-method.git
git@gitee.com:mr7_jacky/cartographer-finish-map-check-method.git
mr7_jacky
cartographer-finish-map-check-method
辨别Catographer是否建图完成的方法
master

搜索帮助