机器谱

【U035】Robodyno接入Deepseek

作者:机器谱

图文展示3264(1)

图文展示3264(1)

副标题

配置robodyno
接入Deepseek
配置robodyno

一、 目标描述

在 Windows 系统中搭建一个轻便高效的robodyno库编程与编译环境,为开发工作做好基础准备。需要安装VScode、Python3.6以上版本,最后安装最新版的robodyno库。


二、 VScode 安装步骤

(一)下载

         访问 VScode 官方网站:https://code.visualstudio.com/ 在官网页面,点击 “Download for Windows” 直接下载 Windows 版本;

若需其他版本或需依据自身 Windows 系统的具体情况(如 32 位或 64 位)挑选对应版本,均可点击 “Download” 进行选择下载 。

(二)安装

1.在下载目录找到 VSCode 安装文件,双击启动安装程序,此时可能会弹出安全警告,点击 “运行” 继续。

2.阅读软件许可协议后,勾选 “我同意此协议”,点击 “下一步”。

3.点击 “浏览”,可自行选择安装路径,默认安装在 C 盘。

4.添加到开始菜单选项默认保持即可,点击 “下一步”。

5.勾选如下选项,并点击下一步

注:

在桌面创建快捷方式:勾选

VSCode添加到右键菜单,支持打开文件:勾选

VSCode添加到右键菜单,支持打开目录:勾选

勾选后会把很多文本格式改为用VSCode打开,例如.txt文件:不勾选

添加到PATH(环境变量),自动添加,无需手动配置:勾选


6.确认安装信息无误后,点击 “安装”。

7. 等待安装过程完成,安装结束后点击 “完成安装”。

三、 VScode 环境配置 —— 以 Python 为例

安装完成 VScode 后,进行 Python 环境配置:

1.在界面右侧选择扩展,然后直接搜索需要安装的扩展,直接安装即可:

2. 打开工程文件

选择文件-打开文件夹,找到程序所在文件夹即可:

3.编译、运行工程文件:

VScode中,点击新建终端,其会在下面打开CMD命令行,我们要注意打开的当前位置,如果不是在程序所在的文件位置,我们需要移动到motor_test1.cpp程序对应文件夹位置。

在命令行中运行下面的命令,会在文件夹中生成motor_test1.exe 的可执行文件。

使用下面命令运行可执行文件,电机会按照程序设定的进行运动(注意电机的ID)

四、 相关工具安装

(一) 安装 Python

可在Python官网 Python Releases for Windows | Python.org 选择安装Python3.8.5版本。

也可安装本地安装包。双击安装包文件按照文件步骤进行操作。

1. 按照框选进行安装,点击进行下一步。

2.安装图进行安装,点击下一步。

3.点击进行下一步,等待安装完成。

(二) 安装OpenAI

在电脑终端中输入命令 pip install OpenAI

点击回车等待安装完成即可。

(三) 安装Robodyno库文件

在电脑终端输入安装命令:pip install robodyno -U

pip install robodyno==1.7.1

若下载速度过慢,可将 pip 源切换为清华源后再安装:

pip install robodyno -i https://pypi.tuna.tsinghua.edu.cn/simple

确认当前安装版本,可在终端输入:pip show robodyno

robodyno --version

输入命令后等待下载完成,即可完成 Robodyno 库的安装与版本确认。


五、 资料清单

序号

内容
1

VScode安装包

2

robodyno电机使用文档

3

Robodyno的Python库文件

4Python安装包


文件下载
Deepseek-Robodyno电机控制指南-资料下载清单.zip
187.67MB下载6次下载
接入Deepseek

一、获取Deepseek的API-KEY

1. 进入到deepseek官网首页 https://www.deepseek.com/

点击首页右上角 API开放平台

2. 进入之后,有多种登录和注册方式,自行选择方式登录或注册。

3. 登录之后会跳转界面,在左侧菜单栏中点击 API keys,使用API keys需要进行付费使用,在deepseek官网进行充值。

4. 进入后点击中央 创建API key 按钮,使用API keys需要进行付费使用,在deepseek官网进行充值。

5. 创建自己的API key的名称,使用API keys需要进行付费使用,在deepseek官网进行充值。

6. 输入名称点击创建后会弹出窗口,此处弹出的字符串为API key。点击复制按钮即可复制到自己的程序中使用API keys需要进行付费使用,在deepseek官网进行充值。

7. 把自己创建的API key复制到程序中;后面的base url当前使用的是deepseek网址,也可更换其他。,使用API keys需要进行付费使用,在deepseek官网进行充值。

8. 连接robodyno一体化关节模块运行程序即可使用文字语言进行控制电机运动,使用API keys需要进行付费使用,在deepseek官网进行充值。

二、电子硬件

① Robodyno Pro电机;

② CAN数据线;

③ Robodyno pro通信坞;

④ 12.6V电源适配器(或3节18650动力电池);

⑤ TypeC数据线;

