ROS基础概念
ROS基础概念
对ROS支持最好的是Ubuntu版本的Linux系统
Ubuntu安装对比
1. Linux终端相关命令
查看当前的位置:
1 | pwd |
上级目录和下级目录切换:
1 | cd .. # 切换为上级目录 |
创建新的文件夹:
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 | rm test # 删除文件 |
提升当前文件的权限:
1 | sudo apt-get update # 更新当前系统的软件源列表 |
帮助文档:
1 | rm --help # 可以看到rm相关指令的使用方法 |
2. C++/Python极简编程基础
2.1 ROS编译命令
安装g++编译器:
1 | sudo apt-get install g++ |
安装Python解释器:
1 | sudo apt-get install python |
C++编译相关命令:
1 | g++ c++_for.cpp -o c++_for # 通过g]]++软件编译c++_for.cpp成文件名为c++_for的可执行文件 |
python编译相关命令:
1 | python python_for.py # 直接通过python解释器对python_for]].py文件进行解释 |
具体相关的操作如下:
面向对象的编译:
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 文件定义,编译过程中生成对应的代码文件。
如图所示:
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命令行工具
1 | rosrun turtlesim |
turtlesim是一个功能包的名字,通过 tab 键可以将功能包里面所有节点列出,
4.1 rqt_graph
rqt_graph是基于qt的可视化工具,用来显示系统计算图的工具
1 | rqt_graph # 显示出系统的计算图,可以知道这个系统是干嘛的 |
4.2 rosnode
1 | rosnode # 显示系统节点的指令 |
如果不知道这个指令的意思,可以直接回车,即可看到该指令相关的含义和使用方法
对于运行小海龟后,通过 rosnode list 可以列出所有的节点为 rosout teleop_turtle turtlesim三个节点,rosout在rqt中没有体现,这个是只要启动roscore就会自动启动的一个节点,用来输出一些日志之类的信息,一般不用考虑。
由图可以看出小海龟发布了哪些话题,订阅了哪些话题,根据订阅的话题对小海龟做一些移动,以及一些服务,通过服务完成 一些配置。
4.3 rostopic
跟话题相关的命令行工具
1 | rostopic list # 通过rostopic]] list可以打印出当前话题的列表 |
twist指的是消息,linear指的是线速度,angular指的是角速度,每个速度分为xyz方向上的分量。pub指令只会发布一次,如果希望小海龟一直动,需要一个循环
1 | rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear: |
如果想看看Twist消息的结构,可以通过rosmsg来查看
1 | rosmsg show geometry_msgs/Twist |
4.4 rosservice
1 | rosservice list # 通过该指令可以列出有哪些服务 |
产生一个相同的海龟,可以通过以下指令
1 | rosservice call /spawn "x: 0.0 |
这里的xy为小海龟的位置,theta为角度,name为海龟的名字
4.5 rosbag
记录当前系统所有话题的数据,并进行保存,下次使用时再复现出来。
1 | rosbag record -a -O cmd_record |
-a 表示将所有的数据都保存下来,-O 将保存的数据保存为 cmd_record 的压缩包
记录结束之后,按 ctrl + c 数据就被保存下来,保存的数据在当前终端的默认路径下。
启动roscore,再启动仿真器节点
1 | rosrun turtlesim turtlesim_node |
通过数据包复现刚才的指令
1 | rosbag play cmd_record.bag |
即可复现之前的操作过程。