【移动机器人运动规划(ROS)】01_ROS简介与基本工作环境搭建
ROS wiki : http://wiki.ros.org/
-
快捷键
# 查看环境中是否有包 rospack list # 如果没有 ~/.bashrc
ROS基本工作环境搭建
ROS需要部署在Ubuntu等环境中,若未安装可到之前的文章中安装,通过不同的Ubuntu版本下载对应的ROS
版本 代号 ROS版本 Ubuntu 14.04 Trusty TahrROS Ubuntu 16.04 Xenial XerusROS Ubuntu 18.04 Bionic BeaverROS Ubuntu 20.04 Focal FossaROS1 Ubuntu 22.04 jammy JellyfishROS1 Ubuntu 24.04 Noble NumbatROS2
-
ros一键安装工具(注意-O大写)
wget http://fishros.com/install -O fishros && . fishros
-
创建工作空间及功能包目录
mkdir -p ~/catkin_ws/src
-
初始化工作空间
cd ~/catkin_ws/src catkin_init_workspace
-
编译工作空间
cd ~/catkin_ws/ catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1
-
配置环境变量(使终端能正确识别和使用 ROS 的命令和包)
# 暂时性配置: source devel/setup.bash
# 永久配置如下: gedit ~/.bashrc #在末尾添加 username为自己的文件名 `source /home/username/catkin_ws/devel/setup.bash` # 保存文件后使其生效 source ~/.bashrc
# 树莓派官方推荐的另一种配置方式,确实更加便捷 echo "source ~/ros_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc
-
创建功能包
功能包是用于存放每个节点程序的文件夹,一般存放于src目录
cd ~/ros_ws/src catkin_create_pkg learn_topic std_msgs rospy roscpp geometry_msgs turtlesim # 解释一下命令行的组成: # `catkin_create_pkg:创建命令 # `learn_topic:功能包的名称 # `roscpp、rospy、geometry_msgs turtlesim:这个是功能包的一下依赖库,也可以后边需要的时候补充到功能包目录下的CMakeLists.txt文件中
-
功能包文件夹说明
include:存放需要编译程序的头文件
src:存放编译节点程序的源码文件
CMakeLists.txt:编译所需要的文件,其中包括声明需要连接哪些库,需要哪些依赖以及生成哪些程序等等
package.xml:声明了编译需要的一些依赖以功能包的一些信息,包括功能包版本、功能包创建的作者等等
在后边,我们会学习到如何编写一个节点程序,会有C++版本和Python版本,一般的,C++版本的程序源码是存放在src,而Python版本的源码存放在scripts文件夹,这个文件夹是自己在功能包路径下创建的,可以输入以下命令进行创建,
mkdir scripts包括后边会提及到到的launch文件和自定义的消息文件,都是需要在功能包的目录下创建相对应的launch文件和msg文件夹进行存放。
-
roscore
在运行所有的ros程序前,需要启动roscore(在后边运行launch文件的时候则不需要,launch文件启动时会启动roscore),roscore只能运行一个,如果在多个终端启动roscore,则会提示已启动roscore
终端输入
roscore -
rosrun
# rosrun是启动ros节点程序的命令,前边的roscore比较特殊,终端输入即可启动,但是其他的ros节点程序,大多数都属有rosrun来启动,命令格式如下: # pkg_name:功能包名字,后边可执行程序的功能包文件夹的名字 executable_program:可执行程序的名字,可以是C++编译生成的文件,也可以是Python编写的文件末尾是.py可执行文件。 rosrun pkg_name executable_program # 举例,以经典的小海龟为例,在启动roscore后,我们在另一个终端输入, rosrun turtlesim turtlesim_node # 启动成功后,会出现一只小海龟,我们通过rosnode list 来查看下当前的节点有哪些,终端输入, rosnode list # 相比于之前的/rosout多了个/turtlesim,同样可以利用rosnode info 工具来查看节点信息,终端输入, rosnode info /turtlesim # 发布的话题以及相关的数据类型 Publications: /rosout_agg [rosgraph_msgs/Log] # 订阅的话题以及相关的数据类型 Subscriptions: /rosout [unknown type] # 提供的服务以及相关的数据类型 Services: /rosout/get_loggers /rosout/set_logger_level
-
vscode
下载vscode->下载deb(浏览器或者apt-get install code)->双击即可->终端键入
code安装插件
C/C++
C/C++ Extension Pack
C/C++ Themes
Python
Python Debugger
Pylance
CMake
Code Runner
Remote-SSH
Robot Developer Extensions for ROS 1
ROS简介
-
ROS及其工作空间定义
ROS(Robot Operating System,简称··1·1·1·1·1·1·1·······“ROS”)是一个适用于机器人的开源的操作系统。
它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。
ROS 的主要目标是为机器人研究和开发提供代码复用的支持。
ROS是一个分布式的进程(也就是“节点”)框架,这些进程被封装在易于被分享和发布的程序包和功能包中。
ROS工作空间本质上是一个连接了操作系统与 ROS 程序的中间件框架,便于进行模块化设计与组织管理 ROS 功能包(Package),一个系统一般只运行一个 ROS 工作空间,一个 ROS工作空间可设计多个功能包。每个 ROS 功能包是算法与功能的集合,功能包含节点(Node)、消息类型(Message)、服务(Service)、配置文件等。节点作为一个独立进程是ROS 可执行的最小计算单位,通过话题、服务或动作实现与其他节点通信。话题为 ROS节点间通信信道,遵循发布-订阅(Pub/Sub)模式,一个节点可以发布与订阅一个或多个话题。
ROS 工作空间可通过 rosrun rqt_graph rqt_graph 指令查看当前 ROS 工作空间的工作节点
-
ROS的主要特点
分布式架构(每一个工作进程都看作一个节点,使用节点管理器统一管理),
多语言支持(如C++、Python等),
良好的伸缩性(既可以写一个节点,也可以通过roslaunch将很多节点组织成一个更大的工程),
源码开放(ROS遵循BSD协议,对个体和商业应用及修改完全免费)。
ROS整体架构
开源社区级 : 主要包括开发人员知识、代码、算法共享。
文件系统级 : 用于描述可以在硬盘上查到的代码及可执行程序,
计算图级 : 体现进程与进程、进程与系统之间的通讯。
ROS计算图集
-
节点
节点是主要的计算执行进程。ROS是有很多节点组成的,多个节点启动后,可以通过下边指令查看各个节点之间的话题通讯。
rqt_graph
-
消息
节点之间通过消息实现彼此的逻辑联系与数据交换。
-
话题(主题)
话题是一种传递消息(发布/订阅)的方式。每一条消息都要发布到相应的主题上,每一个话题都是强类型的。ROS的话题消息可以使用TCP/IP或UDP传输,ROS默认使用的传输方式是TCP/IP。基于TCP传输成为TCPROS,是一种长连接方式;基于UDP传输的成为UDPROS,是一种低延迟、高效率的传输方式,但容易丢失数据,适合于远程操作。
-
服务
服务用于请求应答模型,也必须有一个唯一的名称。当一个节点提供某个服务时,所有的节点都可以通过使用ROS客户端所编写的代码与之通讯。
-
消息记录包
消息记录包是一种用于保存和回放ROS消息数据的文件格式,保存在.bag文件中。是一种用于存储数据的重要机制。
-
参数服务器
参数服务器是可通过网络访问的共享的多变量字典,通过关键字存储在节点管理器上。
-
节点管理器(Master)
节点管理器用于主题、服务名称的注册和查找等。在整个ROS系统中如果没有节点管理器,就不会有节点之间的通讯。
文件系统集
功能包之间可以配置依赖关系。如果功能包A依赖功能包B,那么在ROS构建系统时,B一定要早于A的构建,并且A可以使用B中的头文件和库文件。
文件系统级的概念如下:
-
功能包清单:
这个清单是指明功能包的依赖关系、源文件编译标志信息等。功能包中的package.xml文件就是一个功能包清单。
-
功能包:
功能包是ROS系统中软件组织的基本形式,包含运行的节点以及配置文件等。
-
综合功能包
将几个功能包组织在一起,即可形成综合功能包。
-
消息类型
ROS中节点之间发送消息时需要事先进行消息说明。ROS中提供了标准类型消息,也可以自行定义。消息类型的说明存储在功能包下的msg文件内。
-
服务类型
定义了在ROS系统中由每个进程提供的关于服务请求和响应的数据结构。

