该种功能的实现主要包括,三个接收话题的方法和与之对应的三个回调函数。
三个接收方法分别为chatter1、chatter2和chatter3,一旦接收到有数据,就马上进入相对应的回调函数。
三个回调函数,分别是callback1、callback2以及callback3,由它们完成向地图中发布目标点。
move_base地图上的一个点通常包括六个维度,即二维平面上的坐标(x,y,z)和表示自身位姿的四元数(r,p,y,w),所以要通过回调函数将得到的数据进行转化成相应的类型。
第一个回调函数用于接收角度,一旦接收到角度值,该角度值可以不严谨的看成绕base_link旋转的旋转角,将其转化成相应的位姿四元数(0,0,y,1)以表示此次旋转,然后将这个位姿四元数值经过动作编程服务向move_base发布数据进行动作通信,请求机器人在base_link的坐标系下进行相关角度的旋转
第二个回调函数用来接收距离值distance,在回调函数callback2中,将该距离转换成move_base要求的二维平面坐标(distance,0,0)。在这同时位姿并未发生旋转所以位姿四元数为(0,0,0,1)。然后将该数据直接通过动作通信发送给move_base,请求move_base按照该目标点规划路径并前往。
第三个回调函数,设计了一种语音唤醒线程的方式,当听到相应的语音指令后,让机器人回到地图原点,这需要将参考坐标设置为map,并将二维平面的坐标和位姿四元数设置为零,通过动作通信向move_base发布原点位置,让机器人顺利回家。
理论部分实测已经实现。