ROS回调函数的类方法实现,both in Python 和 C++
来源:互联网 发布:网络运营公司简介 编辑:程序博客网 时间:2024/06/10 23:48
一、常用的回调函数的实现
C++版本
ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
python版本
rospy.Subscriber(topic, Image, callback, queue_size=1)
二、用类的方法实现回调函数
C++版本
class Listener{public: void callback(const std_msgs::String::ConstPtr& msg);};Listener listener;ros::Subscriber sub = n.subscribe("chatter", 1000, &Listener::callback, &listener);
python 版本
class RecordTopic: def __init__(self): rospy.Subscriber(topic, Image, self.callback, queue_size=1) def callback(self, imgmsg): #callbackif __name__=='__main__': rospy.init_node('node_name', anonymous=True) topic = sys.argv[1] record_topic = RecordTopic() rospy.spin()
三、特殊情况记录
在使用回调函数时,我有自己的一种方式,不知道会存在什么问题。不过我发现了一种特殊的现象,于是记录在这里。
首先,我的使用方式如下:
import rospyimport cv2from sensor_msgs.msg import Imagefrom cv_bridge import CvBridgeimport threadimport sysim = cv2.imread('')flag_im = Falsedef imSub(imgmsg): #回调函数, 仅用于更新图像信息 global im, flag_im bridge = CvBridge() im = bridge.imgmsg_to_cv2(imgmsg, 'bgr8') flag_im = Truedef call_rosspin(): print 'call_rosspin: running rosspin' rospy.spin()if __name__ == '__main__': argc = len(sys.argv) if argc < 2: print 'please input topicname' sys.exit() else: topicname = sys.argv[1] if argc == 2: filename = 'imsave.jpg' else: filename = argv[2] rospy.init_node('imsave') im_sub = rospy.Subscriber(topicname, Image, imSub) thread.start_new_thread(call_rosspin, ()) #使用多线程的方式调用回调函数,更新图像 key = 100 cv2.namedWindow('im') while key != ord('q'): #主循环,做需要进行的工作 if flag_im: flag_im = False cv2.imshow('im', im) key = cv2.waitKey(1) key = key&0xFF if key == ord('s'): cv2.imwrite(filename, im) print 'pic is saved as', filename
发现的问题
以上面多线程的使用方式,图像显示更具有实时性;而以常规方式实现的回调函数,看到的画面会有一定时间的延迟。
阅读全文
0 0
- ROS回调函数的类方法实现,both in Python 和 C++
- python 回调函数和回调方法的实现
- python 回调函数和回调方法的实现
- python异步回调函数的实现
- python如何调用C, 如何注册成C的回调函数(python后台程序常用方法)
- python如何调用C, 如何注册成C的回调函数(python后台程序常用方法)
- PHP回调函数的实现方法
- PHP回调函数的实现方法
- PHP回调函数的实现方法
- PHP回调函数的实现方法
- 回调函数 c实现
- ROS学习之 cpp回调函数和轮转(spin)
- python的回调函数
- Objective-C利用协议实现回调函数(类似java的回调函数)
- Objective-C利用协议实现回调函数(类似java的回调函数)
- Objective-C利用协议实现回调函数(类似java的回调函数)
- [iOS]Objective-C利用协议实现回调函数(类似java的回调函数)
- [iOS]Objective-C利用协议实现回调函数(类似java的回调函数)
- ElasticSearch集群搭建及插件安装
- JQuery实现对select选择框的赋值
- vueJs2.0学习笔记(三)
- windows下zabbix客户端批处理
- 从拉格朗日乘子法到SVM
- ROS回调函数的类方法实现,both in Python 和 C++
- 【path-sum】
- Pointers on C——9 Strings, Characters, and Bytes.6
- 回音消除技术概述
- Mybatis + SqlServer 数据库操作insert 时获取当前主键值
- dom4j(XML解析)私人学习笔记
- Pointers on C——9 Strings, Characters, and Bytes.7
- Python内置类型性能分析
- redis config的配置