美文网首页
rospy 和 roscpp 的区别以及 rospy 的常用函数

rospy 和 roscpp 的区别以及 rospy 的常用函数

作者: OurNote | 来源:发表于2019-03-19 21:30 被阅读0次

引言

rospy 是 Python 版本的 ROS 库 (library),提供了用 Python 编写 ROS 文件需要的接口和函数。roscpp 则是 C++ 版本的 ROS 库。在用 Python 或者 C++ 编写 ROS 文件时,都需要调用 rospy 或者 roscpp,使用其中包含的库函数实现特定的功能。

rospy 和 roscpp 之间的区别

rospy 包含的功能与 roscpp 相似,都有关于 nodetopicserviceparamtime 相关的操作。但同时 rospyroscpp 在使用时也有一些区别:

  1. rospy 没有一个 NodeHandle 类,创建 publishersubscriber 等操作都被直接封装成了 rospy 中的函数或类,调用起来简单直观。
  2. 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

相关文章

网友评论

      本文标题:rospy 和 roscpp 的区别以及 rospy 的常用函数

      本文链接:https://www.haomeiwen.com/subject/zycomqtx.html