3. Ubuntu、终端与程序¶
ROS 2 程序运行在主控计算机上。要读懂后面的启动命令和故障信息,需要先认识操作系统、文件、程序、进程和终端之间的关系。
3.1 主控首先是一台计算机¶
WHEELTEC 机器人的主控可能是树莓派、Jetson、RDK、Atlas 或工控机。它与普通计算机一样,包含处理器、内存、存储设备和网络接口。传感器通常通过通用串行总线接口、串行端口或网络接入主控,ROS 2 程序在主控上读取数据并完成计算。串行端口是计算机与外部设备交换字节流的接口;在 Ubuntu 中,它通常会以 /dev/ttyUSB0 或 /dev/ttyACM0 这样的设备文件出现。
开发与排障时,我们关心三类对象:磁盘中保存的文件、内存中运行的进程,以及连接主控硬件的设备。操作系统负责统一管理这些对象。
3.2 操作系统管理什么¶
操作系统(Operating System, OS)位于硬件与应用程序之间。它分配处理器时间和内存,组织文件,管理用户权限、网络连接和外接设备,并为上层程序提供稳定的运行环境。
Ubuntu 是一种 Linux 操作系统,也是许多 WHEELTEC 主控采用的系统。系统启动后,Ubuntu 先建立计算与设备环境,ROS 2 节点随后在这个环境中运行。
机器人应用与 ROS 2 节点
↓
Ubuntu 操作系统
↓
处理器、内存、磁盘、网络和外接设备
3.3 文件与目录¶
文件(File)保存程序、配置、地图和日志等内容,目录(Directory)用于组织文件和下级目录。图形文件管理器中的“文件夹”,在命令行语境中通常称为目录。
目录构成树状结构。终端始终位于其中一个目录,这个位置称为当前工作目录。执行查找、编译或修改命令前先确认当前位置,可以减少路径错误。
常见路径示例:
/home/wheeltec/robot_ws/src
从左到右依次表示根目录、用户主目录、工作空间和源码目录。路径中的 / 用于分隔各级目录。
3.4 程序与进程¶
程序是保存在存储设备中的可执行内容,包含完成某项工作的指令。程序开始运行后,操作系统为它建立进程(Process),并分配内存、设备句柄和运行状态。进程是程序的一次运行实例;关闭终端窗口不一定会结束所有进程,因此排障时要查看实际运行状态。
同一程序可以启动多次,因此可能同时存在多个进程。ROS 2 排障常常需要回答两个问题:磁盘上是否安装了所需程序,运行时是否存在对应进程。前者检查安装和路径,后者检查启动状态与日志。
3.5 终端与命令¶
终端(Terminal)是输入文字命令并查看输出的窗口。命令由程序名和可选参数组成,按下回车后,终端把请求交给对应程序执行,再显示结果或错误信息。终端本身负责交互,真正执行命令的是命令解释器(Shell)。
例如,pwd 调用一个查看路径的程序,输出当前工作目录;ls 读取目录内容,并列出其中的文件和下级目录。命令行能够完整保留输入与输出,因此适合复现操作和记录故障。
3.6 本地终端与远程终端¶
主控连接显示器和键盘后,可以直接打开本地终端。主控接入网络后,另一台电脑可以通过安全外壳协议(Secure Shell, SSH)建立加密连接,打开远程终端。
SSH 负责传输键盘输入、文字输出和会话数据。命令仍由机器人主控执行,使用的是主控中的文件、用户权限和设备。配置远程连接前,应先在本地终端确认主控的用户名、网络地址与服务状态。
3.7 安全的观察命令¶
下面五条命令只读取系统状态,适合用来熟悉终端。
查看当前目录¶
pwd
代表性输出:
/home/wheeltec
列出当前目录内容¶
ls
输出通常包含 Desktop、Documents 等文件或目录名称。
查看系统与硬件架构¶
uname -a
输出包含 Linux 内核版本以及 aarch64、x86_64 等架构信息。
查看当前用户¶
whoami
输出是一行用户名。这个身份决定当前会话可以访问哪些文件和设备。
查看运行中的进程¶
ps -e | head
输出前几行会显示进程编号、终端和程序名称。命令列出的是正在运行的进程;磁盘中保存的程序需要通过文件路径或软件包信息另行检查。
3.8 本章小结与练习¶
Ubuntu 管理主控的计算、文件、网络和设备资源。文件保存内容,目录组织路径;程序运行后形成进程;终端通过命令调用程序并显示结果;SSH 把远程电脑连接到主控终端。
在 Ubuntu 电脑或机器人主控上依次运行第 3.7 节的命令,并记录下列结果:
| 观察对象 | 命令 | 需要记录的内容 |
|---|---|---|
| 当前目录 | pwd |
完整路径 |
| 目录内容 | ls |
两个文件或目录名 |
| 系统信息 | uname -a |
内核与硬件架构 |
| 当前用户 | whoami |
用户名 |
| 运行进程 | ps -e \| head |
两个进程名 |
最后解释:通过 SSH 登录主控后,命令使用的是哪台计算机的文件和设备?