参考:赵虚左的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)、
总结
最好采用第二种方法,与服务名称对应上。
ROS中,服务通信的先后顺序可能导致错误。通常,服务先启动,然后客户端连接。但ROS节点可能无法保证这种顺序,导致客户端尝试连接未启动的服务。解决办法是在客户端代码中添加`wait_for_service`或`waitForExistence`函数,确保客户端在服务可用后再进行通信。这可以避免`rospy.service.ServiceException`的错误。推荐使用与服务名称对应的等待方法以确保正确连接。
1277

被折叠的 条评论
为什么被折叠?



