第一章 ROS概述与环境搭建
学习新的知识三部曲:先去了解相关概念,然后安装官方软件包,最后搭建集成开发环境。
1.1 ROS简介
机器人是各种硬件和软件集成,甚至可以说机器人系统是当今工业体系的集大成者。
不重复造轮子 提高研发效率 复用性和模块化开发愈发强烈
传统模式到现代模式
1.1.1 ROS概念
1.是适用于机器人的开源元操作系统(基于linux的二级操作系统)
2.ROS集成了大量的工具 库 协议,简化了对机器人的控制
3.ROS可以运行在多台计算机上 也就是分布式系统(分散计算压力)
4.ROS=Plumbing(通讯机制)+Tools(工具软件包)+Capabilities(机器人高层功能)+Ecosystem(机器人生态系统)
通讯就是数据交互 也就是核心功能
工具提供了仿真功能,极其有用
功能,有部分是其他人做好封装好的,我们需要做的就是下载下来后安装直接调参复用 ,结合具体机器人(尺寸啥的)调参 大部分不是算法的优化。 机器人研发有时候就是调参 调参侠
生态,搭建一个圈子 武林盟主啥的 掌握话语权
1.1.2 ROS设计目标
1.代码复用
2.分布式:ros是进程(也就是节点 nodes)的分布式框架,ros中的进程可以分布于不同的主机,不同主机协同工作,分散计算压力
3.松耦合:ros中功能模块封装于独立的功能包或者元功能包,便于分享,功能包中的模块以节点为单位运行,以ros标准的IO作为接口,开发者不需要关注内部实现,只要了解接口规则就可以实现复用,实现模块间点对点的松耦合连接
4.精简
5.语言独立性
6.易于测试
7.大型应用(基于分布式)
8.丰富的组件化工具包
9.免费且开源:功能包巨多 遇到要实现某个功能时,先不要自己实现,先去github上先找找看看有没有实现,有的话自己就不需要重复造轮子,直接拿来复用。
1.2 ROS安装
1.3 ROS快速体验
ROS中设计的编程语言主要以C++和python为主。
C++运行效率高但是编码复杂,而python反之。roscpp旨在成为ros的高性能库,而rospy一般用于对性能无要求的场景,提高开发效率。 视需求而定!
ROS中的程序实现流程五步法:
1.先创建一个工作空间(_ws)
2.再创建一个功能包(在src文件夹里面)
3.编辑源文件(cpp或者py文件)
4.编辑配置文件(cmakelist)
5.编译并执行(catkin_make)
mkdir -p demo1_ws/src //创建多级目录
cd ./demo1_ws/ //进入工作空间
catkin_make //编译工作空间
catkin_create_pkg helloworld roscpp rospy std_msgs //要进入src下 进行创建功能包 功能包名称 依赖 最后一个为标准消息库
source ./devel/setup.bash //配置环境变量
rosrun helloworld haha //包名+ C++节点(也就是进程名字 add_executable(节点名 ……))
1.4 ROS集成开发环境搭建
1.4.1 安装终端
一款好用的终端:Terminator
sudo apt install terminator
常用快捷键:
Alt +方向键:终端切换
ctrl +shift+w:关闭当前终端
+x:最大化当前显示终端
+E:水平分割终端
+O:垂直
1.4.2 安装vscode
使用vscode进行ROS开发或者SLAM开发 永远滴神 很好用
ROS插件是基于Python和C++插件的
vscode中解决中文乱码问题:加条语句
ctrl+~ vscode中引出终端
setlocale(LC_ALL,"");
1.4.3 launch文件演示
官方给出的优化策略是使用launch文件,可以一次性启动多个ROS节点
launch文件的实现
1.选定功能包右击 添加launch文件夹
2.选定launch文件夹右击 添加launch文件
3.编辑launch文件内容(xml格式)
<launch>
<node pkg="helloworld" type="demo_hello" name="hello" output="screen" />// info信息显示在屏幕上
<node pkg="turtlesim" type="turtlesim_node" name="t1"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
<!--node pkg="hellovscode" type="hello_vscode_c" name="hellovscode" output="screen" /--> //!-- --注释
</launch>
node —> 包含的某个节点
pkg -----> 功能包
type ----> 被运行的节点文件
name --> 为节点命名
output-> 设置日志的输出目标
4.运行launch文件
roslaunch 包功能名 功能包里launch文件名
5.运行结果: 一次性启动了多个节点
1.5 ROS架构(有点科普)
自身结构
就 ROS 自身实现而言: 也可以划分为三层
文件系统
ROS文件系统级指的是在硬盘上面查看的ROS源代码的组织形式(也就是工作空间文件夹的组织形式)
计算图
ROS 分布式系统中不同进程需要进行数据交互,计算图可以以点对点的网络形式表现数据交互过程,计算图中的重要概念: 节点(Node)、消息(message)、通信机制_主题(topic)、通信机制_服务(service)
1.5.1 ROS文件系统
1.package.xml
该文件定义有关软件包的属性,例如软件包名称,版本号,作者,维护者以及对其他catkin软件包的依赖性。请注意,该概念类似于旧版 rosbuild 构建系统中使用的manifest.xml文件。
2.CMakelists.txt
文件CMakeLists.txt是CMake构建系统的输入,用于构建软件包。任何兼容CMake的软件包都包含一个或多个CMakeLists.txt文件,这些文件描述了如何构建代码以及将代码安装到何处。
1.5.2 ROS文件系统相关命令
文件操作,无外乎就是增删改查与执行等操作,接下来,我们就从这五个维度,来介绍ROS文件系统的一些常用命令。
1.增
catkin_create_pkg 自定义包名 依赖包 === 创建新的ROS功能包
sudo apt install xxx === 安装 ROS功能包
2.删
sudo apt purge xxx ==== 删除某个功能包
3.查
rospack list === 列出所有功能包
rospack find 包名 === 查找某个功能包是否存在,如果存在返回安装路径
roscd 包名 === 进入某个功能包
rosls 包名 === 列出某个包下的文件
apt search xxx === 搜索某个功能包
4.改
rosed 包名 文件名 === 修改功能包文件
需要安装 vim
比如:rosed turtlesim Color.msg
5.执行
5.1roscore
roscore === 是 ROS 的系统先决条件节点和程序的集合, 必须运行 roscore 才能使 ROS 节点进行通信。
roscore 将启动:
ros master
ros 参数服务器
rosout 日志节点
5.2 rosrun
rosrun 包名 可执行文件名 === 运行指定的ROS节点
比如:rosrun turtlesim turtlesim_node
5.3 roslaunch
roslaunch 包名 launch文件名 === 执行某个包下的 launch 文件
1.5.3 计算图
显示节点之间的交互模式
节点多的时候使用很多