很久之前就学过ROS了,一直有相关的项目开发,但是后面没用一段时间后,对于ROS细节的东西几乎都忘了。故此写下这篇学习笔记(应该说复习笔记),作为以后复习用。
本博文虽然以ROS命名,但更多的算是直接操作ROS,用turtlebot机器人。后面我会补上更加详细的ROS安装(甚至是linux安装)的教程。好下面进入正文
目录
ROS的基本介绍
ROS学习资料
Learning TurtleBot and ROS
what is ros?
what will you need?
Linux与ROS安装
Testing TurtleBot Installation
Setting Up Networking
获取IP
ROS文件框架介绍(引自本人的硕士论文)
ROS文件系统级
ROS计算图级
基于可见光定位的ROS功能包的运行流程
ROS软件平台被开发的根本原因都是想让全世界的机器人研究人员们齐心协力解决机器人软件过于繁多和复杂而造成的问题。
例如,当实现机器人识别周围情况的功能的时候,硬件种类繁多的问题和要用在实际生活中的问题是会带来困难的部分。有些对人来说很简单的事情对机器人来说是很困难的问题,因为要实现机器人的传感、识别、绘制地图、动作规划等功能。因此学校的研究室或公司难以做到这些所有的功能。但如果全世界的相关领域的从事人员们都各自分享自己的专长部分,让其他研究团队使用的话情况就大不一样了。
ROS不需要完全重新开发已有的系统和程序,而是通过加入一些标准化的代码就能对已有的非ROS程序进行ROS化的转化。并且很多通用的工具和软件都有提供,因此可以专注于自己感兴趣或想贡献的部分,这反而可以节省开发和维护所需的时间。
ROS的五个特点:
ROS的目标是“建立一个在全球范围内协作开发机器人软件的环境!”
ROS入门教程
https://www.ncnynl.com/archives/201608/496.html(创客)
http://wiki.ros.org/cn/ROS/Tutorials(wiki)
turtlebot2咖啡机(之前有个英文版本的课程,但是不知道为啥最近打不开了~~~)
http://learn.turtlebot.com/
https://www.ncnynl.com/archives/201609/776.html
turtlebot3
https://www.ncnynl.com/archives/201702/1388.html
turtlebot官网(通过官网可以学习到更多)
https://www.turtlebot.com/
ROS的官网
https://www.ros.org/
ROS中的turtlebot仿真
http://learn.turtlebot.com/2015/02/03/1/
本部分其实是关于如何直接操作ROS的
ROS作为一个分布式框架。其实在不用写代码的情况下,已经可以实现好多功能。包括:SLAM、IMU等。后面介绍到的VLC定位功能包是本人后面开发的,并不能直接调用,代码还没release出来
The Robot Operating System (ROS) is a flexible framework for writing robot software. It is a collection of tools, libraries, and conventions that aim to simplify the task of creating complex and robust robot behavior across a wide variety of robotic platforms.
ROS是一个开放源代码的机器人元操作系统。它提供了我们对操作系统期望的服务,包括硬件抽象、低级设备控制、常用功能的实现、进程之间的消息传递以及功能包管理。它还提供了用于在多台计算机之间获取、构建、编写和运行代码的工具和库。
ROS包括一个类似于操作系统的硬件抽象,但它不是一个传统的操作系统,它具有可用于异构硬件的特性。此外,它是一个机器人软件平台,提供了专门为机器人开发应用程序的各种开发环境。
ROS是一个元操作系统(Meta-Operating System)。元操作系统不是一个明确定义的术语,而是一个利用应用程序和分布式计算资源之间的虚拟化层来运用分布式计算资源来执行调度、加载、监视、错误处理等任务的系统。(注意ROS并不同于linxu、windows、Android等操作系统)。是一种利用现有的操作系统(如linux)以使用进程管理系统、文件系统、用户界面、程序实用程序(编译器、线程模型等)此外,它还以库的形式提供了机器人应用程序所需的多数不同类型的硬件之间的数据传输/接收、调度和错误处理等功能。这个概念也被称为中间件(Middleware)或软件框架(Software framework)。
ROS还可以实现在不同操作系统之间的通信
ROS组建
注意:ROS虽然支持多种操作系统,但正式支持的只有Ubuntu,而对其它版本仅提供安装方法。之前本人的团队也试过开发基于手机Android系统的ROS功能包,但是后面由于功能不齐全,稳定性不好而搁置了。
查看linux的版本
lsb_release -a
查看ros的版本
roscore
接下来会写博客介绍ROS的安装
roscore
打开一个新的终端,输入
roslaunch turtlebot_bringup minimal.launch
再打开一个新的终端,通过键盘控制
roslaunch turtlebot_teleop keyboard_teleop.launch
要配置完网络才可以实现工作站与机器人通信
Make sure both TurtleBot and the workstation are connected to the same router.
sudo apt-get install chrony
sudo ntpdate ntp.ubuntu.com
ifconfig
查看SSh状态
sudo service ssh status
如果显示ssh: unrecognized service,没安装ssh,则安装:
sudo apt-get install openssh-server
工作站远程登录Turtlebot上网本,在终端执行
ssh turtlebot@[ip_of_turtlebot]
You should export the variables inside your work space setup script.
echo export ROS_MASTER_URI=http://IP_OF_TURTLEBOT:11311 >> ~/.bashrc
echo export ROS_HOSTNAME=IP_OF_PC >> ~/.bashrc
注意:IP_OF_TURTLEBOT为turtlebot的Ip地址,IP_OF_PC为工作站的IP地址
验证
工作站
ssh turtlebot@[ip_of_turtlebot]
roslaunch turtlebot_bringup minimal.launch
再在工作站运行
roslaunch turtlebot_teleop keyboard_teleop.launch
ROS系统是用于机器人的一种开源的后操作系统(次级操作系统)。它提供类似于操作系统所提供的功能,也提供一些工具程序和库用于获取、构建、编写和运行多机整合的程序。ROS还提供了许多基本库和工具来帮助开发机器人应用程序。从本质上,ROS是运行在Linux等计算机操作系统上的、面向机器人特点的运行支撑软件和软件工具集。ROS的最大的优点是有利于机器人程序开发中代码的重复利用,集成了众多的开源第三方库,如导航系统、图像处理库等,开发者只需要专注于开发自己的核心算法而不需要花费额外的精力实现已有的功能。
ROS是一种分布式的框架,执行程序可以分别独立设计、再实时的结合起来,进程之间按照功能包和功能包集的方式分组,因而可以容易地分享和发布,无需改动就能够在不同的机器人上复用代码。ROS系统的架构主要分为三部分:文件系统级、计算图级和开源社区级。
ROS的文件架构按下图所示组织:
计算图是ROS处理数据的一种点对点的网络形式。ROS会创建一个连接到所有进程的网络。在系统中的任何节点都可以访问此网络,并通过该网络与其他节点进行交互,获取其他节点发布的信息,并将自身数据发布到网络上。如下图所示
本人设计了基于ROS的VLC导航功能包。并且在19年广东省大挑战杯中获得了特等奖。本人的硕士毕业论文以及相关的paper(将要publish)都有相关的算法原理、节点的设置介绍。后面会将维护好的代码release出来,在此仅仅列出使用流程,供团队的成员使用。
首先打开新的终端,ssh链接机器人
ssh [email protected]
密码 burger
打开终端 输入
roscore
或
roslaunch turtlebot3_bringup turtlebot3_robot.launch
运行这一条如果检测到roscore没开启会自动开启roscore的,这条命令的用处是启动turtlebot3运行所需的所有相关组件,如果只是需要开启ROS而不需要遥控机器人运动的话可以只用roscore
打开新终端,键盘控制机器人
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
这条命令可以运行在本机也可以运行在ssh到机器人的终端上,两种操作不同之处在于软件包运行的宿主不同,而最终的操作效果是一样的
打开新终端,ssh到机器人(在机器人上开启camera节点)
rosrun mvcam mvcam
打开新终端,使用窗口界面查看图像:
rosrun image_view image_view image:=/camera/image
(可选,在本机运行 !警告,查看图像会造成定位变慢)
打开新终端,启动VLC节点所使用的命令:
rosrun vlc_locator publisher
(在本机上运行,该节点有运行依赖,依赖于相机通过节点/camera/image所传递的图像,需要相机节点运行后定位节点才能运行)
打开新终端,查看坐标纸图像:
rosrun image_view image_view image:=/camera/image_show
(可选,在本机运行)