机器人硬件
简介
机器人由感知、决策和控制三部分组成。 感知部分是通过各种传感器来实现的 ,比如激光雷达和编码器; 决策部分软件则是由各种算法组合实现的,比如可以进行路径规划和运动控制的Navigation 2, 硬件则依托性能较强的处理器实现; 控制部分通常是 由驱动系统和电动机组成的。除了感知、决策和控制部分,一个机器人要想动起来还需要一些硬件来配合 , 比如电池、电源模块以及必要的支撑结构等
执行器
电机
通电的线圈会产生磁场。有刷电机比较容易坏,所以robot用3种
- 舵机, 舵机=电机 + 传动 + 传感 + 控制 一体的高度集成模块,执行“控制 ==> 执行 ==> 反馈”的闭环。
- 电机,提供原始旋转动力
- 减速齿轮组,降低转速,同时放大扭矩
- 位置传感器,通常是电位器,实时测量输出轴当前角度
- 控制电路,微型PID控制器,接收指令(比如角度 ),并根据传感器反馈进行闭环控制
- 步进电机。它的运动是离散的、数字化的。转过的角度= 步数 * 步进角。精度高。负载不大。
- 直流无刷电机
传动
电机通常具有“高转速、低扭矩”的特性,比如一个小型直流电机可以轻易达到每分钟上万转,但你用手就可以轻松捏住它的轴。而机器人手臂需要的是”低转速、高扭矩“,才能举起重物。
程序访问设备的三层接口
CAN(Controller Area Network)是通信总线。在“连接外部设备”的层面,它更适合类比 USB,而不是南桥、北桥这样的芯片。多个 CAN 节点共享总线(意味着主控不用为每个关节准备一个串口,而是通过设备 ID 区分它们),通过仲裁决定发送顺序;CAN_H、CAN_L 用于通信,设备还需要供电。CAN 本身不规定“舵机转到某个角度”的含义,需要 CANopen 或厂商协议继续定义。
| 层次 | 摄像头的例子 | 智能舵机的例子 |
|---|---|---|
| Linux 设备访问接口 | V4L2,常见设备节点 /dev/video0;配置采集参数、读取图像帧 |
串口接口,如 /dev/ttyUSB0;或通过 SocketCAN 接口收发 CAN 帧 |
| SDK/用户态库 | OpenCV VideoCapture 封装视频后端,向程序返回图像 |
Dynamixel SDK 等库封装设备寻址、寄存器读写和通信协议 |
| 机器人语义 | 带时间戳、相机坐标系和标定参数的图像数据 | 按关节名称提供位置、速度等命令与反馈,例如 shoulder_joint/position |
Linux 对不同设备提供的抽象深度不同:文件和网络有成熟的系统级接口,摄像头等有专门的设备子系统;许多智能舵机则复用通用通信接口,由用户态 SDK 和机器人框架进一步封装设备协议与关节语义。 ||Linux 提供的抽象|用户态程序负责什么|示例| |—|—|—|—| |通用系统功能|VFS、socket 等接口,以及文件系统、网络协议栈|读写文件、建立连接,通常不必处理设备协议|文件存储、网络通信| |标准化设备类别|V4L2、ALSA、input 等设备子系统|采集图像、播放声音、接收按键等|摄像头、音频、输入设备| |通过通用通信接口连接的设备|串口、SocketCAN、USB 访问接口等|由 SDK/协议库解释设备命令、数据格式和控制语义|许多智能舵机、仪器、自定义控制板|
ros2_control 在设备协议之上提供统一的关节命令与状态接口。Controller 负责产生关节命令,Hardware Component 负责把命令落实到具体硬件。以 ROBOTIS 的 dynamixel_hardware_interface 为例,发送链路如下。SDK 部分采用 Sync Write 路径,省略初始化、配置和错误处理。
用户态(Linux 机器人主控电脑)
ROS 2 应用 Node
发布目标关节位置或轨迹
↓ Topic / Action
ros2_control:Controller(控制器)
接收目标,在 update() 中计算本周期的关节指令
更新 command interface
例如 shoulder_joint/position = 0.9 rad
↓ 更新内存中的命令值
ros2_control:Hardware Component(硬件适配插件)
本例实现:DynamixelHardware
DynamixelHardware::write()
由 Controller Manager 的控制循环调用
↓
CalcJointToTransmission()
按传动映射关系,将关节命令转换为执行器命令
↓
WriteMultiDxlData()
选择 Sync Write / Bulk Write 路径
在具体写入路径中换算设备单位、组织待写入数据
↓ 调用 SDK
Dynamixel SDK(用户态库)
GroupSyncWrite::addParam():加入目标设备及写入数据
GroupSyncWrite::txPacket():封装协议报文并发送
报文包含设备 ID、写入地址、数据及校验等信息
↓ 调用 Linux write() 等 OS 接口
──────────── 用户态 / 内核态边界 ────────────
内核态:串口或 USB 转串口驱动
管理通信硬件,完成字节发送
↓ 串行链路(按型号经适配电路连接 TTL / RS-485 总线)
──────────── 主控电脑 / 舵机边界 ────────────
舵机内部:控制 MCU / 固件
解析协议报文,更新目标位置等控制寄存器
↓
本地控制环:根据目标位置与位置反馈计算驱动输出
↓
功率驱动电路 → 电机与传动机构 → 关节运动
↑ │
└──── MCU 根据位置传感器反馈调整 ─┘
传感器
机器 人 的感知往往 由 各 种传感器 实现
激光雷达
在激光 雷达的 头部有 一 个 激光 发 射头和 线性 CCD 接收 头 ,发 射 头发 射出的 光 属 于 波长在 1000 nm 左右的红外光,肉眼 是 不 可见的 ,接收 头收 到 反射的 激光就 可以 计算 出障碍 物的距离。
编码器
在移动机器人中我们需要实时地获取机器人各个轮子的转速,根据机器人的运动学模型将每个轮子的转速转换成机器人的速度,通过对速度进行积分得到机器人行走的距离和角度,也就是里程计数据,编码器位于电动机的后部。
IMU(Inertial Measurement Unit)
IMU固定在机器人躯干上的惯性测量单元,常见的六轴 IMU 包含:
| 部件 | 测量什么 | 直观理解 |
|---|---|---|
| 三轴加速度计 Accelerometer | 三个方向的比力;静止时读数可用于判断重力方向 | 身体是否倾斜、是否受到加速或冲击 |
| 三轴陀螺仪 Gyroscope | 绕三个轴的角速度 | 身体正朝哪个方向旋转、转得多快 |
决策部分
决策部分主要负责根据传感器数据以及任务要求来控制机器人的运动,决策部分的硬件一般使用处理能力较强的计算机,比如性能较强但体积更小的工控机,像树莓派和Jetson Nano一样的卡片式计算机等。
决策系统往往需要较大的算力,所以硬件成本也是最高的,为了节省成本,一些机器人采用了同时支持无线和有线连接的驱动控制板(下位机),让大家可以直接使用自己的计算机作为决策端(上位机),可以直接感知并控制系统进行通信。
单片机
做实体机器人无法避免和硬件系统打交道,机器人的传感器驱动和电动机控制,都是在微型控制单元(Micro Control Unit,MCU)上编码完成的,MCU又称单片微型计算机,简称单片机,而编写在单片机上的代码叫单片机开发。比如国产的单片机ESP32,该单片机支持Wi-Fi、蓝牙等无线通信,通过该单片机以及其外围电路我们可以方便地读取传感器数据并进行电动机控制。
| MAC | 单片机开发 | |
|---|---|---|
| 硬件 | Mac 整机,内部有 Apple 芯片、内存、SSD 等 | ESP32 控制板,包含 MCU、Flash、电源和接口等 |
| 处理器 | Apple M 系列中的 CPU | ESP32 内部的 CPU,具体架构取决于型号 |
| 操作系统 | macOS | 比如ESP32 软件栈底层使用 FreeRTOS |
| SDK/开发框架 | macOS SDK/AppKit等 | ESP-IDF/Arduino |
| 编程语言 | Swift、Objective-C、C/C++ 等 | 主要是 C/C++ |
| 编译工具 | Swift 编译器、Clang 等 | 面向目标 ESP32 芯片的交叉编译工具链 |
| 构建产物 | 可执行文件、.app |
固件镜像,例如 .bin |
| 部署方式 | 复制/安装应用 | 将固件烧录到 Flash,对于FreeRTOS内核 + 驱动 + 业务代码通常一起链接 |
| 运行方式 | 启动应用,macOS 创建进程 | 控制板上电或复位后,由启动程序启动固件 |
| 查看输出 | 终端、调试控制台 | 串口监视器、调试器等 |
一般单片机开发流程分为四步,分别是编写代码、编译工程、烧录二进制文件和运行测试。
留下评论