ROS 开发环境简介

https://blog.csdn.net/wendox/article/details/53518506

ROS 开发环境简介

首先考虑几个问题?
做实验的时候,如果想要把图像数据和处理之后的图像的数据保存下来,怎么办?你马上想到可以这样

imwrite("xx",xx);
  • 1

可是这样,会加重图像读取线程的负担。另外 如果同时想记录传感器的数据,GPS的数据怎么办,你马上想到可以这样

ofstream fps("xx.txt")
  • 1

又如果想要同时记录他们的采集的时间呢?这个怎么办呢?又如果想要从机器人上实时传输图像到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

扫描二维码关注公众号,回复: 2822771 查看本文章
  1. Ubuntu
    • 虚拟机,优点是好装好卸,缺点是卡,驱动非常非常不完善
    • double os,优点是快,支持各种硬件。
  2. Software
    Ubuntu能够广泛流行的很大原因,就是因为APT系统,装软件十分方便(apt-get install 对比windows就知道了),然后呢ROS对于APT的支持也是相当的好,各种package(无论是驱动,可视化包,算法包)都可以做到直接apt-get。
sudo apt-get install xxx
  • 1
  1. ROS
sudo apt-get install ros-indigo-desktop
  • 1

推荐使用indigo版本的,因为这个是比较稳定的版本,支持的各种包最丰富,用的最广泛。详细的安装方法见
wiki

其他

再看开头那几个问题
1. 做实验的时候,如果想要把图像数据和处理之后的图像的数据保存下来,怎么办?
2. 如果同时想记录传感器的数据,GPS的数据怎么办,
3. 如果想要同时记录他们的采集的时间呢?
这些问题都可以使用一个rosbag的工具搞定,rosbag记录了所有发布的消息,以及消息对应的time stamp。

rosbag record -a
  • 1
  1. 如果想要从机器人上实时传输图像到PC上要查看,怎么办?
rosmsg publish /image
  • 1

直接发布消息就行,是不是很神奇,因为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++)

相机、嵌入式等及驱动

Some Books

  1. ROS By Example
  2. Learning ROS for Robotics Programming
  3. 机器人操作系统(ROS)浅析
  4. CMake 实践
  5. 鳥哥的 Linux 私房菜

猜你喜欢

转载自blog.csdn.net/chengde6896383/article/details/81781418