Repository Summary
Checkout URI | https://github.com/lalafua/sim_llm.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-03-27 |
Dev Status | UNMAINTAINED |
CI status | No Continuous Integration |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Packages
Name | Version |
---|---|
llm_robot | 0.0.0 |
my_interfaces | 0.0.0 |
robot_description | 0.0.0 |
robot_navigation2 | 0.0.0 |
README
sim_llm
介绍
此仓库基于 ROS2 Humble 开发,原 ROS1 分支可以在新开的仓库查看: sim_llm_ROS1
相较于 ROS1 Noetic 上的实现,该分支做了如下改动:
- urdf 建模替换,帮助调试 TF Tree
- 建图算法使用 Cartographer ( ROS1 为 gmapping )
- 导航框架使用 Nav2( ROS1 为 map_server 和 move_base )
改动主要是适配 ROS1 -> ROS2 的功能包切换升级,顶层控制逻辑并没有改变
Demo
顶层逻辑
顶层任务逻辑分三个 node
完成:
-
llm_nlp node
:自然语言处理节点。接收用户输入,调用 SiliconFlow api ,通过给 AI 合适的 prompt 将自然语言转换为 Json 字符串,并将其作为服务请求发送到/llm_nlp/cmd
服务。 -
camera node
:识别节点。从摄像头捕获图像,使用 Roboflow 模型进行物体检测,然后将检测结果发布到/camera/recognized
。为了缓解识别图像造成的卡顿掉帧,通过多线程处理捕获操作和帧操作,同时也可以避免阻塞定时器的回调任务。 -
llm_robot node
:控制节点。通过 TF Tree :map -> base_footprint
的变换关系,获得机器人的实时坐标;订阅camera
节点发布的/camera/recognized
识别的目标信息;使用nav2_simple_commander.robot_navigator
的BasicNavigator
类,执行简单的导航任务。
参考
- TF2
- Navigation2
- Cartographer
- 鱼香ROS
- ROS2 Cookbook
- Gemini2.0 Flash Thinking
部署
先决条件
- 我的开发环境
==============================
ROS2 Development Environment
==============================
OS Info: Linux ubuntu2204 6.8.0-52-generic #53~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jan 15 19:18:46 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
Python Version: Python 3.10.12
Gcc Version: gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
CMake Version:cmake version 3.22.1
ROS Distro: humble
=============================
你应该还要准备一个摄像头
- clone 该项目
git clone https://github.com/lalafua/sim_llm.git
cd sim_llm/
- 安装 python 依赖
pip install -r requirements.txt
-
设置环境变量
打开 .bashrc , 在最后添加:
export SILICONFLOW_API_KEY = "<your SiliconFlow api key>"
- 注:也可以替换为其他大模型供应商的 API , 最好支持 openai 的 API 调用方式
- 编译工程文件
colcon build --symlink-install
运行
打开两个终端 分别运行
source install/setup.bash
ros2 run llm_robot llm_nlp
source install/setup.bash
ros2 launch llm_robot llm_robot.launch.py
其中, llm_nlp
节点会在服务就绪后提示输入 command
,输入 find my Coke
后,就可以看到机器人正在寻找 bottle 了(其他指令还没有写,目前只有这一个,不过可以自己训练想要识别的目标)
识别到目标之后,识别到物体的帧会以 {class_name}_{timestamp}.jpg
的命名方式保存在 run/
目录下,然后机器人会返回原点,在成功完成任务之后会打印出识别到目标时的位置。
二次开发
得益于 ROS2 优秀的设计架构和技术,我们可以很轻松的在此项目的基础上进行二次开发。
在本项目中
-
llm_robot
为项目的顶层包- llm_nlp.py 中包含用于引导 AI 解析自然语言的 Prompt
- llm_robot.py 提供了最高抽象的控制逻辑,如果想要修改机器人的行为逻辑可以从此入手
-
my_interfaces
定义了一组接口,用于 node 之间的请求传递 -
robot_description
有以下几个功能:- robot_spawn.launch.py 启动 gazebo 加载地图场景文件并通过启动 qpbot.launch.py 的方式加载机器人
- cartographer.launch.py 启动建图任务,因此只在初期会用到
-
robot_navigation2
用于载入 cartographer 创建的地图文件并启动导航服务器