利用json文件实现不同设备间的交互(四)

      在有(一)、(二)、(三)的基础后,只需要一个全局的shell脚本按需求执行各项命令即可。shell脚本循环监听json文件,根据内容的改变依次执行指令。

      选取jq作为shell对json文件的处理工具。ubuntu下使用sudo apt-get install jq安装即可。

      脚本remote_communication.sh如下:

#! /bin/bash
count=1
while [ $count -le 2 ];do
  sleep 1
  map_builder=`jq '.map_builder.map_builder_excute' /home/cabin/Desktop/remote_communication/task_state.json`
  ...

  if [ "$map_builder"x == "1"x ];then
    echo -e "map build mode..."
    source /home/cabin/cartographer_0_3_0_ws/install_isolated/setup.bash
    python /home/cabin/Desktop/remote_communication/map_save.py | roslaunch cartographer_ros demo_backpack_2d_xiaobao_map_builder.launch speed:=1 bag_filename:=/home/cabin/Desktop/record_data_171213_1150/20180119.bag 
    sleep 1
    python /home/cabin/Desktop/remote_communication/json_value_modify.py map_builder.map_builder_excute 0 /home/cabin/Desktop/remote_communication/task_state.json
    sleep 1
    python /home/cabin/Desktop/remote_communication/json_value_modify.py map_builder.map_builder_exit 0 /home/cabin/Desktop/remote_communication/task_state.json
    sleep 1
    echo -e "map save succeed..."
  fi
   
  
  if [ ... ];then
         ...
  fi
   
  ...  
  
done

      流程如下:

      1、循环监听json文件;

      2、当map_builder.map_builder_excute的值为1时,执行map_save.py脚本监听结束cartographer建图节点的信号,同时打开cartographer的建图程序;否则转至1;

      3、建图的程序彻底终止后,依次执行json_value_modify.py将map_builder_excute和map_builder_exit置0;

      4、打印“map save succeed...”

      5、转至1 。

      注意shell脚本为串联执行,上一行任务没完成时不会执行下一行任务,比如cartographer建图的节点没有完全关闭时,是不会执行下一步的。

   至此,一个完整的建图流程构建完成。比如当手机发送信号使得json文件中map_builder_excute置1;remote_communication.sh脚本监听到map_builder_execute的改动后启动监听保存地图信号的save_map.py脚本,同时启动cartographer建图程序;手机再次发送信号使得json文件中map_builder_save置1;node_main.cc监听到map_builder_save的改动后将map_builder_save置0的同时结束建图并保存地图,然后将map_builder_exit置1;map_save.py监听到map_builder_exit的改动后将map_builder_exit置0的同时关闭cartographer建图的节点;节点完全关闭后remote_communication.sh可以继续执行剩余流程。建图流程完成后remote_communication.sh继续监听json文件,等待手机信号。

      由于项目中手机与树莓派之间传输的信息都封装成了标准ros格式。所以关于通过手机修改树莓派上的json文件的思路大致为通过python文件新建ros节点接收手机发送的topic,根据topic的内容修改json相应内容。python修改json文件与前文类似。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值