python程序间的方法调用
-
我想要在follow函数中调用color函数的callback方法,并准确接收其返回值
以下是color程序
#!/usr/bin/env python #-*- coding: utf-8 -*- import sys import rospy import time import cv2 from std_msgs.msg import String from sensor_msgs.msg import Image from cv_bridge import CvBridge, CvBridgeError import numpy as np from sensor_msgs.msg import CompressedImage from geometry_msgs.msg import Twist, Vector3 #图像处理器 class image_converter: def __init__(self): # 定义处理前图像订阅器 self.image_sub = rospy.Subscriber("/camera/image_raw",Image,self.callback) # 定义处理后图像发布器 self.image_pub = rospy.Publisher("/image_topic_2",Image, queue_size =3) # 定义原图和opencv图转换器 self.bridge = CvBridge() def callback(self,data): **想要调用的callback函数** # 将原图转为opencv图 try: frame = self.bridge.imgmsg_to_cv2(data, "bgr8") except CvBridgeError as e: print(e) #HSV空间 """ hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) # print(hsv[100,100][2]) for i in range(26): for j in range(26): h = hsv[i,j][0] s = hsv[i,j][1] v = hsv[i,j][2] if h >= 0 and h <= 10 and s >= 43 and v >= 46: return 1 elif h >= 156 and h <= 180 and s >= 43 and v >= 46: return 1 else: return 0
以下是follow程序
#!/usr/bin/env python #-*- coding: utf-8 -*- import rospy import time from geometry_msgs.msg import Twist from sensor_msgs.msg import LaserScan from color import image_converter def scan_callback(msg): cmd_vel_pub = rospy.Publisher('cmd_vel', Twist, queue_size=1) scan_sub = rospy.Subscriber('scan', LaserScan, scan_callback) rospy.init_node('follow_the_wall') command = Twist() rate = rospy.Rate(10) while not rospy.is_shutdown(): find = image_converter.callback() **想在这调用** if find == 1: print("找到目标了.") else: print("没发现目标.")
为了简洁follow函数里面很多用于控制机器人运动的变量已经删去
我感觉问题的关键应该在于怎么在follow程序里面获得参数传过去 -
@keyizhang
callback
函数不建议你直接调用,是提供给ROS做回调函数。第二点的意思新建一个队列,把数据放到队列。用的时候取出来做处理。queue使用很简单:
from queue import Queue data_queue = Queue() def callback(): data_queue.put(data) def get_data(): global data_queue return data_queue.get()
-
@keyizhang color是一个py文件吧,不是函数。可以用文件名,代码的形式描述。
代码块语法是前后各三个`,包裹的。
比如下面这样code_text
没理解(猜)错。你想在follow.py中调用color.py中的callback函数,拿到其返回值对吗?
类似于这种比较好的解决方案有
- 在color.py中将处理结果发布,follow.py中订阅
- 在color.py用queue将结果(其实最好是图片)存储起来,单独写一个函数用于获取结果。
-
第一点我有想过这个方法
第二点我不太清楚
请问不可以直接在follow里面调用 然后把结果return回去吗
-
@小鱼我觉得如果可以直接返回好像更简单一些
-
@keyizhang
callback
函数不建议你直接调用,是提供给ROS做回调函数。第二点的意思新建一个队列,把数据放到队列。用的时候取出来做处理。queue使用很简单:
from queue import Queue data_queue = Queue() def callback(): data_queue.put(data) def get_data(): global data_queue return data_queue.get()
-
@小鱼 好的那我试试看 谢谢小鱼
-
-