ROS基本使用workspace

工作空间,工程项目

  • src

  • build

  • devel

  • install

src里面是开发者要关注的。在 Ubuntu 直接面对一滩源文件,和使用 IDE 有很大不同,很多东西都是手动的。

工作空间

mkdir -p ~/workspace_name/src
cd ~/workspace_name/src

# 创建工作空间的指令
catkin_init_workspace

编译需要在工作空间的根目录下,即 workspace_name

catkin_make

底层实现也是基于cmake的,所以使用这么个编译命令

设置环境变量

需要让 Linux 系统知道功能包在那里,告诉系统功能包位置

这个指令只在当前终端有效,可以直接把这个指令放在终端配置里

~ 文件夹里,ctrl+H 显示隐藏文件,就有 ``./bashrc` 了,加上这一句

可以查看以下当前的环境变量

创建功能包

安装了 VSCode 的 ROS 插件后,可以直接在 src 点击来创建,最简单的功能包

一个最简单的功能包,每个功能包都要有的两个文件CMakeLists.txtpackage.xml

一个工程不可以有重名的功能包。一台电脑上可以有多个工程存在,在不同工作空间下可以有同名功能包。这就有个问题,当有同名的功能包时,ros是如何解决的。

echo $ROS_PACKAGE_PATH指令会输出查找功能包的路径,在一个路径里找到了就不往后找了。新设置的路径在最前面,在使用时候就表现为新功能包覆盖老功能包。

这就是工作空间覆盖机制,有时候会有潜在风险。

创建第一个 ROS 程序

在 src 中新建文件

需要编辑 cmakelist.txt 文件来控制编译选项。自动生成的文件里有许多内容,根据需要来选择。

launch 文件

编译出来的可执行文件,可以单独启动,如使用 rosrun 命令,我们需要一次性启动这些东西,即使用 launch 文件。

  • 1.功能包内添加 launch 文件夹

  • 2.添加 .launch 文件

  • 3.编译要启动的节点

ROS 架构

ROS 的设计者:

  • 通讯机制(不同进程之间数据交互,ROS里的进程叫节点)

  • 工具软件包,开发调试等,rviz

  • 算法

ROS核心功能的实现一般不需要考虑,开发者一般关注功能部分,如CV,等。

ROS 系统架构分三层

  • OS,即操作系统,兼容最好的是 Ubuntu

  • 中间层,ROS 的实现

    • 基于 TCP/UDP 实现的 TCPROS/UDPROS 通信

    • 实时数据传输,进程间通信的 Nodelet 机制

    • 各种库,如数据类型、坐标变换、运动控制等

  • 应用层

    • 功能包,等,

ROS 自身,

  • 文件系统

    • 文件的组织形式

  • 计算图

    • 源码跑起来的数据交互关系

    • 节点、消息、等概念

查看当前的计算图 rqt_graph,理解多任务的一种方式。

Last updated