ROS Tutorials to Start Working with Arduino and Raspberry Pi

The robotic field is getting more and more complex, but there’s no need to worry since an army of engineers works to build an entire fleet of software and hardware to solve the problems that may appear. The integration of an enormous amount of sensors and actuators could be a real problem that is transferred also to the area of algorithms and to the hardware platforms dedicated to integrating robotic components.

The Robot Operating System (ROS) is engineered to solve the problems from the software side. It contains a series of libraries that support a wide range of sensors and actuators, you’re allowed to write a ROS driver for your sensor, it has a good integration with other robot middleware software like OpenCV, Point Cloud Library, etc., and it can run on single board computers such as Raspberry Pi or BeagleBone Black, or integrated with single boards based on microcontrollers such as the Arduino.

[green_box] Most commercial robots support ROS, and now you can design your own robot based on Arduino or Raspberry Pi and run the Robot Operating System.[/green_box]

What is ROS and why you should use ROS in robotics?

ROS in robotics

ROS in robotics [image source]

The time is a very important resource and any tools that help you to develop a complete solution timely and with minimum resources is a maneuver to choose and run on the shortest path to the final project. The ROS library can help you to implement algorithms and cut down the time required to integrate an entire bag of components, it has support for parallel computing and provide you all the features and benefits of a complete OS.

From the development side, the ROS support a long list of development tools with the help of a large community of hobbyists that can share with you some tips and tricks, or any tutorial that can help you to discover the world of robots that run ROS.

Why you should use ROS in robotic applications?

Examples of ROS and Raspberry Pi [image source]

ROS in robotics[image source]


The implementation of a plethora of sensors and actuators quickly and in a custom way is a rough work. With a good hardware support, the ROS can work with a wide range of sensors, actuators, and even for whole robotics platforms.

With a modular structure, the development of a robot system can be done as teamwork where everyone can work separated from each other.

Working as a meta-operating system for robots, the ROS has many algorithms already implemented and available as packages, it provides hardware abstraction, message-passing, package management, visualizers, device drivers, and several other tools.

It can serve the data received from sensors to different sub-programs at the same time, and this is the benefits of the parallel computing, which is more difficult to program than sequential ones due to the potential of software bugs that may occur.

[green_box]The Robot Operating System is an open-source and free meta-operating system. In other words, the ROS run under the BSD license, is built on the top of an operating system, and allows different processes to communicate with each other at runtime.[/green_box]
The ROS operating system can easily integrate standard C++ libraries like OpenCV, Qt, or Point Cloud Library, and can be installed on single board computer such as Raspberry Pi.

Arduino and Raspberry Pi are the most popular embedded systems in robotics, and I choose these two platforms to explain how these embedded platforms can be integrated with ROS and help you to discover the first application.

The main topics covered in this article are:

  • how to setup the ROS to run with an Arduino board on several operating systems;
  • the “Hello World” example using the ROS and Arduino;
  • tutorials and examples how to use the ROS together with Arduino;
  • how to setup the ROS on Raspberry Pi and several operating systems;
  • tutorials and examples how to use the ROS together with Raspberry Pi;

The ROS is built to run on several operating systems in order to cover a large area of use. Starting with the well-known Linux based operating system such as Ubuntu, and up to Windows and OS X, the ROS can be unleashed to run on commercial robots as well as DIY robots built at home.

The list of operating system supported by ROS:

  • Ubuntu
  • Ubuntu ARM
  • OS X
  • OS X (MacPorts)
  • OpenEmbedded/Yocto
  • Debian
  • Arch Linux
  • Windows
  • Ångström
  • UDOO

ROS and Arduino

ROS and Arduino

ROS and Arduino [image source]


Arduino is a quite attractive embedded platform among hobbyists from several reasons including here the low price, an easy way to interface different sensors and actuators, a large community that share information and resources, and of course it can be interfaced with ROS using the rosserial node.

With no extra effort, you can control an advanced robot without writing a single hardware drive, only by setting up a network of custom ROS center nodes. You can use the ROS with Arduino for a wide range of applications such as monitoring, measuring the values from a sensor, control R/C servos, and many other applications with support from ROS side.

