#!/usr/bin/env python
import rospy
from geometry_msgs.msg import Twist
class MoveBB8():
def __init__(self):
self.bb8_vel_publisher = rospy.Publisher('/cmd_vel', Twist, queue_size=1)
self.cmd = Twist()
self.ctrl_c = False
self.rate = rospy.Rate(10) # 10hz
rospy.on_shutdown(self.shutdownhook)
def publish_once_in_cmd_vel(self):
"""
This is because publishing in topics sometimes fails the first time you publish.
In continuous publishing systems, this is no big deal, but in systems that publish only
once, it IS very important.
"""
while not self.ctrl_c:
connections = self.bb8_vel_publisher.get_num_connections()
if connections > 0:
self.bb8_vel_publisher.publish(self.cmd)
rospy.loginfo("Cmd Published")
break
else:
self.rate.sleep()
def shutdownhook(self):
# works better than the rospy.is_shutdown()
self.ctrl_c = True
def move_bb8(self, linear_speed=0.2, angular_speed=0.2):
self.cmd.linear.x = linear_speed
self.cmd.angular.z = angular_speed
rospy.loginfo("Moving BB8!")
self.publish_once_in_cmd_vel()
if __name__ == '__main__':
rospy.init_node('move_bb8_test', anonymous=True)
movebb8_object = MoveBB8()
try:
movebb8_object.move_bb8()
except rospy.ROSInterruptException:
pass
I am not able to understand the use of rospy.shutdown()?
what is the use of this function in general , and why it is being used here?
I would really appreciate if someone please help me here.