这个概念和我们理解的API的概念很类似。本质上就是一个提供ROS编程的库。例如:建立node,发布消息,调用服务。它封装了底层的操作流程,方便我们去写代码,去调用。
客户端库有多个版本:roscpp、rospy、roslisp
上面两讲讲了roscpp,这一讲会提到rospy。rospy接口主要包括了Node、Topic、Service、Parameter、Time几个类别。
函数
init_node(name) # 注册和初始化node
import rospy
rospy.init_node('my_node') # 没有返回值
MasterProxy
bool
str
函数
[[str1, str2]] get_published_topics() #返回正在被发布的所有topic名称(str1)和类型(str2)
Message
wait_for_message(topic, topic_type, time_out=None) # 等待指定topic的一个msg
spin() # 触发topic或service的处理,会阻塞直到关闭
Publisher类
pub = rospy.Publisher('topic_name','topic_type',queue_size=None) #size=None相当于同步通信,大于零会为异步通信
pub.publish(msg)
Subscriber类
函数
wait_for_service(service,timeout=None) # 阻塞直到服务可用
Service类 --> server相关
_init_(self, name, service_class, handler) # 构造函数 提供服务
shutdown(self) # 成员函数 关闭服务
handler case:
def handler(req):
pass
return res #只传入请求,只传出响应
ServiceProxy类 --> client相关
__init__(self, name, service_class) # 构造函数 服务的请求方
Response
client = ServiceProxy(...) //构造函数
client.call(req)
#或者
resp = client(req)
函数
XmlRpcLegalValue
[str]
bool
str
Time类 --> 指时刻
__init__(self, secs=0, nsecs = 0) # 构造函数
Time now() # 静态方法 返回当前时刻的Time对象
case:
rospy.Time(secs = 1, nsecs = 0)
# or
rospy.Time.now()
Duration类 --> 指一段时间
__init__(self, secs = 0, nsecs = 0) # 构造函数 秒和纳秒
注意 : 时间,时刻的加减操作得出结果可能不同,且两个时刻不可以相加减。
函数
Time
float
Rate类
__init__(self, frequency) # 构造函数
sleep(self) # 挂起 考虑上一次的rate.sleep() 的时间
Time
转载请注明出处。
本文总结于中国大学MOOC《机器人操作系统入门》
链接: link.
图片来自于课程视频截图