-
Notifications
You must be signed in to change notification settings - Fork 22
ROS installation and setup for Raspberry Pi
Here, we install ROS(Robot Operating System) to Raspberry Pi and make a simple publisher and subscriber on catkin_ws.
ROS (Robot Operating System) provides libraries and tools to help software developers create robot applications. It provides hardware abstraction, device drivers, libraries, visualizers, message-passing, package management, and more. ROS is licensed under an open source, BSD license.
If you are not familiar with ROS, please read the Start guide and Tutorials first.
It can be installed by following Ubuntu ARM install of ROS Indigo
After you installed ROS, next step is setting up catkin workspace.
Let's make catkin workspace by following Creating a workspace for catkin.
Then, let's make a new package on catkin_ws. (Creating a ROS Package)
After creating a catkin_ws, move to src folder.
# You should have created this in the Creating a Workspace Tutorial
$ cd ~/catkin_ws/src
Now use the catkin_create_pkg script to create a new package called 'beginner_tutorials' which depends on std_msgs, roscpp, and rospy:
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
This will create a beginner_tutorials folder which contains a package.xml and a CMakeLists.txt, which have been partially filled out with the information you gave catkin_create_pkg.
Now you need to build the packages in the catkin workspace:
$ cd ~/catkin_ws
$ catkin_make
To add the workspace to your ROS environment you need to source the generated setup file:
$ . ~/catkin_ws/devel/setup.bash
It would be convenient to add this command to your ~/.bashrc
$ echo 'source ~/catkin_ws/devel/setup.bash' >> ~/.bashrc
Now, you have made a new package 'beginer_tutorial'
Please see Creating a ROS Package
for more detailed information.
Next step is to make a simple program that send messages and receive messages. Writing a Simple Publisher and Subscriber (Python)
"Node" is the ROS term for an executable that is connected to the ROS network. Here we'll create the publisher ("talker") node which will continually broadcast a message.
Change directory into the beginner_tutorials package
$ roscd beginner_tutorials
First lets create a 'scripts' folder to store our Python scripts in:
$ mkdir scripts
$ cd scripts
Then download the example script talker.py to your new scripts directory and make it executable:
$ wget https://raw.github.com/ros/ros_tutorials/kinetic-devel/rospy_tutorials/001_talker_listener/talker.py
$ chmod +x talker.py
You can view and edit the file with $ rosed beginner_tutorials talker.py
or just look below.
#!/usr/bin/env python
# license removed for brevity
import rospy
from std_msgs.msg import String
def talker():
pub = rospy.Publisher('chatter', String, queue_size=10)
rospy.init_node('talker', anonymous=True)
rate = rospy.Rate(10) # 10hz
while not rospy.is_shutdown():
hello_str = "hello world %s" % rospy.get_time()
rospy.loginfo(hello_str)
pub.publish(hello_str)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
See the explanation of this code here
Download the listener.py file into your scripts directory:
$ roscd beginner_tutorials/scripts/
$ wget https://raw.github.com/ros/ros_tutorials/kinetic-devel/rospy_tutorials/001_talker_listener/listener.py
Don't forget to make the node executable:
$ chmod +x listener.py
The code looks like
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def callback(data):
rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)
def listener():
# In ROS, nodes are uniquely named. If two nodes with the same
# node are launched, the previous one is kicked off. The
# anonymous=True flag means that rospy will choose a unique
# name for our 'listener' node so that multiple listeners can
# run simultaneously.
rospy.init_node('listener', anonymous=True)
rospy.Subscriber("chatter", String, callback)
# spin() simply keeps python from exiting until this node is stopped
rospy.spin()
if __name__ == '__main__':
listener()
See the explanation of this code here again.
We use CMake as our build system and, yes, you have to use it even for Python nodes. This is to make sure that the autogenerated Python code for messages and services is created.
Go to your catkin workspace and run catkin_make:
$ cd ~/catkin_ws
$ catkin_make
#Examining the Simple Publisher and Subscriber
Make sure that a roscore is up and running:
$ roscore
In the last tutorial we made a publisher called "talker". Let's run it:
$ rosrun beginner_tutorials talker.py
You will see something similar to:
[INFO] [WallTime: 1314931831.774057] hello world 1314931831.77
[INFO] [WallTime: 1314931832.775497] hello world 1314931832.77
[INFO] [WallTime: 1314931833.778937] hello world 1314931833.78
[INFO] [WallTime: 1314931834.782059] hello world 1314931834.78
[INFO] [WallTime: 1314931835.784853] hello world 1314931835.78
[INFO] [WallTime: 1314931836.788106] hello world 1314931836.79
In the last tutorial we made a subscriber called "listener". Let's run it:
$ rosrun beginner_tutorials listener.py
You will see something similar to:
[INFO] [WallTime: 1314931969.258941] /listener_17657_1314931968795I heard hello world 1314931969.26
[INFO] [WallTime: 1314931970.262246] /listener_17657_1314931968795I heard hello world 1314931970.26
[INFO] [WallTime: 1314931971.266348] /listener_17657_1314931968795I heard hello world 1314931971.26
[INFO] [WallTime: 1314931972.270429] /listener_17657_1314931968795I heard hello world 1314931972.27
[INFO] [WallTime: 1314931973.274382] /listener_17657_1314931968795I heard hello world 1314931973.27
[INFO] [WallTime: 1314931974.277694] /listener_17657_1314931968795I heard hello world 1314931974.28
[INFO] [WallTime: 1314931975.283708] /listener_17657_1314931968795I heard hello world 1314931975.28
Now that you have examined the simple publisher and subscriber