引言
rospy
是 Python 版本的 ROS 库 (library),提供了用 Python 编写 ROS 文件需要的接口和函数。roscpp
则是 C++ 版本的 ROS 库。在用 Python 或者 C++ 编写 ROS 文件时,都需要调用 rospy
或者 roscpp
,使用其中包含的库函数实现特定的功能。
rospy 和 roscpp 之间的区别
rospy
包含的功能与 roscpp
相似,都有关于 node
、topic
、service
、param
、time
相关的操作。但同时 rospy
和 roscpp
在使用时也有一些区别:
-
rospy
没有一个NodeHandle
类,创建publisher
、subscriber
等操作都被直接封装成了rospy
中的函数或类,调用起来简单直观。 -
rospy
一些接口的命名和roscpp
不完全相同,所以在用不同的语言编写 ROS 文件时,还是要小心,不能想当然的照搬。
相比于 C++,用 Python 编写 ROS 程序的效率比较高,但是运行时的效率比较低。因此一个 ROS 程序到底是用 Python 写还是用 C++ 写,取决于程序本身的要求。像编写 SLAM、路径规划、机器视觉等方面的算法时,往往优先选择 C++,因为这些程序运算量比较大,对实时性要求又比较高。对于功能较简单的 ROS 程序,可以优先考虑用 Python,编写、修改都比较简单,而且不需要编译,附加工作少很多。
常用的 rospy API
这里简单列举了一些 rospy 的常用函数与类,更详细的 API 可以查看http://docs.ros.org/api/rospy/html/rospy-module.html
Node 相关
返回值 | 方法 | 作用 |
---|---|---|
init_node(name,argv=None,anonymous=False) | 注册和初始化node | |
MasterProxy | get_master() | 获取master的句柄 |
bool | is_shutdown() | 节点是否关闭 |
on_shutdown(func) | 在节点关闭时调用func函数 | |
str | get_node_uri() | 返回节点的URI |
str | get_name() | 返回本节点的全名 |
str | get_namespace() | 返回本节点的命名空间 (namespace) |
Topic 相关
返回值 | 方法 | 作用 |
---|---|---|
[[str, str]] | get_published_topics() | 返回正在被发布的所有 topic名称和类型 |
Message | wait_for_message(topic,topic_type,time_out=None) | 等待某个 topic 的 message |
spin() | 触发 topic 或 service 的回调/处理函数,会阻塞后边的程序直到关闭节点 |
Publisher 类
返回值 | 方法 | 作用 |
---|---|---|
init(self,name,data_class,queue_size=None) | 构造函数 | |
publish(self, msg) | 发布消息 | |
str | unregister(self) | 停止发布 |
Subscriber 类
返回值 | 方法 | 作用 |
---|---|---|
init(self,name,data_class,call_back=None,queue_size=None) | 构造函数 | |
unregister(self,msg) | 停止订阅 |
Service相关
返回值 | 方法 | 作用 |
---|---|---|
wait_for_service(service,timeout=None) | 阻塞直到服务可用 |
Service类(server):
返回值 | 方法 | 作用 |
---|---|---|
init(self,name,service_class,handler) | 构造函数,handler为处理函数,service_class为srv类型 | |
shutdown(self) | 关闭服务的server |
ServiceProxy类(client):
返回值 | 方法 | 作用 |
---|---|---|
init(self,name,service_class) | 构造函数,创建client | |
call(self,args,*kwds) | 发起请求 | |
close(self) | 关闭服务的client |
Param 相关
返回值 | 方法 | 作用 |
---|---|---|
XmlRpcLegalValue | get_param(param_name,default=_unspecified) | 获取参数的值 |
[str] | get_param_names() | 获取参数的名称 |
set_param(param_name,param_value) | 设置参数的值 | |
delete_param(param_name) | 删除参数 | |
bool | has_param(param_name) | 参数是否存在于参数服务器上 |
str | search_param() | 搜索参数 |
时钟相关
返回值 | 方法 | 作用 |
---|---|---|
Time | get_rostime() | 获取当前时刻的Time对象 |
float | get_time() | 返回当前时间,单位秒 |
sleep(duration) | 执行挂起 |
Time类
返回值 | 方法 | 作用 |
---|---|---|
init(self,secs=0,nsecs=0) | 构造函数 | |
Time | now() | 静态方法 返回当前时刻的Time对象 |
Duration类
返回值 | 方法 | 作用 |
---|---|---|
init(self,secs=0,nsecs=0) | 构造函数 |
Written by SH
Revised by QP
网友评论