自动驾驶---两轮自行车的自主导航
1 背景
无人驾驶汽车最早出现在DARPA的比赛中,从那个时刻开始,逐渐引起全球学者的注意,于是从上个世纪开始各大高校院所开始了无人汽车的研发。直到这两年,无人驾驶汽车才开始走进寻常百姓家,虽然目前市面上的乘用车还不是严格意义的上无人驾驶(只能算作L2级别),做到L4才是真正的无人驾驶。反而无人驾驶自行车因为应用场景很少,出现的更晚一些,本篇博客主要带领读者朋友们熟悉无人自行车的相关知识。

2 无人自行车发展
无人自行车其实也是一种融合了多种先进技术,能够在无人工直接干预的情况下自主行驶、完成各种动作和任务的自行车。在功能上和汽车并无区别,只不过在动力形式上以及底盘上区别比较大,另一个比较大的区别就是应用市场,无人自行车应用场景很少,但汽车作为载人,载物的交通工具应用场景广泛。
2.1 发展历史
无人自行车的发展源于人们对自动驾驶技术的探索以及对传统自行车功能的拓展和创新。早期,谷歌等科技巨头曾提出相关概念,但当时的技术还无法实现真正意义上的无人自行车。
- 2016年谷歌曾设想研发 “无人驾驶自行车”,让坐在上边的人能一边骑车一边办公,不过其发布的视频中的画面是后期剪辑和特效制作的,并未真正实现。
- 2019年,清华大学类脑计算研究中心施路平教授团队研制成功面向人工通用智能的新型类脑计算芯片 “天机芯”,并成功在无人自行车上进行了实验,实现了包括视觉检测、目标追踪、自动过障和避障、自适应姿态控制、语音理解控制、自主决策等功能在内的跨模态类脑信息处理。
- 2020年,“稚晖君” 耗时 4 个月制成了一辆硬核无人驾驶自行车,不仅能在静止状态站立住,即使在单侧加上一块砖头,仍能保持平衡,还可以自动行进,自动避开障碍物,根据地形自己规划出一条路线。
- 2024年3月份,雅迪冠能6代Q50在AW24中国国际时装周T台上惊艳亮相,以大开眼界的无人驾驶科技成为全场焦点。

2.2 关键技术与工作原理
- 传感器:配备多种传感器来感知周围环境和自身状态,如摄像头可识别道路、行人与车辆等物体;惯性测量单元用于测量自行车的倾斜角、加速度等参数,以辅助保持平衡。
- 控制系统:以先进的芯片或控制器为核心,如清华大学无人自行车中的 “天机芯”,对传感器收集到的大量数据进行快速处理和分析,并根据预设的算法和规则做出决策,向致动器发出指令,实现对自行车的转向、加速、减速、刹车等控制,以完成各种动作和应对不同的路况。
- 自主导航:通过常用的导航算法完成全局规划,匹配对应的局部规划算法接收传感器信息,定位信息进行避障,完成相应的任务。
- 平衡控制:通过传感器实时监测自行车的倾斜状态,控制系统根据倾斜角度和速度等信息,精确控制致动器调整自行车的姿态,保持平衡。
2.3 不同类型及特点
- 实验研究型:如清华大学的无人自行车,主要用于科研实验,搭载了复杂的传感器和先进的计算芯片,具备强大的环境感知和信息处理能力,可进行多种类脑信息处理实验,为人工智能和机器人技术的研究提供重要的数据和实践基础。
- 创意概念型:像 of my imagination 工作室设计的 Hop 无人自行车,外形独特,更像是一个大号的滑板车,没有座椅,人站在上面,车身配有触摸屏、储物空间等,最多可搭乘 4 人,设计上侧重于未来感和实用性的结合,适用于特定场景下的出行和运输需求。
- 个人制作型:以 “稚晖君” 制作的无人自行车为代表,体现了个人的创新能力和技术实力,在平衡控制、自主导航等方面表现出色,其制作过程融合了软件开发设计、CAD 建模、电机控制等多种技术,展示发烧友在科技创新领域的探索精神和创造力。