电路连接如下图:

三、示例程序

from openai import OpenAI

import json

from robodyno.components.can_bus.motor import Motor

from robodyno.interfaces.can_bus import CanBus

# 初始化 DeepSeek 客户端

client = OpenAI(

    api_key="sk-cc565b72346b49e28281861536ca229a", base_url="https://api.deepseek.com"

)

# 初始化电机对象

can = CanBus()

# motor = MiMotor(can, 0x7F)

motor = Motor(can, 0x10)

# 自然语言解析函数

def parse_natural_language(command):

    # 设计系统提示(prompt)

    system_prompt = """

    你是一个控制电机的助手。

    电机可以通过三种模式控制:位置模式、速度模式和力矩模式。

    你还可以启用或禁用电机。

    此外,你可以读取电机的位置、速度、力矩、电压和温度。

    电机运动会提高电机温度,温度过高时就需要让电机停下降温。

    你的任务是从用户的指令中提取控制模式、目标值或读取的信息类型。

    示例:

    1. 用户: "将电机转到-1.5弧度。"

       返回: {"action": "set", "mode": "position", "value": -1.5}

    2. 用户: "将电机转到1圈。"

       返回: {"action": "set", "mode": "position", "value": 6.28}

    3. 用户: "以-2.0(弧度每秒)运行电机"

       返回: {"action": "set", "mode": "velocity", "value": -2.0}

    4. 用户: "施加0.5牛米的力矩。"

       返回: {"action": "set", "mode": "torque", "value": 0.5}

    5. 用户: "启用电机。"

       返回: {"action": "enable"}

    6. 用户: "禁用电机。"

       返回: {"action": "disable"}

    7. 用户: "读取电机位置。"

       返回: {"action": "get", "info": "position"}

    8. 用户: "读取电机速度。"

       返回: {"action": "get", "info": "velocity"}

    9. 用户: "读取电机力矩。"

       返回: {"action": "get", "info": "torque"}

    10. 用户: "读取电机电压。"

       返回: {"action": "get", "info": "voltage"}

    11. 用户: "读取电机温度。"

        返回: {"action": "get", "info": "temperature"}

    请仅以 JSON 格式返回结果。

    """

    # 使用 DeepSeek 解析指令

    response = client.chat.completions.create(

        model="deepseek-chat",   # 替换为 DeepSeek 的模型名称

        messages=[

            {"role": "system", "content": system_prompt},

            {"role": "user", "content": command},

        ],

    )

    # 提取解析结果

    result = response.choices[0].message.content

    return result

# 电机控制函数

def control_motor(action, mode=None, value=None, info=None):

    if action == "enable":

        motor.enable()

    elif action == "disable":

        motor.disable()

    elif action == "set":

        if mode == "position":

            motor.position_mode()

            motor.set_pos(value)

        elif mode == "velocity":

            motor.velocity_mode()

            motor.set_vel(value)

        elif mode == "torque":

            motor.torque_mode()

            motor.set_torque(value)

        else:

            print("无效的模式。")

    elif action == "get":

        if info == "position":

            print(f"当前电机位置: {motor.get_pos()} 弧度")

        elif info == "velocity":

            print(f"当前电机速度: {motor.get_vel()} 弧度/秒")

        elif info == "torque":

            print(f"当前电机力矩: {motor.get_torque()} 牛米")

        elif info == "voltage":

            print(f"当前电机电压: {motor.get_voltage()} 伏特")

        elif info == "temperature":

            print(f"当前电机温度: {motor.get_temperature()} 摄氏度")

        else:

            print("无效的信息类型。")

    else:

        print("无效的操作。")

# 主程序

def motor_control_assistant():

    print("欢迎使用电机控制助手!")

    while True:

        # 获取用户输入

        command = input("\n请输入指令(或输入“退出”以结束):")

        if command.lower() == "退出":

            print("程序结束。")

            break

        # 解析自然语言指令

        try:

            parsed_result = parse_natural_language(command)

            # 去除 Markdown 代码块标记(如果有)

            if parsed_result.startswith("```json") and parsed_result.endswith("```"):

                parsed_result = parsed_result[7:-3].strip()   # 去除 ```json 和 ```

            print(f"解析结果: {parsed_result}")

            # 解析 JSON 结果

            data = json.loads(parsed_result)

            action = data.get("action")

            mode = data.get("mode")

            value = data.get("value")

            info = data.get("info")

            if action:

                # 控制电机

                control_motor(action, mode, value, info)

            else:

                print("无法解析指令,请重试。")

        except Exception as e:

            print(f"错误: {e}。请重试。")

# 运行电机控制助手

motor_control_assistant()


运行演示视频如下:

四、资料清单

序号

内容
1

源代码


文件下载
Deepseek-Robodyno控制例程.zip
2.38KB下载3次下载
© 2024 机器时代(北京)科技有限公司  版权所有
机器谱——机器人共享方案网站
学习  开发  设计  应用