参考:赵虚左的ROS课程+古月的ROS机器人开发实践
先后问题:
实际生活中也是先有服务的一方,客户去找到服务。服务通信也是,先启动服务通信,服务通信挂起等待客户端,然后启动客户端。但是在ROS有时节点难保证这种先后关系,如果不对此处理,就会报错。所以必须使得在客户端有挂起功能。
rospy.service.ServiceException: service [/add_ints] unavailable
python
在创建客户端代码后加入
client.wait_for_service()
rospy.wait_for_service("服务名称")
目的是创建完客户端后,挂起等待服务端(wait for service)
c++
在创建客户端代码后加入
client.waitForExistence();
ros::service::waitForService("服务名称");
目的是创建完客户端后,挂起等待服务端(wait for service)、
总结
最好采用第二种方法,与服务名称对应上。