本文主要内容是ROS基础概念。
ROS基础概念
对ROS支持最好的是Ubuntu版本的Linux系统
Ubuntu安装对比
1. Linux终端相关命令
查看当前的位置:
pwd
上级目录和下级目录切换:
cd .. # 切换为上级目录
cd # 切换为root目录
cd yyy # 打开yyy文件夹
创建新的文件夹:
mkdir test # 创建文件夹,文件夹名字为test]]
查看当前文件夹下相关文件:
ls
创建文件:
touch test # 创建test文件
将文件剪切到某一个路径下:
mv test /home/yww/000 # 将test文件剪切到000文件夹中
拷贝文件并将其放到另外一个文件夹中:
cp test 111/test2 # 将当前路径下的test文件复制到当前路径下的111文件夹中,并将该test文件重新命名为test2文件
删除文件:
rm test # 删除文件
rm -r 000/ # 删除000文件夹,-r是递归删除的意思,因为一个文件夹下可能有多个文件
提升当前文件的权限:
sudo apt-get update # 更新当前系统的软件源列表
帮助文档:
rm --help # 可以看到rm相关指令的使用方法
sudo --help # 可以看到sudo相关指令的使用方法
cd --help # 可以看到cd相关指令的使用方法
2. C++/Python极简编程基础
2.1 ROS编译命令
安装g++编译器:
sudo apt-get install g++
安装Python解释器:
sudo apt-get install python
C++编译相关命令:
g++ c++_for.cpp -o c++_for # 通过g]]++软件编译c++_for.cpp成文件名为c++_for的可执行文件
./c++_for # 运行可执行文件 ./ 的作用就是运行某个程序或者脚本
python编译相关命令:
python python_for.py # 直接通过python解释器对python_for]].py文件进行解释
具体相关的操作如下:
面向对象的编译:
2.2 ROS小海龟仿真
1、启动ROS Master
roscore
2、启动小海龟仿真器
rosrun turtlesim turtlesim_node
3、启动海龟控制节点
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 文件定义,编译过程中生成对应的代码文件。
如图所示:
3.3 服务通信
3.3.1 服务(Service)—同步通信机制
- 使用客户端/服务器(C/S)模型,客户端发送请求数据,服务器完成处理后返回应答数据;
- 使用编程语言无关的.srv文件定义请求和应答数据结构,编译过程中生成对应的代码。
- 服务一般是请求一次调用一次,后续如果使用可能不会再次调用,和topic的区别在于不会多次请求。
3.3.2 话题和服务的对比
3.4 参数
3.4.1 参数(Parameter)—全局共享字典
- 可通过网络访问的共享、多变量字典;
- 节点使用此服务器来存储和检索运行时的参数;
- 适合存储静态、非二进制的配置参数,不适合存储动态配置的数据。
3.5 文件系统
3.5.1 功能包(Package)
- ROS软件中的基本单元,包含节点源码、配置文件、数据定义等
3.5.2 功能包清单(Package manifest)
- 记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等
3.5.3 元功能包(Meta Packages)
- 组织多个用于同一目的的功能包
4. ROS命令行工具
rosrun turtlesim
turtlesim是一个功能包的名字,通过 tab 键可以将功能包里面所有节点列出,
4.1 rqt_graph
rqt_graph是基于qt的可视化工具,用来显示系统计算图的工具
rqt_graph # 显示出系统的计算图,可以知道这个系统是干嘛的
4.2 rosnode
rosnode # 显示系统节点的指令
rosnode list # 将系统所有的节点全部列出的指令
rosnode info # 用来查看某一个节点具体信息是什么样的
rosnode info /turtlesim # 差看turtlesim这个节点是什么样的
如果不知道这个指令的意思,可以直接回车,即可看到该指令相关的含义和使用方法
对于运行小海龟后,通过 rosnode list 可以列出所有的节点为 rosout teleop_turtle turtlesim三个节点,rosout在rqt中没有体现,这个是只要启动roscore就会自动启动的一个节点,用来输出一些日志之类的信息,一般不用考虑。
由图可以看出小海龟发布了哪些话题,订阅了哪些话题,根据订阅的话题对小海龟做一些移动,以及一些服务,通过服务完成 一些配置。
4.3 rostopic
跟话题相关的命令行工具
rostopic list # 通过rostopic]] list可以打印出当前话题的列表
twist指的是消息,linear指的是线速度,angular指的是角速度,每个速度分为xyz方向上的分量。pub指令只会发布一次,如果希望小海龟一直动,需要一个循环
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来查看
rosmsg show geometry_msgs/Twist
4.4 rosservice
rosservice list # 通过该指令可以列出有哪些服务
产生一个相同的海龟,可以通过以下指令
rosservice call /spawn "x: 0.0
y: 0.0
theta: 0.0
name: 'turtle2'"
这里的xy为小海龟的位置,theta为角度,name为海龟的名字
4.5 rosbag
记录当前系统所有话题的数据,并进行保存,下次使用时再复现出来。
rosbag record -a -O cmd_record
-a 表示将所有的数据都保存下来,-O 将保存的数据保存为 cmd_record 的压缩包
记录结束之后,按 ctrl + c 数据就被保存下来,保存的数据在当前终端的默认路径下。
启动roscore,再启动仿真器节点
rosrun turtlesim turtlesim_node
通过数据包复现刚才的指令
rosbag play cmd_record.bag
即可复现之前的操作过程。