利用python腳本監聽json文件,當map_builder_exit的值爲1時,結束與cartographer建圖有關的node,釋放節點。python腳本較爲簡單,僅涉及python對json的處理,和利用python執行shell命令。
腳本map_save.py如下:
# coding=utf-8 //設置文本格式
import os,time,sys
from multiprocessing import Process
import json
def sub_exit_signal():
filename = '/home/cabin/Desktop/remote_communication/task_state.json'
while 1 :
time.sleep(1)
with open(filename, 'r') as fr:
json_data = json.load(fr)
exit_signal = json_data['map_builder']['map_builder_exit']
fr.close()
if 1 == exit_signal :
print "get exit signal"
json_data['map_builder']['map_builder_exit'] = 0
m_json_data = json_data;
os.system("rosnode kill cartographer_occupancy_grid_node map_to_laser_odom robot_state_publisher rviz cartographer_node")
break
print "end map_build ..."
sys.exit(0)
if __name__ == '__main__':
sub_exit_signal()
print "building the map ..."
注意對json文件的監聽時,不能讀取頻率太高,應設一個時延,否則會報錯。