ROS Crash Course 1
Transcript of ROS Crash Course 1
ROS Crash-Course, Part IIntroduction to ROS distribution, build system and infrastructure
Jonathan BohrenWith some information and figures adapted from http: // www. ros. org
and the COTESYS-ROS School 2010 presentation given by Radu Rusu
Outline
1 IntroductionHigh-LevelThe ROS EcosystemROS Community
2 ROS as a Communication PlatformThe ROS Network GraphRunning and Connecting NodesAnalyzing the System at Runtime
3 ROS as a Build PlatformDistribution & Package Management SystemBuild System
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 2 / 30
Introduction
Outline (revisted)
1 IntroductionHigh-LevelThe ROS EcosystemROS Community
2 ROS as a Communication PlatformThe ROS Network GraphRunning and Connecting NodesAnalyzing the System at Runtime
3 ROS as a Build PlatformDistribution & Package Management SystemBuild System
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 3 / 30
Introduction High-Level
What is ROS?More than just middleware
A “meta” operating system for robotsA collection of packaging, software building toolsAn architecture for distributed* inter-process/inter-machinecommunication and configurationDevelopment tools for system runtime and data analysisOpen-source under permissive BSD licenses (ros core libraries)A language-independent architecture (c++, python, lisp, java, andmore)A scalable platform (ARM CPUS to Xeon Clusters)
With the intent to enable researchers to rapidly develop new roboticsystems without having to “reinvent the wheel” through use of
standard tools and interfaces.
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 4 / 30
Introduction High-Level
What is ROS not?No confusion
An actual operating systemA programming languageA programming environment / IDEA hard real-time architecture*
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 5 / 30
Introduction The ROS Ecosystem
What does ROS get you?All levels of development
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 6 / 30
ROS
universe
maingeneral tools fordistributed computing
algorithmsframeworks
hardware drivers"robotic apps"
Maintained byWillow Garage, inc and
some external developers
Developed andmaintained bythe internationalROS community
Introduction The ROS Ecosystem
What does ROS get you?All levels of development
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 6 / 30
ROS
packaging & build tools,communication infrastructure,ROS API language bindings,introspection tools...
main
libraries
capabilities
applications
tf, opencv, pcl, kdl, cisst,simulation, drivers...
grasping, control,execution, navigation...
fetching beer,scraping the seafloor
ROS as a Communication Platform
Outline (revisted)
1 IntroductionHigh-LevelThe ROS EcosystemROS Community
2 ROS as a Communication PlatformThe ROS Network GraphRunning and Connecting NodesAnalyzing the System at Runtime
3 ROS as a Build PlatformDistribution & Package Management SystemBuild System
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 12 / 30
ROS as a Communication Platform The ROS Network Graph
ROS CoreWhere it all comes together
Thr ROS core is a set of the only three programs that are necessary for theROS runtime. They include:
ROS MasterA centralized XML-RPC serverNegotiates communication connectionsRegisters and looks up names for ROS graph resources
Parameter ServerStores persistent configuration parameters and other arbitrary datarosoutEssentially a network-based stdout for human-readable messages
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 13 / 30
ROS as a Communication Platform The ROS Network Graph
ROS “Graph” AbstractionNamed network resources
The ROS runtime designates several classes of named ROS graphresources. These resources can exist in namespaces to reduce namingcollisions, and fall into the following categories:
nodesRepresent processes distributed across the ROS network. A ROS nodeis a source and sink for data that is sent over the ROS network.parametersPersistent (while the core is running) data such as configuration &initialization settings, stored on the parameter server.topicsAsynchronous many-to-many communication streams.servicesSynchronous one-to-many network-based functions.
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 14 / 30
ROS as a Communication Platform The ROS Network Graph
ROS “Graph”rxgraph: communication network visualization
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 15 / 30
ROS as a Communication Platform Running and Connecting Nodes
Creating and Running ROS NodesDistributing computation with ROS
ROS provides a mechanism for simultaneously configuring and launchingcollections of ROS nodes. This is done with lightweight xml files and theroslaunch program.
Launch files enable users to:Associate a set of parameters and nodes with a single fileHierarchically compose collections of other launch filesAutomatically re-spawn nodes if they crashChange node names, namespaces, topics, and other resource nameswithout recompilingEasily distribute nodes across multiple machinesAttach gdb to a series of nodes
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 16 / 30
ROS as a Communication Platform Running and Connecting Nodes
ROS Communication ProtocolsConnecting nodes over the network
ROS supports a growing number of communication capabilities that enabledistributing computation in a robotic system. These capabilities arecurrently built entirely on two high-level communication APIs:
ROS TopicsAsynchronous “stream-like” communicationTCP/IP or UDP TransportStrongly-typed (ROS .msg spec)Can have one or more publishersCan have one or more subscribers
ROS Services
Synchronous “function-call-like” communicationTCP/IP or UDP TransportStrongly-typed (ROS .srv spec)Can have only one serverCan have one or more clients
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 17 / 30
ROS as a Communication Platform Running and Connecting Nodes
ROS Communication ProtocolsConnecting nodes over the network
ROS supports a growing number of communication capabilities that enabledistributing computation in a robotic system. These capabilities arecurrently built entirely on two high-level communication APIs:
ROS TopicsAsynchronous “stream-like” communicationTCP/IP or UDP TransportStrongly-typed (ROS .msg spec)Can have one or more publishersCan have one or more subscribers
ROS ServicesSynchronous “function-call-like” communicationTCP/IP or UDP TransportStrongly-typed (ROS .srv spec)Can have only one serverCan have one or more clients
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 17 / 30
ROS as a Communication Platform Running and Connecting Nodes
Asynchronous Distributed* CommunicationROS TCP Topics
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 18 / 30
ros"master"
camera viewer
ROS as a Communication Platform Running and Connecting Nodes
Asynchronous Distributed* CommunicationROS TCP Topics
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 18 / 30
ros"master"
camera viewer
advertise("images")
ROS as a Communication Platform Running and Connecting Nodes
Asynchronous Distributed* CommunicationROS TCP Topics
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 18 / 30
ros"master"
camera viewer
topic:images
ROS as a Communication Platform Running and Connecting Nodes
Asynchronous Distributed* CommunicationROS TCP Topics
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 18 / 30
ros"master"
camera viewer
topic:images
subscribe("images")
ROS as a Communication Platform Running and Connecting Nodes
Asynchronous Distributed* CommunicationROS TCP Topics
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 18 / 30
ros"master"
camera viewer
topic:images
subscribe("images")
ROS as a Communication Platform Running and Connecting Nodes
Asynchronous Distributed* CommunicationROS TCP Topics
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 18 / 30
ros"master"
camera viewer
topic:images
images(tcp)
ROS as a Communication Platform Running and Connecting Nodes
Asynchronous Distributed* CommunicationROS TCP Topics
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 18 / 30
ros"master"
camera viewer
topic:images
images(tcp)
publish(img)
ROS as a Communication Platform Running and Connecting Nodes
Asynchronous Distributed* CommunicationROS TCP Topics
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 18 / 30
ros"master"
camera viewer
topic:images
images(tcp)
publish(img)
ROS as a Communication Platform Running and Connecting Nodes
Asynchronous Distributed* CommunicationROS TCP Topics
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 18 / 30
ros"master"
camera viewer
topic:images
images(tcp)
publish(img)
viewer_too
ROS as a Communication Platform Running and Connecting Nodes
Asynchronous Distributed* CommunicationROS TCP Topics
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 18 / 30
ros"master"
camera viewer
topic:images
images(tcp)
publish(img)
viewer_too
subscribe("images")
ROS as a Communication Platform Running and Connecting Nodes
Asynchronous Distributed* CommunicationROS TCP Topics
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 18 / 30
ros"master"
camera viewer
topic:images
images(tcp)
publish(img)
viewer_too
images(tcp)
ROS as a Communication Platform Analyzing the System at Runtime
rosout Messagingstdout on steroids
ROS provides mechanisms in all languages for specifying different levels ofhuman-readable log messages. The five default levels are:
fatal
error
warn
info
debug
These enable a user to “add printf’s” to their code for debugging, andselectively enable and disable them at runtime without a largeperformance hit. For example, useful debug messages that might benecessary to diagnose a problem could be left in the code and re-enabledat a critical time.
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 19 / 30
ROS as a Communication Platform Analyzing the System at Runtime
ROS Graph IntrospectionNo more wireshark
ROS provides several tools for analyzing the data flowing over ROScommuncation resources:
rosnodeGives a user infomation about a node: publications, subscriptions, etcrostopicGives datarate, actual data, publishers, subscribesrosserviceEnables a user to call a ROS Service from the command lineroswtf (wire trouble finder)Diagnoses problems with a ROS network
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 20 / 30
ROS as a Communication Platform Analyzing the System at Runtime
ROS GUI ToolsThere are lots. . .
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 21 / 30
ROS as a Communication Platform Analyzing the System at Runtime
ROS GUI ToolsThere are lots. . .
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 21 / 30
ROS as a Communication Platform Analyzing the System at Runtime
ROS GUI ToolsThere are lots. . .
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 21 / 30
ROS as a Communication Platform Analyzing the System at Runtime
ROS GUI ToolsThere are lots. . .
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 21 / 30
ROS as a Communication Platform Analyzing the System at Runtime
ROS GUI ToolsThere are lots. . .
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 21 / 30
ROS as a Communication Platform Analyzing the System at Runtime
ROS GUI ToolsThere are lots. . .
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 21 / 30
ROS as a Communication Platform Analyzing the System at Runtime
rviz - 3D VisualizationModular state and sensor visualization
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 22 / 30
ROS as a Build Platform
Outline (revisted)
1 IntroductionHigh-LevelThe ROS EcosystemROS Community
2 ROS as a Communication PlatformThe ROS Network GraphRunning and Connecting NodesAnalyzing the System at Runtime
3 ROS as a Build PlatformDistribution & Package Management SystemBuild System
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 23 / 30
ROS as a Build Platform Distribution & Package Management System
ROS Stacks & PackagesHow to organize code in a ROS ecosystem
ROS code is grouped at two different levels:PackagesA named collection of software that is built and treated as an atomicdependency in the ROS build system.StacksA named collection of packages for distribution.
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 24 / 30
ROS as a Build Platform Distribution & Package Management System
ROS DistributionsDelivering ROS packages to the masses
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 25 / 30
source code
header declarations
scripts
message definitions
configuration files
launch files
service definitions
metadata...
ROS as a Build Platform Distribution & Package Management System
ROS DistributionsDelivering ROS packages to the masses
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 25 / 30
source code
header declarations
scripts
message definitions
configuration files
launch files
service definitions
metadata...
package_one
"package"
ROS as a Build Platform Distribution & Package Management System
ROS DistributionsDelivering ROS packages to the masses
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 25 / 30
source code
header declarations
scripts
message definitions
configuration files
launch files
service definitions
metadata...
package_one
"package"
package_two
ROS as a Build Platform Distribution & Package Management System
ROS DistributionsDelivering ROS packages to the masses
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 25 / 30
source code
header declarations
scripts
message definitions
configuration files
launch files
service definitions
metadata...
package_one
"package"
package_two
package_n
...
ROS as a Build Platform Distribution & Package Management System
ROS DistributionsDelivering ROS packages to the masses
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 25 / 30
source code
header declarations
scripts
message definitions
configuration files
launch files
service definitions
metadata...
package_one
"package"
package_two
package_n
...
"stack"
ROS as a Build Platform Distribution & Package Management System
ROS DistributionsDelivering ROS packages to the masses
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 26 / 30
ROS as a Build Platform Distribution & Package Management System
ROS DistributionsDelivering ROS packages to the masses
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 26 / 30
stack_a-0.4.0
ROS as a Build Platform Distribution & Package Management System
ROS DistributionsDelivering ROS packages to the masses
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 26 / 30
stack_a-0.4.0 stack_b-1.0.2
ROS as a Build Platform Distribution & Package Management System
ROS DistributionsDelivering ROS packages to the masses
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 26 / 30
stack_a-0.4.0 stack_b-1.0.2
...
stack_c-0.2.1
ROS as a Build Platform Distribution & Package Management System
ROS DistributionsDelivering ROS packages to the masses
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 26 / 30
stack_a-0.4.0 stack_b-1.0.2
...
stack_c-0.2.1
"distribution"
ROS as a Build Platform Distribution & Package Management System
ROS DistributionsDelivering ROS packages to the masses
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 26 / 30
stack_a-0.4.0 stack_b-1.0.2
...
stack_c-0.2.1
"distribution"
ROS "Box Turtle"March 2, 2010
ROS "C-Turtle"August 2, 2010
ROS "Diamondback"March 2, 2011
ROS as a Build Platform Distribution & Package Management System
ROS DistributionsDelivering ROS packages to the masses
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 26 / 30
stack_a-0.4.0 stack_b-1.0.2
...
stack_c-0.2.1
"distribution"
ROS "Box Turtle"March 2, 2010
ROS "C-Turtle"August 2, 2010
ROS "Diamondback"March 2, 2011
Future: ROS "Elecrtic Emys"August, 2011
ROS as a Build Platform Build System
ROS Meta-FilesystemIncreasing codebase flexibility
The minimal representation of a ROS package is a directory in the$ROS_PACKAGE_PATH which contains a single file:
manifest.xml
Contains package metadata (author, license, url, etc)Specifies system and package dependenciesSpecifies language-specific export flags
CMakeLists.txtContains ROS build rules (executables, libraries, custom build flags,etc)MakefileJust a proxy to build this package
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 27 / 30
ROS as a Build Platform Build System
ROS Meta-FilesystemIncreasing codebase flexibility
The minimal representation of a ROS package is a directory in the$ROS_PACKAGE_PATH which contains a single file:
manifest.xml
Contains package metadata (author, license, url, etc)
Specifies system and package dependenciesSpecifies language-specific export flags
CMakeLists.txtContains ROS build rules (executables, libraries, custom build flags,etc)MakefileJust a proxy to build this package
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 27 / 30
ROS as a Build Platform Build System
ROS Meta-FilesystemIncreasing codebase flexibility
The minimal representation of a ROS package is a directory in the$ROS_PACKAGE_PATH which contains a single file:
manifest.xml
Contains package metadata (author, license, url, etc)Specifies system and package dependencies
Specifies language-specific export flags
CMakeLists.txtContains ROS build rules (executables, libraries, custom build flags,etc)MakefileJust a proxy to build this package
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 27 / 30
ROS as a Build Platform Build System
ROS Meta-FilesystemIncreasing codebase flexibility
The minimal representation of a ROS package is a directory in the$ROS_PACKAGE_PATH which contains a single file:
manifest.xml
Contains package metadata (author, license, url, etc)Specifies system and package dependenciesSpecifies language-specific export flags
CMakeLists.txtContains ROS build rules (executables, libraries, custom build flags,etc)MakefileJust a proxy to build this package
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 27 / 30
ROS as a Build Platform Build System
ROS Meta-FilesystemIncreasing codebase flexibility
The minimal representation of a ROS package is a directory in the$ROS_PACKAGE_PATH which contains a single file:
manifest.xml
Contains package metadata (author, license, url, etc)Specifies system and package dependenciesSpecifies language-specific export flags
CMakeLists.txtContains ROS build rules (executables, libraries, custom build flags,etc)
MakefileJust a proxy to build this package
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 27 / 30
ROS as a Build Platform Build System
ROS Meta-FilesystemIncreasing codebase flexibility
The minimal representation of a ROS package is a directory in the$ROS_PACKAGE_PATH which contains a single file:
manifest.xml
Contains package metadata (author, license, url, etc)Specifies system and package dependenciesSpecifies language-specific export flags
CMakeLists.txtContains ROS build rules (executables, libraries, custom build flags,etc)MakefileJust a proxy to build this package
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 27 / 30
ROS as a Build Platform Build System
ROS Meta-Filesystem
This meta-filesystem allows ROS (rospack, specifically) to locate anypackage in the designated path, be it at compile time or runtime.
Since ROS can find any package at any time, it enables packages to bemoved aoround in the actual filesystem and greater codebase flexibility.
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 28 / 30
ROS as a Build Platform Build System
ROS Meta-Filesystem
This meta-filesystem allows ROS (rospack, specifically) to locate anypackage in the designated path, be it at compile time or runtime.
Since ROS can find any package at any time, it enables packages to bemoved aoround in the actual filesystem and greater codebase flexibility.
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 28 / 30
ROS as a Build Platform Build System
Building Code with ROSEasier CMake
While ROS uses CMake (www.cmake.org) internally to compile and linkcode, the ROS build system it adds several useful features that make iteasier to build ROS code.
rosbuild pulls compile and linker flags out of ROS package manifests,so compiling against other ROS code is as easy as specifying thepackage namerosdep can be used to install system dependencies specified in apackage’s manifest.xmlROS CMake macros enable rapid building of executables, libaries, andautomated regression tests
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 29 / 30
ROS as a Build Platform Build System
Building Code with ROSEasier CMake
While ROS uses CMake (www.cmake.org) internally to compile and linkcode, the ROS build system it adds several useful features that make iteasier to build ROS code.
rosbuild pulls compile and linker flags out of ROS package manifests,so compiling against other ROS code is as easy as specifying thepackage name
rosdep can be used to install system dependencies specified in apackage’s manifest.xmlROS CMake macros enable rapid building of executables, libaries, andautomated regression tests
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 29 / 30
ROS as a Build Platform Build System
Building Code with ROSEasier CMake
While ROS uses CMake (www.cmake.org) internally to compile and linkcode, the ROS build system it adds several useful features that make iteasier to build ROS code.
rosbuild pulls compile and linker flags out of ROS package manifests,so compiling against other ROS code is as easy as specifying thepackage namerosdep can be used to install system dependencies specified in apackage’s manifest.xml
ROS CMake macros enable rapid building of executables, libaries, andautomated regression tests
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 29 / 30
ROS as a Build Platform Build System
Building Code with ROSEasier CMake
While ROS uses CMake (www.cmake.org) internally to compile and linkcode, the ROS build system it adds several useful features that make iteasier to build ROS code.
rosbuild pulls compile and linker flags out of ROS package manifests,so compiling against other ROS code is as easy as specifying thepackage namerosdep can be used to install system dependencies specified in apackage’s manifest.xmlROS CMake macros enable rapid building of executables, libaries, andautomated regression tests
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 29 / 30
ROS as a Build Platform Build System
Thank you!
Now proceed to the ROS Beginner Tutorials!http://www.ros.org/wiki/ROS/Tutorials
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 30 / 30
ROS as a Build Platform Build System
Thank you!Now proceed to the ROS Beginner Tutorials!http://www.ros.org/wiki/ROS/Tutorials
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 30 / 30
Introduction ROS Community
The ROS CommunityResearchers using common tools to enable collaboration
79 Institutional ROS Repositories, all over the world (July, 2011)(jhu-lcsr-ros-pkg would make 80)
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 7 / 30
Introduction ROS Community
www.ros.org - The ROS HubA centralized location for ROS users and developers
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 8 / 30
Introduction ROS Community
answers.ros.org - ROS Questions & AnswersCommunity-supported help for ROS users
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 9 / 30
Introduction ROS Community
code.ros.org - Willow Garage, Inc CodeHosting and project management for “official” packages
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 10 / 30
Introduction ROS Community
ros mailing listsGetting in touch with the developer community
ROS Users - for general ROS-related discussionshttps://code.ros.org/mailman/listinfo/ros-users
ROS Developers - for ROS core developmenthttps://code.ros.org/mailman/listinfo/ros-developers
Other Lists & List Archiveshttp://code.ros.org/lurker
Jonathan Bohren (JHU LCSR) ROS Crash-Course, Part I: Introduction 11 / 30