ROS基础概念

对ROS支持最好的是Ubuntu版本的Linux系统

Ubuntu安装对比

Ubuntu安装方法对比

1. Linux终端相关命令

查看当前的位置:

1
pwd

上级目录和下级目录切换:

1
2
3
cd ..    # 切换为上级目录
cd # 切换为root目录
cd yyy # 打开yyy文件夹

创建新的文件夹:

1
mkdir test   # 创建文件夹,文件夹名字为test]]

查看当前文件夹下相关文件:

1
ls

创建文件:

1
touch test    # 创建test文件 

将文件剪切到某一个路径下:

1
mv test /home/yww/000   # 将test文件剪切到000文件夹中

拷贝文件并将其放到另外一个文件夹中:

1
cp test 111/test2   # 将当前路径下的test文件复制到当前路径下的111文件夹中,并将该test文件重新命名为test2文件

删除文件:

1
2
rm test   # 删除文件
rm -r 000/ # 删除000文件夹,-r是递归删除的意思,因为一个文件夹下可能有多个文件

提升当前文件的权限:

1
sudo apt-get update   # 更新当前系统的软件源列表

帮助文档:

1
2
3
rm --help  # 可以看到rm相关指令的使用方法
sudo --help # 可以看到sudo相关指令的使用方法
cd --help # 可以看到cd相关指令的使用方法

2. C++/Python极简编程基础

2.1 ROS编译命令

安装g++编译器:

1
sudo apt-get install g++

安装Python解释器:

1
sudo apt-get install python

C++编译相关命令:

1
2
g++ c++_for.cpp -o c++_for   # 通过g]]++软件编译c++_for.cpp成文件名为c++_for的可执行文件
./c++_for # 运行可执行文件 ./ 的作用就是运行某个程序或者脚本

python编译相关命令:

1
python python_for.py    # 直接通过python解释器对python_for]].py文件进行解释

具体相关的操作如下:

vxTIBNMHKzgaXyd

面向对象的编译:

aBpvfiKV8UjCelT

2.2 ROS小海龟仿真

1、启动ROS Master

1
roscore

2、启动小海龟仿真器

1
rosrun turtlesim turtlesim_node

3、启动海龟控制节点

1
rosrun turtlesim turtle_teleop_key

3. ROS组成部分

3.1 节点与节点管理器

3.1.1 节点(Node)—执行单元

  • 执行具体任务的进程、独立运行的可执行文件;
  • 不同节点可使用不同的编程语言,可分布式运行在不同的主机上;
  • 节点在系统中的名称必须是唯一的。

3.1.2 节点管理器(ROS Master)—控制单元

  • 为节点提供命名和注册服务;
  • 跟踪和记录话题/服务通信,辅助节点相互查找、建立连接;
  • 提供参数服务器,节点使用此服务器存储和检索运行时的参数。

3.2 话题通讯

3.2.1 话题(Topic)—异步通信机制

  • 节点间用来传输数据的重要总线;
  • 使用发布/订阅模型,数据由发布者传输到订阅者,同一个话题的订阅者或发布者可以不唯一。

3.2.2 消息(Message)—话题数据

  • 具有一定的类型和数据结构,包括ROS提供的标准类型和用户自定义类型;
  • 使用编程语言无关的 .msg 文件定义,编译过程中生成对应的代码文件。

如图所示:

image-20220106155710598

3.3 服务通信

3.3.1 服务(Service)—同步通信机制

  • 使用客户端/服务器(C/S)模型,客户端发送请求数据,服务器完成处理后返回应答数据;
  • 使用编程语言无关的.srv文件定义请求和应答数据结构,编译过程中生成对应的代码。
  • 服务一般是请求一次调用一次,后续如果使用可能不会再次调用,和topic的区别在于不会多次请求。

jL2GrOVcY9DFTMW

A49f1qrIRZ7ibJO

3.3.2 话题和服务的对比

H758dzbs4JxnkPl

3.4 参数

3.4.1 参数(Parameter)—全局共享字典

  • 可通过网络访问的共享、多变量字典
  • 节点使用此服务器来存储和检索运行时的参数
  • 适合存储静态、非二进制的配置参数,不适合存储动态配置的数据。

3.5 文件系统

3.5.1 功能包(Package)

  • ROS软件中的基本单元,包含节点源码、配置文件、数据定义等

3.5.2 功能包清单(Package manifest)

  • 记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等

3.5.3 元功能包(Meta Packages)

  • 组织多个用于同一目的的功能包

image-20220106151521814

image-20220106154422975

4. ROS命令行工具

1
rosrun turtlesim

turtlesim是一个功能包的名字,通过 tab 键可以将功能包里面所有节点列出,

image-20220105223429728

4.1 rqt_graph

rqt_graph是基于qt的可视化工具,用来显示系统计算图的工具

1
rqt_graph   # 显示出系统的计算图,可以知道这个系统是干嘛的

image-20220105223849599

4.2 rosnode

1
2
3
4
rosnode   # 显示系统节点的指令
rosnode list # 将系统所有的节点全部列出的指令
rosnode info # 用来查看某一个节点具体信息是什么样的
rosnode info /turtlesim # 差看turtlesim这个节点是什么样的

如果不知道这个指令的意思,可以直接回车,即可看到该指令相关的含义和使用方法

对于运行小海龟后,通过 rosnode list 可以列出所有的节点为 rosout teleop_turtle turtlesim三个节点,rosout在rqt中没有体现,这个是只要启动roscore就会自动启动的一个节点,用来输出一些日志之类的信息,一般不用考虑。

image-20220105225200652

由图可以看出小海龟发布了哪些话题,订阅了哪些话题,根据订阅的话题对小海龟做一些移动,以及一些服务,通过服务完成 一些配置。

4.3 rostopic

跟话题相关的命令行工具

1
rostopic list  # 通过rostopic]] list可以打印出当前话题的列表

image-20220105230024752

image-20220105231138306

twist指的是消息,linear指的是线速度,angular指的是角速度,每个速度分为xyz方向上的分量。pub指令只会发布一次,如果希望小海龟一直动,需要一个循环

1
2
3
4
5
6
7
8
rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:
x: 1.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0"

如果想看看Twist消息的结构,可以通过rosmsg来查看

1
rosmsg show geometry_msgs/Twist

image-20220105232232640

4.4 rosservice

1
rosservice list    # 通过该指令可以列出有哪些服务

image-20220105233059696

产生一个相同的海龟,可以通过以下指令

1
2
3
4
rosservice call /spawn "x: 0.0
y: 0.0
theta: 0.0
name: 'turtle2'"

这里的xy为小海龟的位置,theta为角度,name为海龟的名字

image-20220105233631611

4.5 rosbag

记录当前系统所有话题的数据,并进行保存,下次使用时再复现出来。

1
rosbag record -a -O cmd_record

-a 表示将所有的数据都保存下来,-O 将保存的数据保存为 cmd_record 的压缩包

image-20220105235231189

记录结束之后,按 ctrl + c 数据就被保存下来,保存的数据在当前终端的默认路径下。

启动roscore,再启动仿真器节点

1
rosrun turtlesim turtlesim_node

通过数据包复现刚才的指令

1
rosbag play cmd_record.bag

即可复现之前的操作过程。