ROS入门学习笔记

一、ROS基本介绍

1、ros发展史
    Ros(Robot Operating System)由斯坦福大学于2000年提出,2007年,Willow Garage(柳树车库)作为发起者,与斯坦福项目组合作,使ROS进入快速发展。
    2009年发布ROS0.4版本,这是一个测试版本。之后发布多个ROS版本,如Indigo,Jade,Kinetic,hydro等十余个版本,目前常用的版本为:Indigo,Kinetic版本,每个Ros版本都有其对应的ubuntu版本,Indigo对应Ubuntu 14.04版本,kinetic对应Ubuntu16.04版本

2、ros介绍
    ros史linux系统上的一个类操作系统,连接了真正的操作系统和用户编写的程序。ros提供了类似操作系统的功能,如:硬件的抽象、底层设备的控制、常用函数的实现、进程间消息的传递、包管理。
        Ros=框架+ 工具+功能+社区

3、Ros的工程结构
    ros的工程结构可以告诉用户ros放置在硬盘中的什么位置,为何种结构。一个典型的ros工程如些图所示:
ROS入门学习笔记
    Catkin 是ros自有的一种编译构建系统,是对CMake的扩展,用于对ros程序的编译。src用于存放功能包package,package是Catkin编译的基本单元,编译时,系统递归查找每一个package。package包中必须包含CMakeList.txt以及package.xml。
3.1 catkin
    ros环境下使用catkin_make建立工作空间,其命令为:

$mkdir -p ~/catkin_ws/src #创建文件夹src,用于存放ros软件包
$cd ~/catkin_ws/ #进入工作空间
$catkin_make (初始化工作空间)

catkin最主要的功能:编译程序
    一般情况下,写完代码后,应该有如下命令

$cd ~/catkin_ws/ #回到工作空间
$catkin_make
$source ~/catkin_ws/devel/setup.bash #编译完成后source刷新环境

刷新环境,系统将会知道所生成的ros可执行文件的位置,否则将会导致所生成的ros可执行文件无法打开。
    在工作空间下使用tree命令,显示文件结构

$cd ~/catkin_ws
$sudo apt install tree
$tree

    初始化工作空间后,Catkin workspace目录下将会包含src(package源代码)、build(Cmake&catkin的缓存文件和中间文件)、devel(目标文件,包含头文件,动态链接库,静态链接库,可执行文件)。
3.2 package
3.2.1 package创建
    创建一个package需要在catkin_ws/src下,用到catkin_create_pkg命令,用法是:

$catkin_create_pkg package depends

其中package是包名,depends是依赖的包名,可以依赖多个软件包。
    例如,新建一个package叫做test_pkg,依赖roscpp、rospy、std_msgs(常用依赖)。

$ catkin_create_pkg test_pkg roscpp rospy std_msgs

3.2.2 package相关命令
    rospack是对package管理的工具,命令的用法如下:

rospack命令 作用
$rospack find package_name #查找某个pkg的地址
$rospack list #列出本地所有的pkg
$rospack depends [package] #显示package的依赖包
$rospack find [package] #定位某个package
$rospack profile #刷新所有package的位置记录

#缺省package,则默认为当前目录。
    roscd命令

roscd命令 作用
$roscd package_name #跳转到某个pkg路径下

    rosls命令

rosedls命令 作用
$rosls package_name #列举某个pkg下的文件信息

    rosed命令

rosed命令 作用
$rosed package_name file_name #编辑某个pkg中的文件

    rosdep命令

rosdep命令 作用
$rosdep install [pkg_name] #安装某个pkg所需要的依赖

3.2.3 CMakeList.txt的写法:
ROS入门学习笔记
3.2.4 package.xml的写法
ROS入门学习笔记
其中,通常修改的地方为:<build_depend>,<run_depend>.

4、ROS框架(通信框架)
    ros采用了分布式的框架,通过点(node)对点的设计让机器人的进程可以分别运行,便于模块化的修改和定制,提高了系统的容错能力。

5、ROS工具
    ros提供了许多基础性的工具,如:RViz,gazebo.
    使用工具包用于仿真和调试,图形界面,数据的可视化,数据记录,开发人员面对的将是可视化界面,而不是字符串。

6、ROS功能包
    ros提供了许多功能包,用于机器人的控制,规划,视觉,建图。这些功能包可在github以及ros官网上下载。

7、ROS社区
    软件包的管理(apt-get),文档,教程.