Upkie开源机器人:如何用Python控制轮式双足机器人的平衡与运动?
【免费下载链接】upkieOpen-source wheeled biped robots项目地址: https://gitcode.com/gh_mirrors/up/upkie
在机器人技术快速发展的今天,开源硬件与软件的结合正在重塑机器人开发的门槛。Upkie作为一款开源轮式双足机器人,通过巧妙的设计和友好的开发者体验,为机器人爱好者、教育工作者和研究人员提供了一个独特的实验平台。不同于传统机器人要么依赖轮子要么依赖腿部的单一移动方式,Upkie创造性地将两者结合,实现了在平坦地面高效移动与在不平坦地形稳定行走的完美平衡。
双足轮式结构的创新设计理念
Upkie机器人最引人注目的特点是其独特的双足轮式结构设计。这种设计不是简单的叠加,而是经过精心计算和优化的结果。机器人的腿部关节采用mjbots qdd100 beta 3执行器,而轮子则使用mj5208无刷电机,这种组合让机器人既能在平坦地面上像传统轮式机器人一样高效移动,又能在遇到障碍或不平地形时通过腿部关节进行调整。
从技术角度看,Upkie采用模块化坐标系系统,每个关节和传感器都有明确的参考框架。上图展示了机器人的坐标系与锚定框架设计,这是机器人运动控制和空间定位的核心技术。蓝色(Z轴)、红色(X轴)、绿色(Y轴)的线条明确表示了机器人的局部坐标系,这些坐标系用于定义机器人各关节、肢体和传感器的位置与运动方向,是运动规划和动力学建模的基础。
核心设计优势包括:
- 倒立摆控制架构:机器人本质上是一个轮式倒立摆系统,通过精确控制轮子速度来维持平衡
- 模块化关节设计:六个旋转关节分别命名为
left_hip、left_knee、left_wheel、right_hip、right_knee、right_wheel,支持灵活扩展 - 实时姿态感知:IMU传感器提供精确的姿态和运动数据,支撑平衡控制算法
传感器融合与平衡控制技术
Upkie的平衡能力依赖于多传感器数据的融合处理。机器人的核心感知系统包括惯性测量单元(IMU)、关节位置传感器和接触检测传感器,这些数据通过复杂的算法处理,为控制决策提供实时反馈。
IMU作为平衡控制的核心传感器,被集成在机器人的躯干核心框架上。这张图片展示了IMU的安装与框架整合,其自身坐标系与全局坐标系对齐,确保传感器数据与机器人整体运动参考的一致性。红色、绿色、蓝色线条对应IMU的局部坐标系(X、Y、Z轴),用于标定加速度、角速度的测量方向。
传感器数据处理流程:
- IMU数据采集:实时感知机器人的姿态与运动,通过加速度计测量线性加速度(用于重力补偿),陀螺仪测量角速度(用于快速响应姿态变化)
- 关节状态监测:每个执行器都提供关节角度、速度和扭矩的精确测量
- 地面接触检测:通过轮子扭矩和加速度分析判断机器人与地面的接触状态
- 数据融合算法:将多源传感器数据融合,生成可靠的机器人状态估计
Python优先的开发体验
Upkie最显著的优势之一是它完全拥抱Python作为主要开发语言,这使得机器人控制变得异常简单。开发者可以使用熟悉的Python生态系统,无需深入C++或嵌入式系统编程,就能实现复杂的机器人行为控制。
快速入门示例:PD平衡控制
以下是一个简单的比例-微分(PD)平衡控制器示例,展示了如何在PyBullet模拟环境中让Upkie保持平衡:
import gymnasium as gym import numpy as np import upkie.envs upkie.envs.register() with gym.make("Upkie-PyBullet-Pendulum", frequency=1000, gui=True) as env: observation, info = env.reset() while True: pitch = observation[0] ground_position = observation[1] ground_velocity = observation[3] action = np.clip( a=[ 10.0 * pitch + 1.0 * ground_position + 0.1 * ground_velocity ], a_min=-0.99, a_max=0.99, ) observation, reward, terminated, truncated, info = env.step(action) if terminated or truncated: observation, info = env.reset()这个简单的控制器仅用几行代码就实现了基本的平衡功能,展示了Upkie开发框架的简洁性。控制增益(10.0、1.0、0.1)分别对应俯仰角、地面位置和地面速度的反馈权重。
模块化软件架构与进程间通信
Upkie采用创新的软件架构,将机器人控制分为两个独立的进程:Spine(脊柱)和Agent(代理)。这种分离设计带来了显著的灵活性优势。
进程间通信架构:
- Spine进程:负责底层硬件接口、传感器数据采集和执行器控制,运行在实时环境中
- Agent进程:运行高级控制算法和行为逻辑,可以使用Python等高级语言开发
- 共享内存通信:两个进程通过共享内存进行高效数据交换,实现软实时性能
状态机设计:
Upkie的Spine进程实现了一个精心设计的状态机,包含以下关键状态:
- 停止状态:向执行器发送停止命令,确保机器人安全
- 重置状态:应用运行时配置,初始化观测器和控制器
- 空闲状态:等待控制命令
- 执行状态:发送动作命令并返回观测数据
- 关闭状态:退出控制循环
这种设计允许开发者在模拟环境中测试和调试控制算法,然后无缝部署到真实机器人上,大大降低了开发风险。
丰富的观测数据与状态估计
Upkie提供了丰富的观测数据,为高级控制算法提供了充分的信息。观测系统采用观测器管道设计,多个观测器按顺序处理传感器数据,生成最终的观测字典。
主要观测数据类型:
| 观测器类型 | 观测键 | 描述 |
|---|---|---|
| 基础方向 | base_orientation | 估计浮动基座相对于世界坐标系的方向 |
| 地面接触 | floor_contact | 检测轮子与地面的接触状态 |
| 轮式里程计 | wheel_odometry | 测量机器人相对于地面的相对运动 |
| IMU数据 | imu | 惯性测量单元的原始和滤波数据 |
| 伺服状态 | servo | 各执行器的角度、速度和扭矩信息 |
观测数据处理流程:
- 原始数据采集:从IMU、关节编码器等传感器获取原始测量值
- 滤波与融合:应用卡尔曼滤波器等算法融合多源数据
- 状态估计:生成机器人姿态、速度、位置等状态估计
- 观测字典构建:将处理后的数据组织为结构化的观测字典
从模拟到实物的无缝迁移
Upkie的一个核心设计目标是实现模拟环境与真实机器人之间的无缝迁移。开发者可以在PyBullet模拟环境中开发和测试控制算法,然后通过简单的环境名称更改就能在真实机器人上运行相同的代码。
环境切换示例:
# 在模拟环境中运行 env = gym.make("Upkie-PyBullet-Pendulum", frequency=200.0) # 切换到真实机器人(仅需更改环境名称) env = gym.make("Upkie-Spine-Pendulum", frequency=200.0)这种设计大大降低了机器人开发的门槛,开发者可以在安全的模拟环境中进行大量实验,避免对昂贵硬件的损坏风险。
完整的开发工具链与生态系统
Upkie提供了一套完整的开发工具链,支持从硬件组装到软件部署的全流程开发。
核心开发工具:
- Pixi包管理器:管理Python依赖和环境配置
- Bazel构建系统:编译C++组件和固件
- Gymnasium兼容接口:提供标准的强化学习环境接口
- 丰富的示例代码:包含平衡控制、运动规划、强化学习等多个示例
开发工作流程:
- 环境配置:使用Pixi创建隔离的开发环境
- 模拟测试:在PyBullet中测试控制算法
- 代码部署:通过SSH将代码部署到机器人的Raspberry Pi
- 实时运行:在真实机器人上运行验证过的算法
教育应用与学习价值
Upkie不仅是一个研究平台,也是一个优秀的教育工具。它的开源特性和友好的开发体验使其成为机器人学习者的理想选择。
教育应用场景:
- 控制理论教学:通过实际机器人演示PID控制、状态反馈等概念
- 机器人学实验:学习运动学、动力学、传感器融合等核心概念
- 编程实践:使用Python实现机器人控制算法
- 硬件集成:了解执行器、传感器、嵌入式系统的集成方法
学习路径建议:
- 入门阶段:运行预置的平衡示例,理解基本控制原理
- 进阶阶段:修改控制参数,观察机器人行为变化
- 高级阶段:实现自定义控制算法,如模型预测控制(MPC)
- 研究阶段:开发新的运动模式或应用强化学习算法
社区贡献与项目发展
Upkie拥有活跃的开源社区,开发者可以通过多种方式参与项目贡献。
贡献方式:
- 代码贡献:提交bug修复、新功能或性能优化
- 文档改进:完善教程、API文档或开发指南
- 示例扩展:创建新的应用示例或演示
- 硬件改进:设计新的机械部件或电子模块
项目资源:
- 官方文档:docs/dev-notes.md 包含详细的开发指南
- 示例代码:examples/ 目录提供多个实用示例
- 测试套件:tests/ 目录包含完整的单元测试
- 构建脚本:使用项目提供的Makefile和构建工具
实际应用场景与未来发展
Upkie的设计使其适用于多种实际应用场景,从教育研究到专业开发都有用武之地。
当前应用领域:
- 学术研究:机器人控制算法、强化学习、运动规划的研究平台
- 工程教育:机器人工程、控制工程、机电一体化的教学工具
- 原型开发:新机器人概念和算法的快速验证平台
- 竞赛平台:机器人竞赛和挑战赛的基础平台
未来发展方向:
- 算法优化:改进平衡控制和运动规划算法
- 硬件升级:支持更多传感器和执行器类型
- 应用扩展:开发新的应用场景,如物流、服务机器人等
- 社区生态:建立更完善的开发者社区和生态系统
开始你的Upkie开发之旅
要开始使用Upkie,只需几个简单步骤:
- 获取源代码:克隆项目仓库
git clone https://gitcode.com/gh_mirrors/up/upkie - 安装依赖:使用Pixi或uv安装Python依赖
- 运行示例:尝试预置的平衡控制示例
- 探索文档:阅读开发指南和API文档
- 创建项目:基于现有示例开发自定义控制算法
Upkie的开源轮式双足机器人平台为机器人开发带来了前所未有的可访问性。无论是学术研究人员、工程教育者还是机器人爱好者,都能在这个平台上找到适合自己的开发路径。通过结合Python的易用性、模块化的硬件设计和丰富的软件生态,Upkie正在推动机器人技术向更广泛的人群开放,为下一代机器人创新奠定基础。
【免费下载链接】upkieOpen-source wheeled biped robots项目地址: https://gitcode.com/gh_mirrors/up/upkie
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考