===== ROS Tutorials ===== The [[ros>ROS/Tutorials|official ROS tutorials]] are very comprehensive, however I found the way they present ROS to a beginner results in a very steep learning curve. Here is our own set of tutorials, which are a work in progress. I may reference tutorials from other sites if I find them useful. ==== Pre-requisites ==== Basic linux command-line knowledge (specifically BASH) is assumed. If you are completely unfamiliar with the command line, check out this[[https://www.codecademy.com/learn/learn-the-command-line|codecademy tutorial]], or [[https://www.youtube.com/playlist?list=PLII6oL6B7q78PKy6_R6JTkkYjVXZBZcVq | this series of videos]]. ==== High Level Concepts ==== ROS is many things, it is primarily a communication framework, but it also has a huge set of useful tools, including viewing data, navigating the filesystem, and starting up processes. Each process is called a **node**. Nodes are designed to do a specific task. We can create complex functionality (such as controlling a robot) by building multiple nodes and having them talk together. There are several ways for nodes to talk to each other, the most common one is a **topic**. The basic idea is that a single node can "publish" data to a topic, and then one or more nodes can "subscribe" to the topic and receive the data. Nodes are typically grouped together into a **package**. All of our software is in a single package called "robosub". When you install ROS, several other packages are installed that provide some useful functionality, such as rqt_plot. ==== Command Line Tools ==== ROS provides many useful command-line tools. Your BASH environment gets access to these when you have the following line in your ~/.bashrc file: source /opt/ros/indigo/setup.bash Most ROS commands support tab autocompletion, so take advantage of it! === Navigating the filesystem === ROS has a few different commands that are useful for moving and looking around. They are typically in the form: $ <...> Most are based on the typical navigation functions: * roscd * rosls === Starting nodes === == Starting a single node == While you can manually find the executable (or python script) and run it manually, ROS provides a tool for quickly finding and starting a node, the ''rosrun'' command: $ rosrun == Starting multiple nodes == The ''roslaunch'' command allows you to launch multiple nodes at the same time. The nodes are specified in a special file called a launch file. $ rosrun More information about launch files can be found [[|here]] === Viewing active nodes and topics === The ''rosnode'' command shows information about nodes. You can view all currently running nodes by running $ rosnode list Likewise, the ''rostopic'' command shows information about topics. You can view all currently active topics by running $ rostopic list === How to Write a ROS Node === Check out these tutorials for whatever language you're using: [[ros>ROS/Tutorials/WritingPublisherSubscriber(c%2B%2B) | C++ ]] [[ros>ROS/Tutorials/WritingPublisherSubscriber(python) | Python ]]