FeedbackMove

概述

此demo实现功能为该Application根据设置的Marker相对机器人坐标系位置坐标,然后会请求Marker Feature,手臂动作,根据收到的实时Marker信息,调用底盘和头部运动,最终使Marker处于机器人坐标系下的期望位置。

主要结构

FeedbackMove是一个QT工程,用QTCreator打开FeedbackMove.pro文件即可加载。

主要代码在FeedbackMove.cpp文件中。

  • 在FeedbackMove中完成成员变量的初始化,并设置最终Marker在机器人坐标系下的位置和MarkerID。请注意不同Marker对应不同的MarkerID。

  • 在Function Initialize中定义程序版本,同时开启一个定时器(SetTimer设置定时间隔300ms)。

  • 在InStage0_FunInit中,当HAI和LAI均上线后,会去请求肢体库权限和Marker Feature。

  • 在InStage01_ArmTrajHold中,发送左手手臂轨迹和头部运动指令,使左手处于预备姿势,使头部处于零点位置。

  • 在InStage02_WaitArmFinish中,等待手臂运动到预备姿势动作完成。

  • 在InStage10_MoveToTarget中,会根据收到的Marker坐标信息进行计算,调用底盘和头部运动,使Marker处于机器人坐标系下期望的位置。

  • 在InStage20_Finish中,检验运动位置是否在期望位置,否则调整机器人位置。

  • 在InStage30_SearchMarker中,会调用头部运动去搜寻Marker。

  • 在InStage40_ArmTrajInit中,发送左手手臂轨迹指令,使左手回到初始姿态。

  • 在InStage50_WaitFinish中,等待手臂回到初始姿态动作完成。

  • 消息处理询问函数(CheckMsgCode)中对指令完成状态、Marker信息等消息返回MsgProcCode_Notify,设置该类消息为通知模式,当收到该类消息时,会立刻响应相应消息的回调函数。

  • ProcMotCmdDone中,会收到所有肢体库指令的返回状态,用来判断运动指令的完成状态。

  • ProcVisionMarker中,会实时收到最新的Marker信息,进行相应计算得到在机器人坐标系下Marker的位置坐标信息。

  • 在定时器消息处理函数ProcTimer,该函数在本Function中每300ms会调用一次)中,会根据程序Stage,运行相应子程序段。

注意事项

  • MarkerID对应不同的Marker,该Application对应MArker在附件中,请按照原尺寸打印,并按正确方向平整粘贴。
  • 手臂运动轨迹文件必须与该Application执行文件同目录。