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工程如些图所示:
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的写法:
3.2.4 package.xml的写法
其中,通常修改的地方为:<build_depend>,<run_depend>.
4、ROS框架(通信框架)
ros采用了分布式的框架,通过点(node)对点的设计让机器人的进程可以分别运行,便于模块化的修改和定制,提高了系统的容错能力。
5、ROS工具
ros提供了许多基础性的工具,如:RViz,gazebo.
使用工具包用于仿真和调试,图形界面,数据的可视化,数据记录,开发人员面对的将是可视化界面,而不是字符串。
6、ROS功能包
ros提供了许多功能包,用于机器人的控制,规划,视觉,建图。这些功能包可在github以及ros官网上下载。
7、ROS社区
软件包的管理(apt-get),文档,教程.