Tools to use ROS with Arduino
It is very easy to use the ROS with Arduino. Between the Arduino and ROS is the Arduino IDE tool designed for a quickly and easily programming hardware. The communication between ROS and Arduino is done through rosserial_arduino package, which provide a ROS communication protocol able to work with Arduino’s serial ports.

The rosserial_arduino package is a dedicated tool engineered to work directly with ROS messages, get the ROS system time, or publish TF transformer.

Tutorials to setup ROS for Arduino

The open-source Robot Operating System is a well documented framework that help you to explore all the features and functionalities on a long list of operating systems. You have available step-by-step all the information to setup the ROS in minutes on Linux, Windows, or Mac OSX and start using the ROS OS with Arduino.

Here are the tutorials to setup the ROS for Arduino single board microcontroller:

  • Setup the Arduino IDE and rosserial on different operating systems for Arduino – this tutorial show you in general how to setup the Arduino IDE to use rosserial for different operating systems including ROS installation for Windows users;
  • From this tutorial you can learn how to setup a virtual machine with Ubuntu and ROS on Windows machine;
  • This tutorial show you in details how to setup ROS and Arduino IDE on Mac OS X;

Examples of ROS and Arduino

The “Hello World” example
Every new project starts with a “Hello World” example, and the best way to enter into the world of ROS and Arduino is also to build the “Hello World” application. Here is the tutorial that shows you how to run the first application for ROS and Arduino using the rosserial.