3 无人自行车原理
无人自行车主要包含两个关键技术:(1)保持平衡;(2)自主行驶。第一个技术类似“不倒翁”,在复杂路面下,如何保持两轮自行车的平衡是第一个难点。第二个难点是自主行驶,这一点就和无人驾驶汽车非常相似了。下面着重介绍第一个难点,第二个难点笔者会做简单的介绍。
3.1 平衡器

当系统一个动力角动量发生变化的时候,就会将力矩传递给其他物体,上图中这辆自行车中间的无刷电机,驱动的就是一个金属的动量轮。
(1)原理介绍
- 基本概念
- 动量轮是一种能够储存和改变角动量的装置。角动量是描述物体绕轴转动状态的物理量,其大小等于转动惯量与角速度的乘积。在无人自行车平衡系统中,动量轮通过改变自身的角动量来对自行车整体的角动量产生影响,从而实现平衡。
- 平衡原理
- 抵消倾斜产生的角动量:当无人自行车发生倾斜时,就会产生一个绕倾斜轴的角动量。例如,当自行车向左倾斜时,会产生一个逆时针方向(假设从自行车后方往前看)的角动量。此时,动量轮可以通过快速旋转来产生一个与之相反的角动量。动量轮可以通过电机驱动在短时间内加速旋转,根据角动量守恒定律,系统(自行车和动量轮整体)的总角动量在没有外力矩的情况下是守恒的。所以,动量轮增加的顺时针角动量可以抵消自行车倾斜产生的逆时针角动量,使自行车恢复到平衡状态。
- 产生扶正力矩:动量轮的高速旋转不仅能抵消角动量,还能产生一个扶正力矩。由于动量轮的转动轴与自行车的车身相连,当动量轮改变角动量时,根据牛顿第三定律,会对自行车车身产生一个反作用力矩。这个力矩可以促使自行车车身绕倾斜轴反向转动,从而使自行车回到垂直位置。例如,如果动量轮顺时针加速旋转,会对自行车产生一个逆时针方向的力矩,这个力矩就像有人在把倾斜的自行车扶正一样,使自行车恢复平衡。
- 控制策略
- 传感器反馈控制:需要精确的传感器来监测自行车的倾斜状态。惯性测量单元(IMU)可以测量自行车的倾斜角和角速度。控制系统根据这些传感器数据来确定动量轮需要的角动量变化量。例如,当倾斜角较大且角速度较快时,控制系统会命令动量轮以更大的加速度旋转,以产生足够的反向角动量和扶正力矩来纠正倾斜。
- 与其他平衡方法协同:动量轮平衡方法通常可以与其他平衡技术相结合。例如,与驱动电机控制和转向控制相结合。在一些情况下,当动量轮开始纠正自行车倾斜时,驱动电机可以适当调整车速,转向电机可以微调车把角度,三者协同工作,更有效地保持自行车的平衡,以应对复杂的行驶情况和外界干扰。
(2)其它应用
- 航天领域
- 卫星等航天器姿态控制:动量轮是卫星姿控系统的关键执行部件。卫星在太空中需要精确保持特定的姿态,以确保其各种仪器设备能够正常工作、与地面通信顺畅以及准确地进行科学探测等。通过控制动量轮的转速和方向,改变其角动量,从而产生反作用力矩来稳定或调整卫星的姿态,可使卫星在旋转轴方向以及垂直于旋转轴的两个方向保持稳定,实现高精度的三轴稳定控制。
- 航空领域
- 飞机姿态稳定:在一些先进的飞机设计中,动量轮可用于辅助飞机的姿态控制系统,帮助飞机在飞行过程中更快速、精确地调整姿态,提高飞行的稳定性和安全性。尤其是在应对气流干扰、机动飞行等情况下,动量轮能够快速产生相应的力矩,增强飞机的姿态控制能力,减少飞行员的操作负担。
- 机器人领域
- 平衡控制:在一些特殊的机器人设计中,如单轮或双轮自平衡机器人、无人自行车等,动量轮被用于实现机器人的平衡控制。通过控制动量轮的转动来产生扶正力矩,抵消机器人倾斜时产生的角动量,使机器人能够在静止或运动状态下保持直立平衡,并且具备一定的抗干扰能力。
3.2 自主系统
自主系统或者自动驾驶系统目前也基本分为感知、定位,规控等几个模块。相关模块可参考笔者的系列博客《自动驾驶感知》《自动驾驶决策规划控制》,最近比较热门的《端到端》以及一些通识的自动驾驶相关技术《自动驾驶通识技术》。
(1)实时感知
无人自行车可以实时感知周围环境,在跟随前方试验人员的同时自动进行避障操作。自行车上可安装比较常用的传感器主要就是摄像头和激光雷达。
(2)决策规划
自行车场景目前研究的可能更多的是非结构化场景,因此规划算法更多的是采样比如RRT算法,以及图搜索算法A*。
(3)定位
目前还是一些比较简单的非商用的GPS,可以用于定位精度不高的场景。
下面再补充清华大学无人自行车上的“天机芯”相关信息:
-
“天机芯”技术
- 清华大学研究团队在自行车控制器内部装了一款名叫“天机”(Tianjic)的人工通用智能芯片,这款芯片是中国自主研制的,也是全球首款异构融合类脑芯片。
- “天机芯”控制的无人自行车不只是一次成功实验,更是一种具有启迪意义的新平台、新思路。团队通过这辆类脑自动行驶自行车,建立了一个异构可扩展人工通用智能开发演示平台。
-
成果
- 搭载“天机芯”的无人智能自行车已经可以完成语音识别、目标锁定、障碍辨别和自主决策等功能。
- 清华大学研制的这款无人驾驶自行车,因其背后的“天机芯”技术,登上了全球顶尖期刊《自然》杂志的封面,实现了中国在芯片和人工智能两大领域《自然》论文零的突破。
相关文章:
自动驾驶---两轮自行车的自主导航
1 背景 无人驾驶汽车最早出现在DARPA的比赛中,从那个时刻开始,逐渐引起全球学者的注意,于是从上个世纪开始各大高校院所开始了无人汽车的研发。直到这两年,无人驾驶汽车才开始走进寻常百姓家,虽然目前市面上的乘用车还…...
哈夫曼树并查集
(1)哈夫曼树 特殊概念: 1.结点的权:表示结点树的重要性 2.带权路径长度:从树的根到该节点的路径长度(经过的边数)与该节点上权值的乘积 2.树的带权路径长度:该树的所有叶子节点的…...
PyTorch数据建模
回归分析 import torch import numpy as np import pandas as pd from torch.utils.data import DataLoader,TensorDataset import time strat = time.perf_counter()...
在 Ubuntu 上安装 Node.js 23.x
在 Ubuntu 上安装 Node.js 23.x 前提条件安装步骤1. 下载设置脚本2. 运行设置脚本3. 安装 Node.js4. 验证安装 参考链接总结 在现代 web 开发中,Node.js 是一个不可或缺的工具。它提供了一个强大的 JavaScript 运行时环境,使得开发人员可以在服务器端使用…...
SQL范式与反范式_优化数据库性能
1. 引言 什么是SQL范式 SQL范式是指数据库设计中的一系列规则和标准,旨在减少数据冗余、提高数据完整性和一致性。常见的范式包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和BCNF(Boyce-Codd范式)。 什么是SQL反范式 SQL反范式是指在满足范式要求的基础上,有…...
hunyuan 混元学习
使用了5个subset,也是用了text-image和text-video进行训练的 也是进行了复杂的视频选择。同movie gen. 也进行了模型切断,用拉普拉斯算子找到最清晰的一帧作为训练的起始 训练了不同的模型去选择数据,比如用Dover去选择美观度比较好的数据,…...
四、GPIO中断实现按键功能
4.1 GPIO简介 输入输出(I/O)是一个非常重要的概念。I/O泛指所有类型的输入输出端口,包括单向的端口如逻辑门电路的输入输出管脚和双向的GPIO端口。而GPIO(General-Purpose Input/Output)则是一个常见的术语,…...
.Net / C# 繁体中文 与 简体中文 互相转换, 支持地方特色词汇
版本号 Nuget 搜索 “OpenCCNET”, 注意别找错, 好多库的名字都差不多 支持 “繁,简” 的互相转换, 支持多个地区常用词汇的转换, 还支持 日文的新旧转换. OpenCC 在 .Net 中的实现 https://github.com/CosineG/OpenCC.NET <PackageReference Include"OpenCCNET"…...
一元函数微积分的几何应用:二维平面光滑曲线的曲率公式
文章目录 前言曲率和曲率半径的定义曲率计算公式参数方程形式直角坐标显式方程形式极坐标形式向量形式 前言 本文将介绍二维平面光滑曲线的曲率定义以及不同形式的曲率及曲率半径公式的推导。 曲率和曲率半径的定义 (关于二维平面光滑曲线的定义以及弧长公式请参…...
数据结构与算法之异步: LeetCode 1114. 按序打印 (Ts版)
按序打印 https://leetcode.cn/problems/print-in-order/description/ 描述 给你一个类: public class Foo {public void first() { print("first"); }public void second() { print("second"); }public void third() { print("third&qu…...
python:求解爱因斯坦场方程
在物理学中,爱因斯坦的广义相对论(General Relativity)是描述引力如何作用于时空的理论。广义相对论由爱因斯坦在1915年提出,并被阿尔伯特爱因斯坦、纳森罗森和纳尔逊曼德尔斯塔姆共同发展。广义相对论的核心方程是爱因斯坦场方程…...
PostgreSQL 数据备份与恢复:掌握 pg_dump 和 pg_restore 的最佳实践
title: PostgreSQL 数据备份与恢复:掌握 pg_dump 和 pg_restore 的最佳实践 date: 2025/1/28 updated: 2025/1/28 author: cmdragon excerpt: 在数据库管理中,备份与恢复是确保数据安全和业务连续性的关键措施。PostgreSQL 提供了一系列工具,以便于数据库管理员对数据进行…...
位运算的概念
文章目录 整数在计算机中的表示二进制表示有符号类型和无符号类型机器数和真值原码、反码和补码原码、反码和补码的表示方法计算机中的表示 位运算与、或、异或和取反移位运算移位运算与乘除法的关系位运算的性质 目录 整数在计算机中的表示 二进制表示 程序中的所有数在计算…...
自主Shell命令行解释器
什么是命令行 我们一直使用的"ls","cd","pwd","mkdir"等命令,都是在命令行上输入的,我们之前对于命令行的理解: 命令行是干啥的?是为我们做命令行解释的。 命令行这个东西实际上是我们…...
Vue.js 的介绍与组件开发初步
Vue.js 的介绍与组件开发初步 Vue.js 的介绍与组件开发初步引言第一部分:Vue.js 基础入门1.1 什么是 Vue.js?1.2 搭建 Vue.js 开发环境安装 Node.js 和 npm安装 Vue CLI创建新项目运行示例 1.3 第一个 Vue.js 示例 第二部分:Vue.js 组件开发基…...
XCCL、NCCL、HCCL通信库
XCCL提供的基本能力 XCCL提供的基本能力 不同的XCCL 针对不同的网络拓扑,实现的是不同的优化算法的(不同CCL库最大的区别就是这) 不同CCL库还会根据自己的硬件、系统,在底层上面对一些相对应的改动; 但是对上的API接口…...
Python教学:文档处理及箱线图等
代码1: import os import pandas as pd import numpy as py import os.path from os import listdir import openpyxl from openpyxl import Workbook import re import matplotlib.pyplot as plt # 导入matplotlib的绘图模块,用于可视化 cwdos.getcwd…...
【Redis】安装配置Redis超详细教程 / Linux版
Linux安装配置Redis超详细教程 安装redis依赖安装redis启动redis停止redisredis.conf常见配置设置redis为后台启动修改redis监听地址设置工作目录修改密码监听的端口号数据库数量设置redis最大内存设置日志文件设置redis开机自动启动 学习视频:黑马程序员Redis入门到…...
【大数据技术】教程05:本机DataGrip远程连接虚拟机MySQL/Hive
本机DataGrip远程连接虚拟机MySQL/Hive datagrip-2024.3.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso写在前面 本文主要介绍如何使用本机的DataGrip连接虚拟机的MySQL数据库和Hive数据库,提高编程效率。 安装DataGrip 请按照以下步骤安装DataGrip软…...
springboot 启动原理
目标: SpringBootApplication注解认识了解SpringBoot的启动流程 了解SpringFactoriesLoader对META-INF/spring.factories的反射加载认识AutoConfigurationImportSelector这个ImportSelector starter的认识和使用 目录 SpringBoot 启动原理SpringBootApplication 注…...
llama.cpp GGUF 模型格式
llama.cpp GGUF 模型格式 1. Specification1.1. GGUF Naming Convention (命名规则)1.1.1. Validating Above Naming Convention 1.2. File Structure 2. Standardized key-value pairs2.1. General2.1.1. Required2.1.2. General metadata2.1.3. Source metadata 2.2. LLM2.2.…...
使用Pytorch训练一个图像分类器
一、准备数据集 一般来说,当你不得不与图像、文本或者视频资料打交道时,会选择使用python的标准库将原始数据加载转化成numpy数组,甚至可以继续转换成torch.*Tensor。 对图片而言,可以使用Pillow库和OpenCV库对视频而言…...
PythonStyle MVC 开发框架
在 Python 中,MVC(Model - View - Controller,模型 - 视图 - 控制器)是一种常见的软件设计模式,它将应用程序分为三个主要部分,各自承担不同的职责,以提高代码的可维护性、可扩展性和可测试性。…...
HTTP协议的无状态和无连接
无连接 ①无连接的含义 这里所说的无连接并不是指不连接,客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。这种一次性连接主要考…...
毫秒级响应的VoIP中的系统组合推荐
在高并发、低延迟、毫秒级响应的 VoIP 场景中,选择合适的操作系统组合至关重要。以下是针对 Ubuntu linux-lowlatency、CentOS Stream kernel-rt 和 Debian 自定义 PREEMPT_RT 的详细对比及推荐: 1. 系统组合对比 特性Ubuntu linux-lowlatencyCentO…...
PWN--格式化字符串
简介 格式化字符串是指在编程过程中,通过特殊的占位符将相关对应的信息整合或提取的规则字符串。格式化字符串包括格式化输入和格式化输出,其本质是程序员调用相关格式化字符串的操作协议规定。错误的或不当的信息配置可能导致程序运行失效或产生未…...
tf.Keras (tf-1.15)使用记录2-基于tf.keras.layers创建层
tf.keras.layers是keras的主要网络创建方法,里面已经有成熟的网络层,也可以通过继承的方式自定义神经网络层。 在keras的model定义中,为了保证所有对数据的操作都是可追溯、可保存、可反向传播,需要保证对数据的任何操作都是基于t…...
面试经典150题——栈
文章目录 1、有效的括号1.1 题目链接1.2 题目描述1.3 解题代码1.4 解题思路 2、2.1 题目链接2.2 题目描述2.3 解题代码2.4 解题思路 3、最小栈3.1 题目链接3.2 题目描述3.3 解题代码3.4 解题思路 4、逆波兰表达式求值4.1 题目链接4.2 题目描述4.3 解题代码4.4 解题思路 5、基本…...
FBX SDK的使用:读取Mesh
读取顶点数据 要将一个Mesh渲染出来,必须要有顶点的位置,法线,UV等顶点属性,和三角面的顶点索引数组。在提取这些数据之前,先理解FBX SDK里面的几个概念: Control Point 顶点的位置,就是x,y,z…...
EtherCAT主站IGH-- 49 -- 搭建xenomai系统及自己的IGH主站
EtherCAT主站IGH-- 49 -- 搭建xenomai系统及自己的IGH主站 0 Ubuntu18.04系统IGH博客、视频欣赏链接一 移植xenomai系统1,下载安装工具包2,下载linux内核及xenomai2.1,下载linux内核2.2,下载xenomai2.3,下载补丁ipipe2.4,解压缩包3,打补丁4,配置内核5,编译内核6,安装编译好的内…...