通讯机制
-
Topic
ros中广为使用的是异步的 publish-subscribe 通讯模式。Topic 一般 用于单向,消息流通讯。Topic 一般拥有很强的类型定义:一种类型的topic只能接受/ 发送特定数据类型(message type)的message。Publisher 没有被要求类型一致性,但是接受时subscriber会检查类型 的md5,进而报错。

-
Service
service 用于处理ros通讯中的同步通讯,采用server/client 语义。每个service type拥 有 request 与 response两部分,对于service中的 server,ros不会检查重名(name conflict),只有最后注册的server会生效,与client建立连接。

-
Action
action使用多个topic组成,用于定义任务,任务定义包括目标(Goal)、任务执行过程状态反馈(Feedback)和结果(Result)等。编译action将会自动产生7个结构体分别为:Action、ActionGoal、ActionFeedback、ActionResult、Goal、Feedback、Result结构体。

Action的特点:
一种问答通讯机制
带有连续反馈
可以在任务中终止进行
基于ROS的消息机制实现
Action的接口:
goal:发布任务目标
cancel:请求取消任务
status:通知客户端当前状态
feedback:周期反馈任务运行的监控数据
result:向客户端发送任务的执行结果,只发布一次。
通讯模式特点对比
| 特点 | Topic | Service | Action |
|---|---|---|---|
| 响应机制 | 无 | 结果响应 | 进度响应,结果响应 |
| 同步性 | 异步 | 同步 | 异步 |
| 通讯模型 | Publisher,Subscriber |
Client,Server |
Client,Server |
| Node对应关系 | 多对多 | 多(Client)对一(Server) | 多(Client)对一(Server) |
常用组件
launch启动文件;TF坐标变换;Rviz;Gazebo;QT工具箱;Navigation;MoveIt!
-
launch:启动文件(Launch File)是ROS中一种同时启动多个节点的途径,它还可以自动启动ROS Master节点管理器,并且可以实现每个节点的各种配置,为多个节点的操作提供很大便利。
-
TF坐标变换:机器人本体和机器人的工作环境中往往存在大量的组件元素,在机器人设计和机器人应用中都会涉及不同组件的位置和姿态,TF是一个让用户随时间跟踪多个坐标系的功能包,它使用树形数据结构,根据时间缓冲并维护多个坐标系之间的坐标变换关系,可以帮助开发者在任意时间、在坐标系间完成点、向量等坐标的变换。
-
QT工具箱:为了方便可视化调试和显示,ROS提供了一个Qt架构的后台图形工具套件——
rqt_common_plugins,其中包含不少实用工具:日志输出工具(rqt_console)、计算图可视化工具(rqt_graph)、数据绘图工具(rqt_plot)、参数动态配置工具(rqt_reconfigure) -
Rviz:rviz是一款三维可视化工具,很好地兼容了各种基于ROS软件框架的机器人平台。在rviz中,可以使用XML对机器人、周围物体等任何实物进行尺寸、质量、位置、材质、关节等属性的描述,并且在界面中呈现出来。同时,rviz还可以通过图形化方式,实时显示机器人传感器的信息、机器人的运动状态、周围环境的变化等。
-
Gazebo:Gazebo是一个功能强大的三维物理仿真平台,具备强大的物理引擎、高质量的图形渲染、方便的编程与图形接口,最重要的还有其具备开源免费的特性。虽然Gazebo中的机器人模型与rviz使用的模型相同,但是需要在模型中加入机器人和周围环境的物理属性,例如质量、摩擦系数、弹性系数等。机器人的传感器信息也可以通过插件的形式加入仿真环境、以可视化的方式显示。
-
Navigation:navigation是ROS的二维导航功能包,简单来说,就是根据输入的里程计等传感器的信息流和机器人的全局位置,通过导航算法,计算得出安全可靠的机器人速度控制指令。
-
Moveit:Moveit!功能包是最常用的工具包,主要用来进行轨迹规划。Moveit!配置助手用来配置一些在规划中需要用到的文件,非常关键。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)