In the following, I explore several other tutorials that can be used for inspiration and to find information about how to use the ROS framework and Arduino board.

  • From beginning, you can start using this series of ROS tutorials for beginners that uses rosserial_arduino tool for a long list of applications;
  • Arduino Double Sonar With ROS – this example show you how to use the Arduino together with ROS and build a simple double sonar application with PING))) sensors;
  • Sending Data from Arduino to ROS – a comprehensive tutorial from where you can start digging to find how the Arduino board send data to the ROS;
  • Android + Arduino + ROS – with this video presentation, you enter in the area of advanced applications where a ROS compatible robot based on Arduino board can be controlled via an Android device;

    ROS on Raspberry Pi

    ROS on Raspberry Pi

    ROS on Raspberry Pi [image source]


    The ROS operating system is designed to run on a network of machines and has support for simultaneous execution of a program or multiple computational threads. Back to Raspberry Pi, the official operating system for Pi is a version of Debian, followed by a list of operating systems also supported by RPi.

    Official information claims Ubuntu as official operating system supported by ROS, by in an experimental way, several other operating systems can run ROS without any problems. The Debian and Arch Linux, two of the better choice operating systems that can run on the RPi, can be the best solutions to build Raspberry Pi robots with the ROS operating system.

    In the following, I start a list with tutorials from where you can learn how to setup ROS on different operating systems supported by Raspberry Pi.

    Examples with ROS and Raspberry Pi

    You can start building applications with ROS and Raspberry Pi using the comprehensive documentation and the community behind ROS, or using simple ROS tutorials for beginners as inspiration.

    You can build with ROS and RPi a lot of robotic projects such as intelligent quadcopters, telepresence robots, security robots, and the list can continue. In the following, I explore several examples from where you can learn how to use in projects the ROS operating system with Raspberry Pi.

    • rosserial_embeddedlinux – on this page you can find several examples to start building you first application called “Hello Ros” and up to advanced technique that can be applied for ROS;
    • ROS Tutorials – another series of tutorials and examples from where you can learn how to use the ROS at maximum power(with Raspberry Pi, of course!);
    • RaspberryPI Ros – this tutorial cover the complete process to connect TakkTile sensors to the Raspberry PI directly using the I2C bus;
    • (link not available)AR.Drone 2 with ROS and OpenCV: Get started quick with Ubuntu or Mint – this is a really comprehensive article from where you can find how to install ROS, how to use it with OpenCV, and how to make a drone to fly using a joystick;
    • Raspberry Pi + Wifi Dongle + Usb Webcam = remote control web bot – this is an example how to build a tracked robot able to be controlled over wireless connection and uses a webcam to capture images;
    • ROS by Example: Head Tracking in 3D (Part 2) – with this example you enter in the area of advanced projects where the ROS framework is used to track 3D points by smoothly panning and tilting the camera;

    Resources:
    ROS, http://students.iitk.ac.in/;
    RasPi Interface, Github;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器人操作系统 ROS(机器人操作系统,Robot Operating System),是专为机器人软件开发所设计出来的一套电脑操作系统架构。它是一个开源的元级操作系统(后操作系统),提供类似于操作系统的服务,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间消息传递、程序发行包管理,它也提供一些工具和库用于获取、建立、编写和执行多机融合的程序。 ROS的运行架构是一种使用ROS通信模块实现模块间P2P的松耦合的网络连接的处理架构,它执行若干种类型的通讯,包括基于服务的同步RPC(远程过程调用)通讯、基于Topic的异步数据流通讯,还有参数服务器上的数据存储。 1 发展目标 2 ROS的概念 2.1 ROS 的 Filesystem Level 2.2 ROS 的 Computation Graph Level 3 参考文献 4 外部链接 发展目标 ROS的首要设计目标是在机器人研发领域提高代码复用率。ROS是一种分布式处理框架(又名Nodes)。这使可执行文件能被单独设计,并且在运行时松散耦合。这些过程可以封装到数据包(Packages)和堆栈(Stacks)中,以便于共享和分发。ROS还支持代码库的联合系统。使得协作亦能被分发。这种从文件系统级别到社区一级的设计让独立地决定发展和实施工作成为可能。上述所有功能都能由ROS的基础工具实现。 为了实现“共享与协作”这一首要目标,人们制订了ROS架构中的其他支援性目标: “轻便”:ROS是设计得尽可能方便简易。您不必替换主框架与系统,因为ROS编写的代码可以用于其他机器人软件框架中。毫无疑问的,ROS更易于集成与其他机器人软件框架。事实上ROS已完成与OpenRAVE、Orocos和Player的整合。 ROS-agnostic库:【agnostic:不可知论】建议的开发模型是使用clear的函数接口书写ROS-agnostic库。 语言独立性:ROS框架很容易在任何编程语言中执行。我们已经能在Python和C++中顺利运行,同时添加有Lisp、Octave和Java语言库。 测试简单:ROS有一个内建的单元/组合集测试框架,称为“rostest”。这使得集成调试和分解调试很容易。 扩展性:ROS适合于大型实时系统与大型的系统开发项目。 ROS的概念 ROS有三个层次的概念:分别为Filesystem level,Computation graph level, 以及Communication level。 以下内容具体的总结了这些层次及概念。除了这三个层次的概念, ROS也定义了两种名称-- Package资源名称和Graph资源名称。同样会在以下内容中提及。 ROS 的 Filesystem Level 文件系统层概念就是你在碟片里面遇到的资源,例如: Packages:ROS的基本组织,可以包含任意格式文件。一个Package 可以包含ROS执行时处理的文件(nodes),一个ROS的依赖库,一个数据集合,配置文件或一些有用的文件在一起。 Manifests:Manifests (manifest.xml) 提供关于Package元数据,包括它的许可信息和Package之间依赖关系,以及语言特性信息像编译旗帜(编译优化参数)。 Stacks: Stacks 是Packages的集合,它提供一个完整的功能,像“navigation stackStack与版本号关联,同时也是如何发行ROS软件方式的关键。 Manifest Stack Manifests: Stack manifests (stack.xml) 提供关于Stack元数据,包括它的许可信息和Stack之间依赖关系。 Message (msg) types: 信息描述, 位置在路径:my_package/msg/MyMessageType.msg, 定义数据类型在ROS的 messages ROS里面。 Service (srv) types: 服务描述,位置在路径:my_package/srv/MyServiceType.srv, 定义这个请求和相应的数据结构 在ROS services 里面。 ROS 的 Computation Graph Level Computation Graph Level(计算图)就是用ROS的P2P(peer-to-peer网络传输协议)网络集中处理所有的数据。基本的Computation Graph的概念包括Node, Master, Parameter Sever,messages, services, topics, 和bags, 以上所有的这些都以不同的方式给Graph传输数据。 Nodes: Nodes(节点)是一系列运行中的程序。ROS被设计成在一定颗粒度下的模块化系统。一个机器人控制系统通常包含许多Nodes。比如一个Node控制激光雷达,一个Node控制车轮马达,一个Node处理定位,一个Node执行路径规划,另外一个提供图形化界面等等。一个ROS节点是由Libraries ROS client library写成的, 例如 roscpp 和 rospy. Master: ROS Master 提供了登记列表和对其他计算图的查找。没有Master,节点将无法找到其他节点,交换消息或调用服务。 Server Parameter Server: 参数服务器使数据按照钥匙的方式存储。目前,参数服务器是主持的组成部分。 Messages:节点之间通过messages来传递消息。一个message是一个简单的数据结构,包含一些归类定义的区。支持标准的原始数据类型(整数、浮点数、布尔数,等)和原始数组类型。message可以包含任意的嵌套结构和数组(很类似于C语言的结构structs) Topics: Messages以一种发布/订阅的方式传递。一个node可以在一个给定的topic中发布消息。Topic是一个name被用于描述消息内容。一个node针对某个topic关注与订阅特定类型的数据。可能同时有多个node发布或者订阅同一个topic的消息;也可能有一个topic同时发布或订阅多个topic。总体上,发布者和订阅者不了解彼此的存在。主要的概念在于将信息的发布者和需求者解耦、分离。逻辑上,topic可以看作是一个严格规范化的消息bus。每个bus有一个名字,每个node都可以连接到bus发送和接受符合标准类型的消息。 Services:发布/订阅模型是很灵活的通讯模式,但是多对多,单向传输对于分布式系统中经常需要的“请求/回应”式的交互来说并不合适。因此,“请求/回应” 是通过services来实现的。这种通讯的定义是一种成对的消息:一个用于请求,一个用于回应。假设一个节点提供了一个服务提供下一个name和客户使用服务发送请求消息并等待答复。ROS的客户库通常以一种远程调用的方式提供这样的交互。 Bags: Bags是一种格式,用于存储和播放ROS消息。对于储存数据来说Bags是一种很重要的机制。例如传感器数据很难收集但却是开发与测试中必须的。 在ROS的计算图中,ROS的Master以一个name service的方式工作。它给ROS的节点存储了topics和service的注册信息。Nodes 与Master通信从而报告它们的注册信息。当这些节点与master通信的时候,它们可以接收关于其他以注册节点的信息并且建立与其它以注册节点之间的联系。当这些注册信息改变时Master也会回馈这些节点,同时允许节点动态创建与新节点之间的连接。 节点之间的连接是直接的; Master仅仅提供了查询信息,就像一个DNS服务器。节点订阅一个topic将会要求建立一个与发布该topics的节点的连接,并且将会在同意连接协议的基础上建立该连接。ROS里面使用最广的连接协议是TCPROS,这个协议使用标准的TCP/IP 接口。 这样的架构允许脱钩工作(decoupled operation),通过这种方式大型或是更为复杂的系统得以建立,其中names方式是一种行之有效的手段。names方式在ROS系统中扮演极为重要的角色: topics, services, and parameters 都有各自的names。每一个ROS客户端库都支持重命名,这等同于,每一个编译成功的程序能够以另一种形似【名字】运行。 例如,为了控制一个北阳激光测距仪(Hokuyo laser range-finder),我们可以启动这个hokuyo_node 驱动,这个驱动可以给与激光仪进行对话并且在"扫描"topic下可以发布sensor_msgs/LaserScan 的信息。为了处理数据,我们也许会写一个使用laser_filters的node来订阅"扫描"topic的信息。订阅之后,我们的过滤器将会自动开始接收激光仪的信息。 注意两边是如何脱钩工作的。 所有的hokuyo_node的节点都会完成发布"扫描",不需要知道是否有节点被订阅了。所有的过滤器都会完成"扫描"的订阅,不论知道还是不知道是否有节点在发布"扫描"。 在不引发任何错误的情况下,这两个nodes可以任何的顺序启动,终止,或者重启。 以后我们也许会给我们的机器人加入另外一个激光器,这会导致我们重新设置我们的系统。我们所需要做的就是重新映射已经使用过的names。当我们开始我们的第一个hokuyo_node时,我们可以说它用base_scan代替了映射扫描,并且和我们的过滤器节点做相同的事。现在,这些节点将会用base_scan的topic来通信从而代替,并且将不再监听"扫描"topic的信息。然后我们就可以为我们的新激光测距仪启动另外一个hokuyo_node。 参考文献 http://www.ros.org/wiki/ros http://bbs.axnzero.com/index.php http://blog.sina.com.cn/digital2image2processing
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值