# lamp_runtime **Repository Path**: nicholas3388/lamp_runtime ## Basic Information - **Project Name**: lamp_runtime - **Description**: 四博智联智能台灯,开源代码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-24 - **Last Updated**: 2026-07-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI Lamp ![](./assets/banner.jpg) 四博AI台灯是一个基于 [LeLamp](https://github.com/humancomputerlab/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文件 ``` ## 三、 硬件系统框图

系统框图

## 四、 软件运行环境设置 ### 4.1 系统安装 #### 4.1.1 操作系统 ##### 4.1.1.1 树莓派方案(model 3B/4B/5) Windows环境下系统安装方式: * 下载树莓派官方烧录软件pi imager * 根据步骤下载烧录最新系统镜像(选择64bit系统镜像),带桌面版本或者Lite版本都可以。目前为止测试过的可用系统版本:Trixie/Bookworm ##### 4.1.1.2 瑞芯微RK3588方案(Radxa Rock5C) * 下载瑞莎公司推荐的烧录软件: BalenaEtcher * 烧录瑞莎公司提供的Debian系统镜像 #### 4.1.2 网络设置 树莓派中有多种接入网络的方法,可根据情况使用以下方式: (1) 网线接入。这种方式仅适用于树莓派3b/4b/5等带网口的开发板,Zero2W仅提供WiFi接入。 (2) WiFi接入。通过WiFi入网,需要设置连接热点和密码。设置或修改热点有下面几种方法: * 可以在使用imager软件烧录镜像时,在烧录步骤中根据提示设置好; * 也可以烧录后,接入HDMI通过外接屏幕键盘,登录树莓派系统使用nmcli命令修改热点或者在具备图形界面的系统中进入系统设置修改热点; * 还有一种方式是通过通过外接TTL转USB接入个人电脑,通过串口登录树莓派系统后使用nmcli命令修改热点 接入网络后才能使用大模型各种功能。 ### 4.2 需要安装的工具包和SDK #### 4.2.1 UV包管理工具 进入树莓派系统控制台,执行下列命令按照UV。 ```bash curl -LsSf https://astral.sh/uv/install.sh | sh ``` 国内有可能无法自动下载安装,可以使用本仓库中tools目录下提供的安装包,根据下面方法手动安装UV。 ```bash cd /your_dir/lamp_runtime/tools ``` 解压UV压缩包: ```bash tar -xvf uv-aarch64-unknown-linux-gnu.tar ``` 安装UV: ```bash sudo install uv-aarch64-unknown-linux-gnu/uv /usr/local/bin/ ``` 测试UV: ```bash uv --version #输出下面类似版本信息则说明uv可正常使用:uv 2025xxxxx ``` 安装portaudio ``` sudo apt install portaudio19-dev -y ``` #### 4.2.2 下载GLM模型的python客户端SDK 从GLM代码仓库下载代码: ```bash git clone https://github.com/MetaGLM/glm-realtime-sdk.git ``` #### 4.2.3 安装fswebcam ```bash # 1. 更新软件源列表 sudo apt update # 2. 安装 fswebcam sudo apt install -y fswebcam # 3. 验证安装(查看版本) fswebcam --version ``` #### 4.2.4 树莓派3b/4b/5上关闭3.5mm耳机口音频输出 由于树莓派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 ``` 打开系统配置文件 ```bash sudo nano /boot/firmware/config.txt ``` 找到dtparam=audio=on这一行,并注释掉即可。 ``` #dtparam=audio=on ``` 注释后,按ctrl+o保存配置;然后ctrl+x退出nano编辑,然后可以重启树莓派 重启后,通过aplay -l命令查看是否还有Headphones这个设备,没有则说明关闭成功。 #### 4.2.5 打开SPI接口功能(RK3588方案无需执行本节操作) 该功能已不使用。使用ESP32模块控制外设。 台灯使用的ws2812灯带可以通过SPI/PWM等多种方式控制,推荐使用SPI方式 对于PI5,由于硬件更新,无法再使用原有的rpi_ws281x库对灯板进行控制。需要改用pi5neo。 在Pi5中,先删除rpi_ws281x: `uv pip uninstall rpi_ws281x`,再安装:`uv pip install pi5neo`,然后使用对应的rgb_service.py ##### 4.2.5.1 树莓派开启SPI 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 ``` ##### 4.2.5.2 设置SPI参数 对应16颗灯珠,需要较大的缓存,设置bufsiz大小 * 1. 编辑启动参数 sudo nano /boot/firmware/cmdline.txt 在末尾(同一行!)加上空格 + spidev.bufsiz=32768 * 2. 编辑 config.txt 固定GPU时钟频率(树莓派4/5无需设置) sudo nano /boot/firmware/config.txt * 在文件末尾加上: ``` core_freq=250 core_freq_min=250 ``` * 3. 重启系统 ``` sudo reboot ``` #### 4.2.6 配置Seeed ReSpeaker 2-Mics Pi HAT (RK3588方案无需执行本节操作) * 获取设备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表示音频设备通道,需要对应你的系统中查询到的设备号。 ### 4.3 GLM模型设置 #### 4.3.1 SDK安装 安装python版本SDK到lamp的虚拟环境中(先执行source .venv/bin/activate激活lelamp_runtime的虚拟环境): ```bash cd glm-realtime-sdk/python 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"] ``` 安装zai-sdk ``` uv pip install zai-sdk ``` #### 4.3.2 修改模型配音风格 找到lelamp_main.py文件中下面代码,修改voice为其他风格即可,具体设置的字符内容,需要查询智普大模型SDK中支持的配音。 ``` session_message = SessionUpdateMessage( session=SessionUpdateParams( instructions=agent_prompt, input_audio_format="wav", output_audio_format="pcm", voice="male-qn-daxuesheng", modalities={"audio", "text"}, turn_detection=ServerVAD(), beta_fields={"chat_mode": "audio", "tts_source": "e2e", "auto_search": False, "greeting_config": {"enable": True, "content": "你好主人,我是你的智能台灯,你可以叫我小智"}}, tools=[light_on_tool, light_off_tool, light_to_red, look_and_describe_tool, action_negitive, action_yes, action_look_up], ) ) ``` #### 4.3.3 设置模型提示词 找到lelamp_main.py文件中`SessionUpdateMessage`的设置代码,将其输入参数session中的`instructions`字段设置为你的提示词即可 ### 4.4 运行环境部署 #### 4.4.1 安装环境依赖工具 使用UV安装依赖库 ```bash # If on your personal computer uv sync ``` 树莓派中需要下面附加库,瑞芯微平台无需这些附件。 ``` # If on Raspberry Pi uv sync --extra hardware ``` #### 4.4.2 设置运行参数与大模型平台KEY 在主控系统中,下载的lamp_runtime仓库代码根目录下创建参数文件: .env 请根据你的系统中的目录结构修改下面命令路径 ``` nano /home/radxa/source/lamp_runtime/.env ``` 文件中添加智普平台的API_KEY: ``` LELAMP_MOTOR=1 LELAMP_AUDIO=1 ZHIPU_API_KEY="Your_Key" LELAMP_RKNN_MODEL=/home/radxa/source/python/lamp_runtime/models/RetinaFace.rknn ``` 其中LELAMP_MOTOR用于调试舵机,当设置LELAMP_MOTOR=0时,系统启动时不初始化舵机。类似的,当LELAMP_AUDIO=0时不初始化音频采集传输到大模型平台。 最后使能参数: ``` source /home/radxa/source/lamp_runtime/.env ``` ### 4.5 ESP32模块 ESP32模块主要负责灯板、LED、毫米波雷达、麦克风阵列(用于声源定位,暂未加入该功能)等外设控制。 模块程序的编译与烧录请参考仓库:https://gitee.com/nicholas3388/lamp_esp32_module 程序烧录使用乐鑫官方烧录工具 ### 4.6 瑞芯微方案启用通讯串口UART4 瑞芯微方案使用UART4串口与ESP32模块串口通讯,UART4默认没启用,需要启用后才能正常通信。 在rk3588主控的控制台执行命令进入系统设置界面: `sudo rsetup` 选择Overlay设置,启用UART4-M2: ``` ┌──────────────────────────────────┤ RSETUP ├──────────────────────────────────┐ │ Below are the overlays compatible with your hardware. │ │ Press Space to select. │ │ │ │ [ ] Enable UART2-M0 ▒ │ │ [*] Enable UART4-M2 ▒ │ │ [ ] Enable I2C1-M0 ▒ │ │ [ ] Enable SPI3-M1 ▒ │ │ [ ] Enable PCIe2x1l2 ▒ │ │ [ ] Enable PWM1-M1 ▒ │ │ [ ] Radxa Camera 4K ▒ │ │ [ ] Radxa Display 8 HD ▒ │ │ [ ] Radxa Display 10 FHD ▒ │ │ [ ] Disable LED ▒ │ │ │ │ │ └──────────────────────────────────────────────────────────────────────────────┘ ``` 设置Overlay之后需要重启系统才能生效,并正常使用UART4串口。 ## 五、 整机调试 ### 5.1 电源要求 使用的ST3215舵机是7.4v(19kg扭矩)供电,输入电压范围在5v~8.4v之间,建议输入电压与电机匹配,推荐7.5v的电源适配器。当所有硬件模块接入,使用WiFi连接时,电机转动时,功耗达到最大,可能达到2A以上,所以建议使用7.5v/5A规格的适配器。若电源功率达不到要求可能导致WiFi无法正常连接,或者电机转动不到位或动作执行延迟缓慢等现象。 如果使用的ST3215是12v(30kg扭矩)规格的,则对应更换12v/5A规格的电源适配器。 ### 5.2 电机设置与校准 设备安装完成后,必须进行电机编号和校准后才能进行动作捕捉,否则执行的动作组将无法与录入动作一致。 #### 5.2.1 电机编号 在安装之前,需要先设置电机编号,因为编号设置需要将电机逐一接入驱动板连接树莓派进行设置。执行下面命令进行编号设置。 ``` 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) #### 5.2.2 Leader与follower #### 5.2.3 零位校准 ### 5.3 单元测试 #### 5.3.1 灯光测试 在工程根目录下,执行命令测试灯光: ``` sudo uv run -m lalamp.test.test_rgb ``` 执行后依次亮红绿蓝灯。 #### 5.3.2 音频测试 执行命令: ``` uv run -m lelamp.test.test_audio ``` #### 5.3.3 摄像头测试 执行命令抓拍图片: ``` fswebcam --no-banner -r 1280x720 -S 5 output.jpg ``` 照片保存在当前目录下 #### 5.3.4 电机测试 执行命令: ``` uv run -m lelamp.test.test_motors --id your_lamp_name --port port_your_servo_driver_is_connected_to ``` #### 5.3.5 大模型接入测试 ### 5.4 主程序运行 设置开机启动 ## 六、 功能扩展 * 代码兼容Lerobot机器人,只需更换灯光罩为机械手即可改造成Lerobot机械臂。 * 本地训练部署小模型,支持huggingface的预训练模型,实现特定场景的机械臂抓取功能。 * 摄像头视频流传输。 ## 七、 更多即将更新的功能 ### 7.1 动作优化 提供更拟人化的动作序列 ### 7.2 机械结构优化 * 修改外观结构和关节连接,隐藏电机和线路,调整云台结构,使得结构更美观; * 使用连杆结构或者蜗杆减速机加编码器的结构,减少抖动和噪音,结构更稳固耐用,实现工业级稳定性。 ### 7.3 低成本方案 兼容使用性价比更高的电机和主控芯片方案,降低成本,提供商业落地 ### 7.4 大算力版本,边缘计算实现离线AI 兼容性能更强的主板,实现大模型本地化部署推理,脱离网络支持离线运行,保证隐私和数据安全。 ### 7.5 提供更多大模型和扩展功能的接入 如接入OpenClaw,OpenAI等…… ### 7.6 声源定位功能 加入声源定位功能。 ## 八、 常见问题 ### 8.1 UV安装速度太慢 直接解压仓库中提供的UV压缩包并安装使用 ### 8.2 使用replay命令回放动作组的执行速度很慢 ### 8.3 pip命令找不到的问题 ```bash # 确保虚拟环境已激活 python -m ensurepip --upgrade # 验证 pip3 --version ``` ### 8.4 pyaudio问题 ### 8.5 树莓派上使用ttl2usb的串口终端设置