【发布时间】:2019-11-26 16:44:48
【问题描述】:
if __name__ == '__main__':
rospy.init_node('gray')
settings = termios.tcgetattr(sys.stdin)
pub = rospy.Publisher('cmd_vel', Twist, queue_size=1)
x = 0
th = 0
node = Gray()
node.main()
我们在main中创建publisher(cmd_vel),运行gray类的main函数。
def __init__(self):
self.r = rospy.Rate(10)
self.selecting_sub_image = "compressed" # you can choose image type "compressed", "raw"
if self.selecting_sub_image == "compressed":
self._sub = rospy.Subscriber('/raspicam_node/image/compressed', CompressedImage, self.callback, queue_size=1)
else:
self._sub = rospy.Subscriber('/usb_cam/image_raw', Image, self.callback, queue_size=1)
self.bridge = CvBridge()
init 函数创建一个订阅者,它在获取数据时运行“回调”。
def main(self):
rospy.spin()
然后它运行 spin() 函数。
v, ang = vel_select(lvalue, rvalue, left_angle_num, right_angle_num, left_down, red_dots)
self.sendv(v, ang)
在回调函数内部,获取线速度和角速度值,并运行sendv函数发送给订阅者。
def sendv(self, lin_v, ang_v):
twist = Twist()
speed = rospy.get_param("~speed", 0.5)
turn = rospy.get_param("~turn", 1.0)
twist.linear.x = lin_v * speed
twist.angular.z = ang_v * turn
twist.linear.y, twist.linear.z, twist.angular.x, twist.angular.y = 0, 0, 0, 0
pub.publish(twist)
and... sendv 函数将其发送给turtlebot。 它必须不断地移动,因为如果我们不发布数据,它仍然必须以上次发布时的速度移动。另外,回调函数每 0.1 秒运行一次,所以它一直在发送数据。
但它不会连续移动。它停了几秒钟,然后走了很短的时间,然后又停了,又走了很短的时间,依此类推。选择速度的代码可以正常工作,但是发送给turtlebot的代码不能正常工作。有人可以帮忙吗?
【问题讨论】:
标签: callback delay ros publisher subscriber