Draw a circle using Turtlesim in ROS-Python - GeeksforGeeks

27 Dec, 2021
In this article, we are going to see how to draw a circle using Turtlesim in ROS-Python. 
ROS stands for Robot Operating System. ROS is a set of libraries and tools that help build robot applications. It’s extensively used in robotics projects. ROS is an open-source, meta-operating system for robots. The software in the ROS ecosystem has both language-dependent and language-independent tools. ROS supports Python, C++, Lisp and other languages.
rospy is a pure Python client library ROS. We shall make use of this library to implement our code. Turtlesim is a common tool specifically made to teach ROS and ROS packages.
The idea is to import Twist from geometry_msgs.msg library and assign appropriate values for velocity components. Twist expresses the velocity of turtle in 3D space broken into 3 linear components and 3 angular components. Turtle here is 2D and is governed by 1 linear component (x-component) and 1 angular component (z-component). This is because the turtle cannot move in y or z directions. Hence. all other components are equated to 0. 
Step 1: First, import all the packages used in the program. rospy is a ROS-python library that contains different functions like creating a node, getting time, creating a publisher, etc.  The geometry_msgs library contains a useful variable type Twist which is used to describe velocity in 3D.
Python3
import rospyfrom geometry_msgs.msg import Twistimport sys
 Step 2: Next, we define our turtle_circle function, inside which we initiate our turtlesim node and our publisher. We also specify a rate equal to 10Hz, that is, the program goes through the loop 10 times per second. A Twist variable ‘vel’ is also created.
Python3
def turtle_circle(radius):    rospy.init_node('turtlesim', anonymous=True)    pub = rospy.Publisher('/turtle1/cmd_vel',                          Twist, queue_size=10)    rate = rospy.Rate(10)    vel = Twist()
Step 3: We now create a while loop that allows the turtle to run in a circle indefinitely. Inside the while loop, we provide the velocity components of the turtle appropriately as discussed above in the approach, and then publish them to the turtle. We also print the radius for each loop using rospy.loginfo() function. rate.sleep() is added at the end. rate object keeps track of the time since the last rate.sleep() was executed and sleeps for the correct amount of time to maintain a 10Hz frequency.
Python3
rospy.loginfo("Radius = %f", radius)pub.publish(vel)rate.sleep()
Step 4: Finally, we have the main loop which calls the function and handles exceptions if any exist:
Python3
if __name__ == '__main__':    try:        turtle_circle(float(sys.argv[1]))    except rospy.ROSInterruptException:        pass
Start ROS in the terminal using the command:
$ roscore
Start the turtlesim node on a new terminal using the command:
$ rosrun turtlesim turtlesim_node
Execute the program using the following command:
$ rosrun my_package turtlesim.py 2.0
Below is the implementation:
Python3
#!/usr/bin/env python# author : Sumanth Nethiimport rospyfrom geometry_msgs.msg import Twistimport sys  def turtle_circle(radius):    rospy.init_node('turtlesim', anonymous=True)    pub = rospy.Publisher('/turtle1/cmd_vel',                          Twist, queue_size=10)    rate = rospy.Rate(10)    vel = Twist()    while not rospy.is_shutdown():        vel.linear.x = radius        vel.linear.y = 0        vel.linear.z = 0        vel.angular.x = 0        vel.angular.y = 0        vel.angular.z = 1        rospy.loginfo("Radius = %f",                      radius)        pub.publish(vel)        rate.sleep()  if __name__ == '__main__':    try:        turtle_circle(float(sys.argv[1]))    except rospy.ROSInterruptException:        pass
Output:
kk773572498
python-modules
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
How to Install PIP on Windows ?
How to drop one or multiple columns in Pandas Dataframe
How To Convert Python Dictionary To JSON?
Check if element exists in list in Python
Selecting rows in pandas DataFrame based on conditions
Defaultdict in Python
Python | Get unique values from a list
Python | os.path.join() method
Create a directory in Python
Python | Split string into list of characters