Cyber-Physical Systems Lab @ ASU Professor Georgios Fainekos Presnted by Ramtin Kermani ROS: the motivation What is ROS? Robot Operating System (ROS) is an open source software framework for robot software development, providing operating system-like functionality on a heterogeneous computer cluster ROS provides standard operating system services such as hardware abstraction, (USB drive) low-level device control, implementation of commonly-used functionality, message-passing between processes, and package management provides tools and libraries for obtaining, building, writing, and running code across multiple computers What is ROS? Originally developed by the Stanford Artificial Intelligence Laboratory in 2007 In Custody of WillowGarage since then ROS is similar in some respects to 'robot frameworks,' such as Player, YARP, Orocos, CARMEN, Orca, MOOS, and Microsoft Robotics Studio Hobby Robotics Evolution Micro Controller Brain Sumo Line follower Maze solver Firefighting ... Higher level logic benefits from PC Magellan Robot arm ... Higher level logic requires PC LEAF SLAM … But soon you hit a ceiling since ... You develop: Your own logging You write your own messaging infrastructure (protocols) Your own coordinate system transformations Your own joystick driver Your own basic navigation logic Your own basic vision system ... And you never catch up! Why ROS? Writing low level code for robotic apps is cumbersome! Ability to reuse components Open Source Your App is interfaced with the OS not the Hardware A small Core-package, the rest Distributed Open Packages Growing Community ROS enables groups of people to work on complex projects by providing a common and well organized framework, while adding a minimal amount of overhead Has a rich set of bash commands: roscd, rospack, rosmake, rosnode, rostopic $roscd iRobot_package Language independence (RosCPP, RosPY,etc) Easy Testing ROS availability ROS currently only runs on Unix-based platforms. Software for ROS is primarily tested on Ubuntu and Mac OS X systems, though the ROS community has been contributing support for Fedora, Gentoo, Arch Linux and other Linux platforms. While a port to Microsoft Windows for ROS is possible, it has not yet been fully explored. ROS Conecpts: ROS Filesystem Level ROS Computation Graph Level ROS Community Level ROS Filesystem Level Packages: Packages are the main unit for organizing software in ROS. A package may contain ROS runtime processes (nodes), a ROS-dependent library, datasets, configuration files, or anything else that is usefully organized together. Manifests: Manifests (manifest.xml) provide metadata about a package. Stacks: Stacks are collections of packages that provide aggregate functionality, such as a "navigation stack Stack Manifests: Stack manifests (stack.xml) provide data about a stack. Message (msg) types: Message descriptions define the data structures for messages sent in ROS. Service (srv) types: Service descriptions define the request and response data structures for services in ROS. ROS File system ROS Computation Graph Level Nodes: Nodes are processes that perform computation.A ROS node is written with the use of a ROS client library, such as roscpp or rospy. Master: The ROS Master provides name registration and lookup to the rest of the Computation Graph. Without the Master, nodes would not be able to find each other, exchange messages, or invoke services. Parameter Server: The Parameter Server allows data to be stored by key in a central location. It is currently part of the Master. Messages: Nodes communicate with each other by passing messages. A message is simply a data structure, comprising typed fields. Standard primitive types (integer, floating point, boolean, etc.) are supported. Topics: Messages are routed via a transport system with publish / subscribe semantics. A node sends out a message by publishing it to a given topic. The topic is a name that is used to identify the content of the message. A node that is interested in a certain kind of data will subscribe to the appropriate topic. There may be multiple concurrent publishers and subscribers for a single topic, and a single node may publish and/or subscribe to multiple topics. For one-way transport Services: Request / Reply is done via services, which are defined by a pair of message structures: one for the request and one for the reply. Bags: Bags are a format for saving and playing back ROS message data. Bags are an important mechanism for storing data, such as sensor data, that can be difficult to collect but is necessary for developing and testing algorithms. ROS Computation Graph Level Notes The ROS Master acts as a nameservice in the ROS Computation Graph Nodes connect to other nodes directly Nodes are actually “Running Executables” ROS Community Level Distributions: ROS Distributions are collections of versioned stacks that you can install. Distributions play a similar role to Linux distributions: they make it easier to install a collection of software, and they also maintain consistent versions across a set of software. Repositories: ROS relies on a federated network of code repositories, where different institutions can develop and release their own robot software components. The ROS Wiki: The ROS community Wiki is the main forum for documenting information about ROS. Anyone can sign up for an account and contribute their own documentation, provide corrections or updates, write tutorials, and more. Bug Ticket System: Please see Tickets for information about file tickets. Mailing Lists: ROS Community Level A ROS Architecture A Sample ROS graph Communication Graph (rsgraph) How ROS works? The ROS runtime “Graph" is a peer-to-peer network of processes that are loosely coupled using the ROS communication infrastructure. Communication Infrastructure: synchronous RPC-style communication over Services, Asynchronous streaming of data over Topics, Storage of data on a Parameter Server ROS References: www.ros.org http://www.ros.org/wiki/ROS/Tutorials http://www.ros.org/wiki http://en.wikipedia.org/wiki/ROS_(Robot_Operatin g_System) http://hades.mech.northwestern.edu/index.php/Ro bot_Operating_System http://www.hessmer.org/blog/wp-content/uploads/2011/02/ROS_Introduction_Slides.pdf http://pixhawk.ethz.ch/wiki/toolchain/ros/start Questions?