ROS-Industrial 之 MoveIt —— 读取实际机器人的状态

每天不调点BUG,感觉浑身不自在。不过接下来要记录的这个问题,可能是由于个人编程习惯的原因导致的,致使自己会遇到这种问题。如果有良好的编程习惯,可能这都不是一个问题,毕竟随手多敲几行代码就消除了隐患。

文章目录

  • 1. 问题描述
  • 2. 解决方法
  • 3. 原因分析
  • 4. 参考资料

1. 问题描述

在利用ROS-I控制实体机器人的过程中,需要读取实际机器人当前位姿等信息,但在利会MoveIt提供的函数getCurrentPose()获取信息时,会报错:

[ INFO] [1590636099.040013320]: Didn't received robot state (joint angles) with recent timestamp within 1 seconds.
Check clock synchronization if your are running ROS across multiple machines!
[ERROR] [1590636099.040116649]: Failed to fetch current robot state

但在执行getJointNames()时,能够正常获取结果。

2. 解决方法

在类的变量中加入ros::AsyncSpinner变量spinner,并在执行数据获得函数之前对其进行初始化,并启动spinner.start()。至于在什么地方结束spinner.stop(),则看各自的程序需要。

3. 原因分析

初步分析的结果就是,MoveIt里的信息获取函数是基于对相关topic信息的接收进而计算或是查询得到的,所以需要spinner来启动节点对应信息获取函数的回调进程。更加详细的介绍可以参考第四部分的链接内容。

4. 参考资料

[1] roscpp/Overview/Callbacks and Spinning

你可能感兴趣的:(ROS-I,ROS)