目录
前言
你是否曾梦想过像科幻电影里那样,用说话就能指挥机械臂干活?现在这个梦想在VREP仿真环境里成真啦!今天要给大家分享一个超酷的项目——基于MCP协议的uArm机械臂自然语言控制系统,让你只需动口就能玩转三轴机械臂,完全不用写复杂代码,小白也能轻松上手!
大模型+MCP服务让机械臂听懂人话
一、项目亮点:让机械臂听懂“人话”
简单来说,这个项目做了两件大事:
- MCP服务器:搭建了一个符合Model Call Protocol规范的“翻译官”,专门接收客户端的指令并转化为机械臂能听懂的“动作语言”。
- MCP客户端:拉上了阿里千问大模型当“智能助手”,让它把你说的自然语言(比如“把机械臂移到x=200的位置”)翻译成MCP服务器能理解的指令。
最终效果就是:你说一句话,机械臂立刻动起来!比如:
-
说“获取机械臂当前位置”,它秒回坐标:
-
说“移动到x=230, y=5, z=20”,它精准定位。
完全告别敲代码的烦恼,简直是机械臂控的福音!
项目目录(包含vrep仿真环境,机械臂逆解源码,MCP服务器,MCP客户端,python的uv工程,包含所有依赖的虚拟环境.venv):
二、系统架构:背后的“智能链条”是怎么跑的?
整个流程像一条精密的流水线,分5步走:
- 你输入指令:比如“把机械臂移动到坐标x=200, y=100, z=150”;
- 客户端收指令:MCP客户端先接住你的“人话”;
- 千问大模型翻译:阿里千问把自然语言“翻译”成工具能识别的格式(比如判断该用“sendxyz”工具);
- 服务器发命令:MCP服务器通过Python接口给VREP仿真环境下达具体动作;
- 机械臂执行:uArm在虚拟世界里乖乖完成移动。
简单总结:你动口→千问翻译→服务器传话→机械臂干活,全程自动化!
三、核心功能:自然语言调用MCP“工具”
MCP服务器目前实现了两个超实用工具,机械臂坐标控制和状态反馈:
-
getxyz:专门获取机械臂末端的当前坐标(x,y,z),相当于“报位置”功能,比如你问“现在在哪”,它秒回(250.33, 0.0, 148.62)这样的坐标。
-
sendxyz:负责把机械臂“送到”指定坐标,比如你说“去x=200, y=150, z=100”,它立刻精准移动,误差极小。
代码如下: -
grip:机械臂末端执行抓取,或者吸泵开始吸取物体。
-
release:控制机械臂末端夹具松开或停止吸泵以放下物体。
四、手把手教程:3步启动,5分钟开玩!
准备工作(先装好“装备”)
- 电脑配置:Python 3.7+(新版本更香本项目自带虚拟环境为3.13版本)、VREP仿真环境(CoppeliaSim)、能上网(要连阿里千问,或者其它大模型,当然也可以自己修改为本地OLLama模型)。
- 操作系统:在widows中运行过,当然linux稍微修改一下应该也可以运行。
- 安装依赖:已经自带了虚拟环境,建议在window系统中先安装python 3.13,
然后安装一个uv工具,便于以后管理项目(或者不用安装新虚拟环境,使用uv创建的现有的.venv虚拟环境):
pip install uv
PS:如果不装uv的话,可以cmd打开进入当前项目目录,指令创建新的虚拟环境 python -m venv .venv
,并激活后.venv\Scripts\activate
,敲一行命令 pip install -r requirements.txt
,自动装好所需库(包括MCP、aiohttp、requests等)。不装uv未测试
我这里的依赖如下:
mcp[cli]>=1.6.0
aiohttp>=3.8.0
requests>=2.28.0
sseclient-py>=1.7.2
openai>=1.72.0
numpy>=2.2.4
opencv-python>=4.11.0.86
启动步骤(超简单!)
-
开仿真环境:打开VREP,加载包含uArm机械臂的场景文件(记得提前放好路径哦)。
点击运行,启动python远程服务接口。这个资源已经上传,单独可下载:资源地址 -
启动服务器:新开终端进入虚拟环境(如果下载了项目的话直接点击activate_venv.bat即可进入环境,如图),cmd输入uv run arm_mcp_server.py`,看到服务器在端口9900运行就OK。
-
启动客户端:再开一个终端,输入
python client.py http://localhost:9900/sse
,现在可以直接输入指令啦!
试试效果(举个栗子)
你说:“请告诉我机械臂当前的位置”
客户端:[Calling tool getxyz with args {}]
回复:机械臂当前坐标为:(250.33, 0.0, 148.62)
你说:“请移动到(230, 5, 20)的位置”
客户端:[Calling tool sendxyz with args {'x': 230, 'y': 5, 'z': 20}]
回复:已成功移动到坐标(230, 5, 20)
就这么简单!全程像和智能助手聊天,机械臂乖乖听话~
五、技术原理:藏在背后的“伎俩”
1. MCP协议:大模型调用工具的“桥梁”
MCP就像大模型和外部工具之间的翻译官:
- 服务器用
FastMCP
框架注册了getxyz
和sendxyz
等工具; - 客户端通过SSE(服务器推送事件)和服务器保持连接;
- 千问大模型分析你的指令后,决定调用哪个工具,比如“移动”对应
sendxyz
,“获取位置”对应getxyz
。
2. 机械臂控制:从坐标到“关节动作”的魔法
VREP里的机械臂动起来需要“逆运动学”计算:
- 如你给的(x,y,z)坐标,会被转换成机械臂各个关节的角度(比如肩关节、肘关节、腕关节该转多少度);
- 通过VREP的Python API(sim库)把角度指令发给仿真环境,机械臂就动起来啦!
六、核心代码拆解:手把手带你看懂MCP服务器如何工作
为了让大家更清楚背后的技术细节,我挑出 arm_mcp_server.py 里最关键的代码片段,用“人话”给初学者拆解一下。
1. 连接VREP仿真环境:先和机械臂“打个招呼”
sim.simxFinish(-1) # 关闭所有可能的旧连接,避免冲突
clientID = sim.simxStart('127.0.0.1', 19999, True, True, 5000, 5) # 连接到本地VREP服务器
if clientID == -1:
print('连不上VREP!检查是否启动了仿真环境,或者端口被占用')
exit()
print("成功连接,clientID是", clientID) # clientID相当于仿真环境的“会话ID”,后续操作都靠它
这一步是和VREP建立联系,就像打电话要先拨号码,端口19999就是VREP的“电话号码”。