User Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
cs:ros:tutorials:start [2016/09/09 17:30]
James Irwin
cs:ros:tutorials:start [2016/09/23 21:34] (current)
Brandon Kallaher [ROS Tutorials]
Line 1: Line 1:
 ===== ROS Tutorials ===== ===== 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 ==== ==== Pre-requisites ====
-Basic linux command-line knowledge (specifically BASH) is assumed. If you are completely unfamiliar with the command line, go through the first few lessons on thishttps://​www.codecademy.com/​learn/​learn-the-command-line+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: 
 +<code bash> 
 +source /​opt/​ros/​indigo/​setup.bash 
 +</​code>​ 
 +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: 
 +<code bash> 
 +$ <​command>​ <​package_name>​ <​...>​ 
 +</​code>​ 
 +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: 
 +<code bash> 
 +$ rosrun <​package_name>​ <​node_name>​ 
 +</​code>​ 
 + 
 +== 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. 
 +<code bash> 
 +$ rosrun <​package_name>​ <​launchfile_name>​ 
 +</​code>​ 
 +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 
 +<code bash> 
 +$ rosnode list 
 +</​code>​ 
 + 
 +Likewise, the ''​rostopic''​ command shows information about topics. You can view all currently active topics by running 
 +<code bash> 
 +$ rostopic list 
 +</​code>​ 
 + 
 + 
 +=== 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 ]]