ROS 开发环境简介
2016-12-08 15:03
381 查看
ROS 开发环境简介
首先考虑几个问题?做实验的时候,如果想要把图像数据和处理之后的图像的数据保存下来,怎么办?你马上想到可以这样
imwrite("xx",xx);
可是这样,会加重图像读取线程的负担。另外 如果同时想记录传感器的数据,GPS的数据怎么办,你马上想到可以这样
ofstream fps("xx.txt")
又如果想要同时记录他们的采集的时间呢?这个怎么办呢?又如果想要从机器人上实时传输图像到PC上要查看,怎么办?你会想到几种方法。
- socket(TCP/IP)
- Remote Desktop+ Screen recorder
这样感觉还挺麻烦的有没有简单一点的方法,或者说有没有一种好用的tool帮我们完成这样一件事。这里我们介绍机器人中应用十分广泛的一种开发工具-ROS。
Why ROS?
Powerful tools. (rqt, rosbag, roslaunch).Run a code in mutli robots
Support SSH
Support OpenCV
Support Python
Rich driver packages of robots.(Cameras, LINDA, sensors)
Support many Robots.(DJI, PR2, turtle bot…)
Open source
那么ROS是什么,为什么他明明只是一个linux中软件,却叫做OS。
ROS的核心
我们说一个简单的操作系统,比如ucos,不考虑文件系统和驱动等等,那么他只有一组线程(进程)管理的代码,其实最早linux发布的时候也只是一个kernel,主要的功能还是进程管理、内存管理。ROS node
ROS的核心其实进程管理的工具(只不多底层的API是直接调用linux的函数而不是自己做的),因为每个进程在ROS中是一个节点,我们可以很直观的看到进程之间的通信(msg,service),所以理解ROS node就知道为什么ros中具备的其他的功能,因为大部分功能都是围绕这个ros node来的。我们写出来的代码在ros中回编译成一个个节点,运行的时候也是以节点的形式出现。那么从这个角度上,ROS把自己叫做一个操作系统还是没有问题的。
ROS MSG
ROS msg是node之间单向通信使用的工具,它类似于微信中公众号的形式,谁订阅这个消息就可以看到那些文章。ROS service
ROS service是一种双向通信机制,就像微信的talk,是点对点的。关于ROS更详细的可以看见ROS 介绍ROS的位置
GUI | 三维可视化 |
---|---|
Developer’s code | SLAM/VO |
ROS/OpenCV/Cuda | g2o/Eigen/sophus |
Linux/CMake/GCC | Linux/CMake/GCC |
driver/Hardware | driver/Camera/IMU |
Install
Ubuntu虚拟机,优点是好装好卸,缺点是卡,驱动非常非常不完善
double os,优点是快,支持各种硬件。
Software
Ubuntu能够广泛流行的很大原因,就是因为APT系统,装软件十分方便(apt-get install 对比windows就知道了),然后呢ROS对于APT的支持也是相当的好,各种package(无论是驱动,可视化包,算法包)都可以做到直接apt-get。
sudo apt-get install xxx
ROS
sudo apt-get install ros-indigo-desktop
推荐使用indigo版本的,因为这个是比较稳定的版本,支持的各种包最丰富,用的最广泛。详细的安装方法见
wiki
其他
再看开头那几个问题1. 做实验的时候,如果想要把图像数据和处理之后的图像的数据保存下来,怎么办?
2. 如果同时想记录传感器的数据,GPS的数据怎么办,
3. 如果想要同时记录他们的采集的时间呢?
这些问题都可以使用一个rosbag的工具搞定,rosbag记录了所有发布的消息,以及消息对应的time stamp。
rosbag record -a
如果想要从机器人上实时传输图像到PC上要查看,怎么办?
rosmsg publish /image
直接发布消息就行,是不是很神奇,因为ROS可以实现多个机器人运行同一个ROS core,这样呢,我们在Robot上看到的或者自己发布各种广播,在PC上一样可以看到(这个原理上就是ROS对SSH的封装)。使用roslauch可以同时启动多个机器人的多个代码。比方说,一边是飞机,一边是PC,飞机上跑的代码是定位导航、飞机控制的代码,PC上跑的代码是可视化图像,路径规划、全局地图等等,使用一个launch文件可以搞定他们的启动。
开发环境
Why CMake && catkin
CMake是ROS的编译环境,装过OpenCV的人都知道,CMake其实使用种配置工具,它能够生成各种用于编译的配置文件,比方说gcc的MakeFile, VS的工程文件等等。CMake的语法远远要比autoconfig(这时linux以前常用的一种编译配置工具)简单,那么由于CMake的盛行,大部分开源软件包都会支持CMake,当然包括CMake。
linux Cmake构建工具
为什么要使用CMake呢?
在一个大的项目中,有很多源文件和头文件,需要对他们分别编译,然后可能链接到一些库文件,这时候gcc的指令会变得很长,写起来太麻烦。因此人们使用一个MakeFile文件来专门指定这些东西是怎么编译链接的。但是直接使用MakeFile文件,这里边的语法规则还是有点复杂,所以在MakeFile之上,人们又做了一个自动生成的工具叫做CMake,CMake程序执行的时候,读入一个CMakeList.txt文件,之后会生成MakeFile文件,然后编译链接,构建整个项目。因此一般的顺序是执行
1. cmake
2. make
好吧,先这样举个例子吧,写代码像做菜,可以煮,然后还可以烤,蒸等等。
那么一定会用一些工具,有些比较全套的厨房什么都有,就像饭店的厨房,从原材料,到各种调料,各种锅都是齐全的,而且自动化程度很高,基本上有了原材料,按一下按钮,等着菜自己做好。还有一个不太完整,就像寝室里只有一个电锅,自己还得配一下别的东西锅碗,买点菜,买点酱油啊等等。他们用的原料是一样的,都能做出饭来,不过用的工具不一样。
visual studio。这个软件包含了整个构建系统,注意构建这词表示从源代码一直编译到可以运行的程序,也就是从生米到熟饭的过程。一个典型的c++构建系统必然包含一个c++的编译器 连接器,这些是必须的。还有一个调试用比如调试器,工程管理的,还有就是便于代码开发的工具,他本质上是一个编辑器,就是能够把代码敲到文件里边去。
上边是vs的情况,那么在linux中,也有这样的一个开发环境,当然用的更多的不是这样的开发环境,而是用了一系列小工具完成整个构建链条。这其中包括编译器g++、gcc,连接器link,调试器gdb,工程管理cmake,MakeFile。零零碎碎各种东西加在一起可以完成vs的功能。
好吧说到这里,干脆多说一些,了解就行。
Linux中流行的的自动化工程管理工具有两种,一种就是鼎鼎大名的CMake,它支持了大部分流行开源代码,写起来语法非常简单,这就是为什么我们会用他。流行常用的代码如OpenCV,eigen,caffe。他是ROS的构建工具中一环,使用ROS一定要学会使用CMake,各种SLAM代码都是使用CMake编译的,SLAM代码一般是C++实现的。
另外一个是autoconfig系统,这个系统相对CMake来说,就麻烦了一些,是比较老的工具了,逐渐被淘汰。
catkin是使用最广泛的ros package管理工具,它的好处不多说了,谁用谁知道。
IDE
kdevelop(c++)(apt get install)(推荐),因为这个里边支持CMake比较好,调试比较方便。pycharm(Python)。推荐,可以任意设断点调试。
code blocks(c++)
qt Creator(GUI/c++)
相机、嵌入式等及驱动
Camera in ROS and VISCA玩转四旋翼无人机(Nvidia Jetson TK1 使用)
ROS 教程之 vision: 摄像头标定camera calibration
Some Books
ROS By ExampleLearning ROS for Robotics Programming
机器人操作系统(ROS)浅析
CMake 实践
鳥哥的 Linux 私房菜
相关文章推荐
- spp程序开发环境及方法简介
- [转]我也玩 PSP 开发! —— PSP开发环境 简介
- Android开发环境配置简介
- Android简介及开发环境搭建
- Android简介及开发环境的搭建
- RIA开发环境--Laszlo简介
- Windows 下的 Objective-C 开发环境配置简介
- Meego开发环境---Xephyr简介
- Android开发环境配置简介
- 嵌入式成长轨迹4【嵌入式环境及基础】【嵌入式Linux软件开发入门】【Shell简介】
- VisualFC简介(WTL、WinxGUI可视化开发环境)
- Android开发环境配置简介
- ADS开发简介(二) 环境配置和工具使用
- Android开发环境配置简介
- Android开发环境配置简介
- SharePoint(WSS)学习(1) 简介与开发环境搭建
- opencv简介与开发环境配置
- [翻译]Programming Windows Phone 7 Series简介以及开发环境搭建
- Android开发环境配置简介
- SharePoint(WSS)学习 简介与开发环境搭建