四博AI台灯是一个基于 LeLamp 台灯修改的开源项目。完善了视觉功能,修改了硬件方案中UVC摄像头和音频扩展板与WS2812的DMA资源共用带来的问题,接入了国产模型:GLM智普大模型。
- 其对中文的理解能力更好;
- 其次GLM部分版本模型完全免费使用,适合初学者入门学习;
- 第三是GLM带有ServerVAD功能,无需本地做唤醒词处理,降低客户端开发难度和硬件成本。
作为LeLamp的衍生版本,本项目修改了原代码在树莓派3B上的部分问题。
项目基于python编程,硬件资源包含以下部分:
- 五个STS3215串口总线舵机
- 音频扩展板 (含麦克风和单声道喇叭)
- WS2812灯板
- UVC摄像头模块
- 主控树莓派开发板(zero2w/3b/4b/5)
- DCDC降压模块
- 舵机控制板
ai_lamp/
├── lelamp_main.py # 主程序入口
├── message_handler.py # 大模型消息处理
├── camera_stream.py # 摄像头实时视频推流
├── pyproject.toml # 项目配置文件和安装依赖
├── lelamp/ # Core package
│ ├── setup_motors.py # 电机管理和设置
│ ├── calibrate.py # 电机校准
│ ├── list_recordings.py # 动作列表
│ ├── record.py # 动作捕捉存储
│ ├── replay.py # 动作回放
│ ├── follower/ # follower模式
│ ├── leader/ # Leader模式
│ └── test/ # 硬件功能单元测试
└── uv.lock # uv文件
Windows环境下系统安装方式:
-
下载树莓派官方烧录软件pi imager
-
根据步骤下载烧录最新系统镜像(选择64bit系统镜像),带桌面版本或者Lite版本都可以。目前为止测试过的可用系统版本:Trixie/Bookworm
树莓派中有多种接入网络的方法,可根据情况使用以下方式:
(1) 网线接入。这种方式仅适用于树莓派3b/4b/5等带网口的开发板,Zero2W仅提供WiFi接入。
(2) WiFi接入。通过WiFi入网,需要设置连接热点和密码。设置或修改热点有下面几种方法:
-
可以在使用imager软件烧录镜像时,在烧录步骤中根据提示设置好;
-
也可以烧录后,接入HDMI通过外接屏幕键盘,登录树莓派系统使用nmcli命令修改热点或者在具备图形界面的系统中进入系统设置修改热点;
-
还有一种方式是通过通过外接TTL转USB接入个人电脑,通过串口登录树莓派系统后使用nmcli命令修改热点
接入网络后才能使用大模型各种功能。
进入树莓派系统控制台,执行下列命令按照UV。
curl -LsSf https://astral.sh/uv/install.sh | sh国内有可能无法自动下载安装,可以使用本仓库中tools目录下提供的安装包,根据下面方法手动安装UV。
cd /your_dir/AI_Lamp/tools解压UV压缩包:
tar -xvf uv-aarch64-unknown-linux-gnu.tar安装UV:
sudo install uv-aarch64-unknown-linux-gnu/uv /usr/local/bin/测试UV:
uv --version #输出下面类似版本信息则说明uv可正常使用:uv 2025xxxxx安装portaudio
sudo apt install portaudio19-dev -y
从GLM代码仓库下载代码:
git clone https://github.com/MetaGLM/glm-realtime-sdk.git安装python版本SDK(先执行source .venv/bin/activate激活lelamp_runtime的虚拟环境):
cd glm-realtime-sdk/python
sudo uv pip install -e /home/pi/source/python/glm-realtime-sdk/python/glm_directory上面的/home/pi/source/python/glm-realtime-sdk/python/glm_directory改成你的GLM python SDK所在目录
SDK的bug修改: 在glm_realtime_sdk中,找到models.py文件并打开,找到下面这一句:
model: Literal["whisper-1"]
并修改为:
model: Literal["whisper-1", "standard"]
# 1. 更新软件源列表
sudo apt update
# 2. 安装 fswebcam
sudo apt install -y fswebcam
# 3. 验证安装(查看版本)
fswebcam --version由于树莓派3b/4b/5的3.5mm音频输出口使用了pwm外设,与seeed 2mic扩展板上的音频芯片io冲突,所以需要禁用树莓派上的耳机口输出功能。
通过aplay -l命令查看,如果输出结果有Headphones这个设备,说明目前系统是启用了耳机口输出功能。输出信息如下:
**** List of PLAYBACK Hardware Devices ****
card 0: Headphones [bcm2835 Headphones], device 0: bcm2835 Headphones [bcm2835 Headphones]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 1: vc4hdmi [vc4-hdmi], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
打开系统配置文件
sudo nano /boot/firmware/config.txt找到dtparam=audio=on这一行,并注释掉即可。
#dtparam=audio=on
注释后,按ctrl+o保存配置;然后ctrl+x退出nano编辑,然后可以重启树莓派
重启后,通过aplay -l命令查看是否还有Headphones这个设备,没有则说明关闭成功。
台灯使用的ws2812灯带可以通过SPI/PWM等多种方式控制,
SPI方式控制时,需要先打开树莓派的SPI接口。通过下面命令进入图像界面设置
sudo raspi-config
上下方向键选择 Interface Options(接口选项),找到SPI相关选项,选择enable即可。通过下面命令确认spi设备是否打开
ls /dev/spi*
然后需要禁用/dev/spidev0.1节点,因为树莓派的主 SPI0 总线有两个片选(Chip Select)引脚:CE0 和 CE1。只需要一个片选,否则会导致灯光控制异常。 编辑/boot/firmware/config.txt文件。确保有下面两行:
dtparam=spi=on
dtoverlay=spi0-1cs
对应16颗灯珠,需要较大的缓存,设置bufsiz大小
-
- 编辑启动参数 sudo nano /boot/firmware/cmdline.txt 在末尾(同一行!)加上空格 + spidev.bufsiz=32768
-
- 编辑 config.txt sudo nano /boot/firmware/config.txt
-
在文件末尾加上:
core_freq=250
core_freq_min=250
-
- 重启系统
sudo reboot
- 获取设备dts
curl https://raw.githubusercontent.com/Seeed-Studio/seeed-linux-dtoverlays/refs/heads/master/overlays/rpi/respeaker-2mic-v2_0-overlay.dts -o respeaker-2mic-v2_0-overlay.dts
dtc -I dts respeaker-2mic-v2_0-overlay.dts -o respeaker-2mic-v2_0-overlay.dtbo
sudo dtoverlay respeaker-2mic-v2_0-overlay.dtbo
sudo cp respeaker-2mic-v2_0-overlay.dtbo /boot/firmware/overlays
- 设置config.txt
sudo tee -a /boot/firmware/config.txt >/dev/null <<'EOF'
dtoverlay=respeaker-2mic-v2_0-overlay
dtoverlay=i2s-mmap
EOF
配置完上述步骤后,使用命令aplay -l应该能看到下面的音频设备信息:
card 2: seeed2micvoicec [seeed2micvoicec], device 0: 1f000a4000.i2s-tlv320aic3x-hifi tlv320aic3x-hifi-0 [1f000a4000.i2s-tlv320aic3x-hifi tlv320aic3x-hifi-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
最后可以通过命令alsamixer -c 2设置音量大小以及开启录音(capture),默认音量line,以及capture是显示“MM”,即静音状态、非录音状态,需要打开到音量和capture录音功能。否则无声音或无法录音。上述命令中-c表示音频设备通道,需要对应你的系统中查询到的设备号。
使用的ST3215舵机是7.4v(19kg扭矩)供电,输入电压范围在5v~8.4v之间,建议输入电压与电机匹配,推荐7.5v的电源适配器。当所有硬件模块接入,使用WiFi连接时,电机转动时,功耗达到最大,可能达到2A以上,所以建议使用7.5v/5A规格的适配器。若电源功率达不到要求可能导致WiFi无法正常连接,或者电机转动不到位或动作执行延迟缓慢等现象。
如果使用的ST3215是12v(30kg扭矩)规格的,则对应更换12v/5A规格的电源适配器。
设备安装完成后,必须进行电机编号和校准后才能进行动作捕捉,否则执行的动作组将无法与录入动作一致。
在安装之前,需要先设置电机编号,因为编号设置需要将电机逐一接入驱动板连接树莓派进行设置。执行下面命令进行编号设置。
uv run -m lelamp.setup_motors --id your_lamp_name --port the_port_found_in_previous_step
编号设置过程中,将依次设置电机5~1,5号舵机对应最顶部连接灯头的舵机(wrist head);1号舵机对应最底部的舵机(base yaw)
在工程根目录下,执行命令测试灯光:
sudo uv run -m lalamp.test.test_rgb
执行后依次亮红绿蓝灯。
执行命令:
uv run -m lelamp.test.test_audio
执行命令抓拍图片:
fswebcam --no-banner -r 1280x720 -S 5 output.jpg
照片保存在当前目录下
执行命令:
uv run -m lelamp.test.test_motors --id your_lamp_name --port port_your_servo_driver_is_connected_to
设置开机启动
-
代码兼容Lerobot机器人,只需更换灯光罩为机械手即可改造成Lerobot机械臂。
-
本地训练部署小模型,支持huggingface的预训练模型,实现特定场景的机械臂抓取功能。
-
摄像头视频流传输。
提供更拟人化的动作序列
-
修改外观结构和关节连接,隐藏电机和线路,调整云台结构,使得结构更美观;
-
使用连杆结构或者蜗杆减速机加编码器的结构,减少抖动和噪音,结构更稳固耐用,实现工业级稳定性。
兼容使用性价比更高的电机和主控芯片方案,降低成本,提供商业落地
兼容性能更强的主板,实现模型本地化部署推理,支持离线运行。
如接入OpenClaw,OpenAI等……
# 确保虚拟环境已激活
python -m ensurepip --upgrade
# 验证
pip3 --version音频扩展板上具有可控制的LED灯,并且会通过40PIN的接口接入树莓派SPI总线,树莓派系统打开SPI总线后会默认生成两个SPI节点,通常是:/dev/spi0_0和/dev/spi0_1,需要禁用/dev/spi0_1这个对应音频扩展板的子节点


