概述
机器人是一种高度复杂的系统性实现,系统包含:硬件设计、嵌入式软件设计、上层设计、机械结构设计、机械加工。
ROS 全称:机器人操作系统 Robot Operating System
ROS 是适用于机器人的开源操作系统
ROS集齐了大量的库、协议,工具
ROS最大的特点 分布式
ROS = 通信+工具+功能+生态
ROS是进程的分布式框架,ROS中的进程可以分布于不同的主机,不同主机协同工作,从而分散计算压力。
ubuntu 20.04 右击的时候只有新建文件夹,但是没有新建文本文档,一般新建文档的时候,通过终端 + gedit 命令。
ROS的快速体验
ROS中涉及的变成语言主要是C++和Python。
ROS中程序的实现流程大概是:
- 创建一个工作空间
- 创建一个功能包
- 编辑源文件
- 编辑配置文件
- 编译并执行
1. 创建工作空间并初始化
mkdir -p demo01_ws/src #创建工作空间 cd demo01_ws #进入工作空间 catkin_make #编译,编译完后工作空间中会出现 build 和 devel文件夹2. 进入src并创建工作包,添加依赖库
cd src catkin_create_pkg helloworld roscpp rospy std_msgs # helloword 是要创建的工具包的名称 # roscpp rospy std_mags 是三个依赖包的名称roscpp 是使用C++实现的库
rospy是使用python实现的库
std_msgs 是标准消息库,创建ROS 功能包时,一般都会依赖这三个库的实现
3. 编写源文件
进入到创建的功能包的src
//1. 包含ROS的头文件 #include"ros/ros.h" //2. 编写main 函数 int main(int argc,char*argv[]){ setlocale(LC_ALL,""); //解决中文乱码问题 //3. 初始化ros节点 ros::init(argc,argv,"hello_node"); //输出日志 ROS_INFO("hello_world"); return 0; }4. 编写配置文件
5.回到工作空间,打开终端,进行编译 catkin_make
6. 执行
先启动命令行1:
roscore再启动命令行2
cd 工作空间 source ./devel/setup.bash #这个source 只是在当前终端下加载工作环境 #rosrun 包名 c++节点 rosrun helloworld haha可以配置环境变量,方便在任意终端使用ros
在 .bashrc 文件中添加
source ~/工作空间/devel/setup.bash然后打开终端,重新加载
source .bashrc
ROS集成开发环境搭建
1. 安装终端
sudo apt install terminatorctrl +alt +T 打开终端,就是可以分割的终端,也可以添加进收藏夹
ctrl +D 关闭当前终端页面
2. 安装vsode
3. launch文件演示
<launch> <!-- 启动helloworld节点 --> <node pkg="helloworld" type="haha" name="helloworld" output="screen"/> <node pkg="turtlesim" type="turtlesim_node" name="turtle_GUI" /> <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_key" /> </launch>ROS 文件系统
workspace:自定义的工作空间
build:编译空间,存放编译后生成的缓存信息、配置信息和其他文件
devel:开发空间,用于存放编译后生成的目标文件,包括头文件,静态/动态链接库,可执行文件等。
src:源码
package:功能包,包含多个节点,库与配置文件等
cmakelists.txt :配置编译规则
package.xml : 包信息,比如,包名,作者,依赖项
scripts: 存储python文件
src:存储C++源文件
include: 头文件
launch:一次可运行多个节点
srv:服务通讯格式文件
msg: 消息通讯格式文件
action:动作格式文件
ROS文件系统相关命令
roscore
roscore 是ROS系统启动的先决条件节点和程序的几何,必须运行roscore才能使ros节点进行通讯。roscore将启动 :
- ros master
- ros参数服务器
- roscout 日志节点
rosrun
rosrun 包名 可执行文件名roslaunch
roslaunch 包名 launch文件名 #执行某个包下的launch文件