ros1使用过程中遇到的问题记录

Failed to fetch current robot state

如果使用的是moveit助手生成的demo.launch文件启动机械臂的话,应该是其他在运行的自己写的节点代码中少了spin函数,因为getCurrentPose函数依赖于spin,也可以使用AsyncSpinner。具体看下面这个链接https://answers.ros.org/question/302283/failed-to-fetch-current-robot-state/

代码执行到一半停住了

有的函数依靠spin函数,加上就行了。参照上一条

我出于测试,没写循环也没用spin函数,使用moveit将机械臂移动到一个预定义姿势,此行代码执行完,终端就不动了,既不结束程序,也不继续输出信息。加上spin就行了。

[startArm-5] process has died [pid 14527, exit code -6,

因为想自定义函数操作机械臂,而操作机械臂需要规划组MoveGroupInterface对象,将对象作为参数传入函数感觉有点占用性能,于是我将规划组对象移到main函数外面作为全局变量,就出现了此报错。
moveit::planning_interface::MoveGroupInterface arm("arm_PG"); 

原因:实例化规划组对象需要先实例化NodeHandle对象,但NodeHandle对象是在main函数内实例化。而NodeHandle需要在init函数之后定义,而init函数需要传入main函数的argc和argv。这就导致不能干脆地将规划组MoveGroupInterface实例化直接移出来作为全局变量。

解决办法:可以定义全局规划组指针,如下

#include "" // 一堆include

moveit::planning_interface::MoveGroupInterface *arm;    // 全局指针

int main(int argc, char *argv[])
{
    ros::init(argc, argv, "test_node");
    ros::NodeHandle nh;
    arm = new moveit::planning_interface::MoveGroupInterface("arm_PG");    // 给指针填上东西
    // 获取末端名称
    std::string endEffector_link = arm->getEndEffectorLink();    // .调用需要改为->调用
}

参考https://answers.ros.org/question/350643/node-crashes-with-ros-does-not-seem-to-be-running/

猜你喜欢

转载自blog.csdn.net/qq_35858902/article/details/129094839