Content deleted Content added
→Versions and Releases: added that ROS2 D is expected in July 2019 |
Removing Melodic_Morenia.png; it has been deleted from Commons by Fitindia because: No permission since 23 January 2025. |
||
(6 intermediate revisions by 3 users not shown) | |||
Line 1:
{{under construction |placedby=[[User:ApprehensiveAndroid|ApprehensiveAndroid]] ([[User talk:ApprehensiveAndroid|talk]]) |section= |nosection= |nocat= |notready= |comment= |category= |altimage= }}
Line 23 ⟶ 22:
'''Robot Operating System''' ('''ROS or ros''') is [[robotics middleware]] (i.e. collection of [[software framework]]s for [[robot]] software development). Although ROS is not an [[operating system]], it provides services designed for a heterogeneous [[computer cluster]] such as [[hardware abstraction]], low-level [[Device driver|device control]], implementation of commonly used functionality, [[Inter-process communication|message-passing between processes]], and package management. Running sets of ROS-based processes are represented in a [[graph theory|graph]] architecture where processing takes place in nodes that may receive, post and multiplex sensor data, control, state, planning, actuator, and other messages. Despite the importance of reactivity and [[low latency]] in robot control, ROS itself is ''not'' a [[Real-time operating system|real-time OS]] (RTOS). It is possible, however, to integrate ROS with real-time code.<ref>ROS-Introduction http://wiki.ros.org/ROS/Introduction</ref> The lack of support for real-time systems has been addressed in the creation of ROS 2.0<ref>{{cite web|last1=Kay|first1=Jackie|title=Proposal for Implementation of Real-time Systems in ROS 2|url=http://design.ros2.org/articles/realtime_proposal.html|access-date=16 August 2016}}</ref><ref>{{cite web|last1=Kay|first1=Jackie|title=Realtime Design Guidelines For ROS 2|url=http://design.ros2.org/articles/realtime_background.html#design-guidelines-for-ros-2|website=design.ROS2.org|publisher=ROS2|access-date=22 November 2018}}</ref><ref>{{cite web|title=ROS 2 For Realtime Applications|url=https://discourse.ros.org/t/ros2-for-real-time-applications/6493|website=discourse.ROS.org|publisher=ROS|access-date=22 November 2018}}</ref>, a major revision of the ROS API which will take advantage of modern libraries and technologies for core ROS functionality and add support for real-time code and [[Embedded system|embedded hardware]].
Software in the ROS Ecosystem<ref>{{cite web|url=http://www.ros.org/browse/list.php|title=Browsing packages for melodic|last=|first=|date=|website=ROS.org|publisher=ROS|archive-url=|archive-date
* language-and platform-independent tools used for building and distributing ROS-based software;
* ROS client library implementations such as roscpp,<ref>{{cite web|title=Package Summary|url=http://wiki.ros.org/roscpp|website=ROS.org|publisher=ROS|accessdate=21 February 2016}}</ref> rospy,<ref>{{cite web|title=Package SUmmary|url=http://wiki.ros.org/rospy|website=ROS.org|publisher=ROS|accessdate=21 February 2016}}</ref> and roslisp;<ref>{{cite web|title=Package Summary|url=http://wiki.ros.org/roslisp|website=ROS.org|publisher=ROS|access-date=21 February 2016}}</ref>
Line 43 ⟶ 42:
In December 2008, Willow Garage met the first of their three internal milestones: continuous navigation for the PR2 over a period of two days and a distance of pi kilometers<ref>{{Citation|last=WillowGaragevideo|title=Milestone 1|date=2008-12-19|url=https://www.youtube.com/watch?v=iGoqYm7-NkQ|access-date=2019-04-29}}</ref>. Soon after, an early version of ROS (0.4 Mango Tango)<ref>{{Cite web|url=http://www.ros.org/news/2009/02/ros-04-release.html|title=ROS 0.4 Release - ROS robotics news|website=www.ros.org|access-date=2019-04-29}}</ref> was released, followed by the first RVIZ documentation and the first paper on ROS<ref name="Quigley-ROS" />. In early summer, the second internal milestone: having the PR2 navigate the office, open doors, and plug itself it in, was reached<ref>{{Citation|last=WillowGaragevideo|title=Milestone 2 Explained|date=2009-07-02|url=https://www.youtube.com/watch?v=I1emTXIzhZw|access-date=2019-04-29}}</ref>. This was followed in August by the initiation of the ROS.org website<ref>{{cite web|url=http://www.ros.org/news/2009/08/welcome-to-ros-org.html|title=Welcome to ros.org - ROS robotics news|website=www.ROS.org|access-date=12 December 2017}}</ref>. Early tutorials on ROS were posted in December<ref>{{cite web|url=http://www.ros.org/news/2009/12/ros-tutorials-and-turtles.html|title=ROS Tutorials and Turtles - ROS robotics news|website=www.ROS.org|access-date=12 December 2017}}</ref>, preparing for the release of ROS 1.0, in January of 2010<ref>{{Cite web|url=http://www.ros.org/news/2010/01/ros-10.html|title=ROS 1.0 - ROS robotics news|website=www.ros.org|access-date=2019-04-29}}</ref>. This was Milestone 3: producing tons of documentation and tutorials for the enormous capabilities that Willow Garage’s engineers had developed over the preceding 3 years.
Following this, Willow Garage achieved one of its longest held goals: giving away 10 PR2 robots to worthy academic institutions. This had long been a goal of the founders, as they felt that the PR2 could kick-start robotics research around the world. They ended up awarding eleven PR2s to different institutions, including [[University of Freiburg|University of Freiburg (Germany)]], [[Robert Bosch GmbH|Bosch]], [[Georgia Institute of Technology|Georgia Tech]], [[KU Leuven|KU Leuven (Belgium)]], [[Massachusetts Institute of Technology|MIT,]] [[Stanford University|Stanford]], [[Technical University of Munich|TU Munich (Germany)]], [[University of California, Berkeley|UC Berkeley]], [[University of Pennsylvania|U Penn]], [[University of Southern California|USC]], and [[University of Tokyo|University of Tokyo (Japan)]]<ref>{{Cite web|url=http://www.willowgarage.com/blog/2010/05/04/pr2-beta-program-recipients|title=The Results Are In: PR2 Beta Program Recipients! {{!}} Willow Garage|website=www.willowgarage.com|access-date=2019-04-29}}</ref>. This, combined with Willow Garage’s highly successful internship program<ref>{{Cite web|url=http://www.willowgarage.com/pages/community/interns-and-visiting-scholars|title=Interns and Visiting Scholars {{!}} Willow Garage|website=www.willowgarage.com|access-date=2019-04-29}}</ref> (run from 2008-2010 by [[Melonee Wise]]), helped to spread the word about ROS throughout the robotics world. The first official ROS distribution release: ROS Box Turtle, was released on March 2nd of 2010, marking the first time that ROS was official distributed with a set of versioned packages for public use. These developments lead to the first drone running ROS<ref>{{cite web|url=http://www.ros.org/news/2010/05/robots-using-ros-penn-quadrotors.html|title=Robots Using ROS: Penn Quadrotors - ROS robotics news|website=www.ROS.org|access-date=12 December 2017}}</ref>, the first autonomous car running ROS<ref>{{cite web|url=http://www.ros.org/news/2010/03/robots-using-ros-marvin-autonomous-car.html|title=Robots Using ROS: Marvin autonomous car (Austin Robot Technology/UT Austin) - ROS robotics news|website=www.ROS.org|access-date=12 December 2017}}</ref>, and the adaption of ROS for [[Lego Mindstorms]]<ref>{{cite web|url=http://www.ros.org/news/2010/08/robots-using-ros-lego-nxt.html|title=Robots Using ROS: Lego NXT - ROS robotics news|website=www.ROS.org|access-date=12 December 2017}}</ref>. With the PR2 Beta program well underway, the PR2 robot was officially released for commercial purchase on September 9th, 2010<ref>{{Cite web|url=http://www.willowgarage.com/blog/2010/09/07/pr2-pricing-and-open-source-discount|title=PR2 Robots Available for Purchase|last=|first=|date=|website=|archive-url=|archive-date
[[File:ROS Antarctica sunset.jpg|thumb|An image of Robot Operating System (ROS) running in Antarctica.]]
2011 was a banner year for ROS with the launch of ROS Answers, a Q/A forum for ROS users, on February 15th<ref>{{cite web|url=http://www.ros.org/news/2011/02/announcing-ros-answers.html|title=Announcing ROS Answers - ROS robotics news|website=www.ROS.org|access-date=12 December 2017}}</ref>; the introduction of the highly successful Turtlebot robot kit on April 18th<ref>{{cite web|url=http://www.willowgarage.com/blog/2011/04/18/turtlebots-available-preorder|title=ROS on the Move: TurtleBots available for preorder - Willow Garage|website=www.WillowGarage.com|access-date=12 December 2017}}</ref>; and the total number of ROS repositories passing 100 on May 5th<ref>{{cite web|url=http://www.ros.org/news/2011/05/100-repositories.html|title=100 Repositories - ROS robotics news|website=www.ROS.org|access-date=12 December 2017}}</ref>. Willow Garage began 2012 by creating the [[Open Source Robotics Foundation]] (OSRF)<ref>{{Cite web|url=http://www.willowgarage.com/blog/2012/04/16/open-source-robotics-foundation|title=Willow Garage Spins Out OSRF|last=|first=|date=|website=|archive-url=|archive-date
In February of 2013, the OSRF became the primary software maintainers for ROS<ref>{{cite web|url=http://osrfoundation.org/blog/ros-at-osrf.html|title=Osrf - Ros @ Osrf|date=2013-02-11|publisher=Osrfoundation.org|accessdate=2014-07-12}}</ref>, foreshadowing the announcement in August that Willow Garage would be absorbed by its founders, [[Suitable Technologies]]<ref>{{cite web|url=http://www.willowgarage.com/blog/2013/08/21/willow-garage-employees-join-suitable-technologies|title=employees join Suitable Technologies|date=|publisher=Willow Garage|accessdate=2014-07-12}}</ref>. At this point, ROS had released seven major versions (up to ROS Groovy<ref name=":1">{{Cite web|url=http://wiki.ros.org/Distributions|title=Distributions - ROS Wiki|website=wiki.ros.org|access-date=2019-04-29}}</ref>), and had users all over the globe. This chapter of ROS development would be finalized when [[Clearpath Robotics|ClearPath Robotics]] took over support responsibilities for the PR2 in early 2014<ref>{{Cite web|url=https://www.clearpathrobotics.com/2014/01/clearpath-welcomes-pr2/|title=Clearpath Welcomes PR2 to the Family|last=|first=|date=|website=|archive-url=|archive-date
=== OSRF and Open Robotics (2013-Present) ===
In the years since OSRF took over primary development of ROS, a new version has been released every year<ref name=":1" />, while interest in ROS continues to grow. ROSCons have occurred every year since 2012,co-located with either [[International Conference on Robotics and Automation|ICRA]] or [[International Conference On Intelligent Robots and Systems|IROS,]] two flagship robotics conferences. Meetups of ROS developers have been organized in a variety of countries<ref>[http://www.ros.org/news/2015/01/notes-from-the-first-korean-ros-users-meetup.html ROS meetup in Korea]</ref><ref>{{Cite web|url=http://www.ros.org/news/2016/01/invitation-to-the-first-danish-ros-meetup.html|title=First Danish ROS Meetup|last=|first=|date=|website=|archive-url=|archive-date
Perhaps the most important development of the OSRF/Open Robotics years thus far (not to discount the explosion of robot platforms which began to support ROS or the enormous improvements in each ROS version) was the proposal of ROS2, a significant API change to ROS which is intended to support [[Real-time computing|real time programming]], a wider variety of computing environments, and utilize more modern technology<ref>{{Cite web|url=http://design.ros2.org/articles/why_ros2.html|title=Why ROS 2.0?|website=design.ros2.org|access-date=2019-04-29}}</ref>. ROS2 was announced at ROSCon 2014<ref>{{Cite web|url=https://index.ros.org/doc/ros2/|title=ROS2 Overview|website=index.ros.org|access-date=2019-04-29}}</ref>, the first commits to the ros2 repository were made in February 2015, followed by alpha releases in August 2015<ref name=":2">{{Cite web|url=https://index.ros.org/doc/ros2/Releases/|title=ROS 2 Distributions|website=index.ros.org|access-date=2019-04-29}}</ref>. The first distribution release of ROS2, Ardent Apalone, was released on December 8th, 2017<ref name=":2" />, ushering in a new era of next-generation ROS development.
==Design==
=== Philosophy ===
[[File:Ros Equation.png|thumb|An image depicting the ROS equation: Plumbing + Tools + Capabilities + Ecosystem = ROS!|alt=An image depicting the ROS equation: Plumbing + Tools + Capabilities + Ecosystem = ROS!|500x500px]]
ROS was designed with open-source in mind, intending that users would be able to chose the configuration of tools and libraries which interacted with the core of ROS so that users could shift their software stacks to fit their robot and application area. As such, there is very little which is actually core to ROS, beyond the general structure within which programs must exist and communicate. In one sense, all ROS is is the underlying plumbing behind nodes and message passing. However, in reality, ROS is that plumbing, a rich and mature set of tools, a wide ranging set of robot-agnostic capabilities provided by packages, and a greater ecosystem of additions to ROS.
=== Computation Graph Model ===
ROS processes are represented as nodes in a graph structure, connected by edges called topics.<ref name=":3">{{Cite web|url=http://wiki.ros.org/ROS/Tutorials/UnderstandingNodes|title=ROS/Tutorials/UnderstandingNodes - ROS Wiki|website=wiki.ros.org|access-date=2019-04-29}}</ref> ROS nodes can pass messages to on another through topics, make service calls to other nodes, provide a service for other nodes, or set or retrieve shared data from a communal database called the parameter server. A process called the ROS Master<ref name=":3" /> makes all of this possible by registering nodes to itself, setting up node-to-node communication for topics, and controlling parameter server updates. Messages and service calls do not pass through the master, rather the master sets up peer-to-peer communication between all node processes after they register themselves with the master. This decentralized architecture lends itself well to robots, which are often comprise of a subset of networked computer hardware, and may communicate with off board computers for heavy computation or commands.
==== Nodes ====
A node represents a single process running the ROS graph. Every node has a name, which it registers with the ROS master before it can take any other actions. Multiple nodes with different names can exist under different [[Namespace|namespaces]], or a node can be defined as anonymous, in which case it will randomly generate an additional identifier to add to its given name. Nodes are at the center of ROS programming, as most ROS client code is in the form of a ROS node which takes actions based on information received from other nodes, sends information to other nodes, or sends and receives requests for actions to and from other nodes.
==== Topics ====
Topics are named [[Software bus|buses]] over which nodes send and receive messages.<ref>{{Cite web|url=http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics|title=ROS/Tutorials/UnderstandingTopics - ROS Wiki|website=wiki.ros.org|access-date=2019-04-29}}</ref> Topic names must be unique within their namespace as well. To send messages to a topic, a node must publish to said topic, while to receive messages it must subscribe. The publish/subscribe model is anonymous: no node knows which nodes are sending or receiving on a topic, only that it is sending/receiving on that topic. The types of messages passed on a topic vary widely and can be user-defined. The content of these messages can be sensor data, motor control commands, state information, actuator commands, or anything else.
==== Services ====
A node may also advertise services<ref name=":4">{{Cite web|url=http://wiki.ros.org/ROS/Tutorials/UnderstandingServicesParams|title=ROS/Tutorials/UnderstandingServicesParams - ROS Wiki|website=wiki.ros.org|access-date=2019-04-29}}</ref>. A service represents an action that a node can take which will have a single result. As such, services are often used for actions which have a defined beginning and end, such as capturing a single-frame image, rather than processing velocity commands to a wheel motor or odometer data from a wheel encoder. Nodes advertise services and call services from one another.
==== Parameter Server ====
The parameter server<ref name=":4" /> is a database shared between nodes which allows for communal access to static or semi-static information. Data which does not change frequently and as such will be infrequently accessed, such as the distance between two fixed points in the environment, or the weight of the robot, are good candidates for storage in the parameter server.
==
ROS's core functionality is augmented by a variety of tools which allow developers to visualize and record data, easily navigate the ROS package structures, and create scripts automating complex configuration and setup processes. The addition of these tools greatly increases the capabilities of systems using ROS by simplifying and providing solutions to a number of common robotics development. These tools are provided in packages like any other algorithm, but rather than providing implementations of hardware drivers or algorithms for various robotic tasks, these packages provide task and robot-agnostic tools which come with the core of most modern ROS installations.
Line 71 ⟶ 85:
=== catkin ===
catkin<ref>{{Cite web|url=http://wiki.ros.org/catkin|title=catkin - ROS Wiki|last=|first=|date=|website=wiki.ros.org|archive-url=|archive-date
===rosbash===
Line 79 ⟶ 93:
roslaunch<ref>{{Cite web|url=http://wiki.ros.org/roslaunch|title=roslaunch - ROS Wiki|website=wiki.ros.org|access-date=2019-04-23}}</ref> is a tool used to launch multiple ROS nodes both locally and remotely, as well as setting parameters on the ROS parameter server. roslaunch configuration files, which are written using [[XML]] can easily automate a complex startup and configuration process into a single command. roslaunch scripts can include other roslaunch scripts, launch nodes on specific machines, and even restart processes which die during execution.
==
ROS contains many open source implementations of common robotics functionality and algorithms. These open source implementations are organized into "packages". Many packages are included as part of ROS distributions, while others may be developed by individuals and distributed through code sharing sites such as github. Some packages of note include:
Line 132 ⟶ 146:
|Melodic Morenia
|May 23, 2018
|
|{{Version|c|2023-05-30}}
|-
Line 208 ⟶ 222:
|Crystal Clemmys
|December 14th, 2018
|[[File:ROS Crystal Logo.png|75px|The logo for the ROS2 release Crystal Clemmys.
|{{Version|c|December 2019}}
|-
|