小白学dummy稚晖君代码(三)

        哈喽,大家好,今天我们要讲的是UserApp下的interface_uart.cpp里的内容。

        首先,先来跟大家提一下,什么是UART命令。

        所谓的UART命令,就是通过UART(通用异步收发器)接口发送和接收的命令。简单点来说,UART就是一种串行通信协议,用来在计算机和外部设备之间传输数据,通过串口发送的一系列字节数据,实现设备之间的通信和控制

        ok,接下来,就让我们进入今天的主题吧。

        interface_uart.cpp里的内容其实很简单,如果看过我前两篇文章的人,再来看这段代码,会发现其实大同小异。

        首先,代码包含了两个头文件——"common_inc.h"和"configurations.h"。其中包含了一些常用的宏定义、函数声明和配置参数。接下来,使用extern关键字声明了一个Motor类型的全局变量motor,然后,定义了一个OnUartCmd函数,它接收两个参数:一个uint8_t类型的指针_data,用于指向字节数据的数组;一个uint16_t类型的_len,表示数据的长度。在函数内部,定义了一些局部变量,包括cur(电流)、pos(位置)、vel(速度)和time(时间)。

#include "common_inc.h"
#include "configurations.h"

extern Motor motor; //声明全局变量Motor

void OnUartCmd(uint8_t* _data, uint16_t _len) //定义OnUartCmd的函数,包含两个参数
{
    float cur, pos, vel, time;//定义局部变量

        接下来,使用switch语句根据_data[0]的值来判断接收到的命令类型

        如果接收到的命令类型是'c',表示设置电流。代码使用sscanf函数将_data中的数据解析为一个浮点数,保存在cur变量中。然后,通过if语句判断解析是否成功,如果成功,则进入if语句块。

        在if语句块内部,首先检查当前运行模式是否为MODE_COMMAND_CURRENT,不是的话,则调用motor.controller->SetCtrlMode函数将模式设置为MODE_COMMAND_CURRENT。然后,调用motor.controller->SetCurrentSetPoint函数,将解析出的电流值设置为电机控制器的电流设定点。

        case 'c':  //如果接收到的命令类型是'c'
            ret = sscanf((char*) _data, "c %f", &cur);//将_data中的数据解析为浮点数,保存在cur变量中
            if (ret < 1)
            {
                printf("[error] Command format error!\r\n");
            } else if (ret == 1)
            {
                if (motor.controller->modeRunning != Motor::MODE_COMMAND_CURRENT)
                    motor.controller->SetCtrlMode(Motor::MODE_COMMAND_CURRENT);
                motor.controller->SetCurrentSetPoint((int32_t) (cur * 1000));//将解析出的电流值设置为电机控制器的电流设定点
            break;

        接下来的代码也和这个差不多啦,具体功能如下        

  •    如果接收到的命令类型是'v',表示设置速度
  •    如果接收到的命令类型是'p',表示设置位置

        

        case 'v':
            ret = sscanf((char*) _data, "v %f", &vel);
            if (ret < 1)
            {
                printf("[error] Command format error!\r\n");
            } else if (ret == 1)
            {
                if (motor.controller->modeRunning != Motor::MODE_COMMAND_VELOCITY)
                {
                    motor.config.motionParams.ratedVelocity = boardConfig.velocityLimit;
                    motor.controller->SetCtrlMode(Motor::MODE_COMMAND_VELOCITY);
                }
                motor.controller->SetVelocitySetPoint(
                    (int32_t) (vel * (float) motor.MOTOR_ONE_CIRCLE_SUBDIVIDE_STEPS));
            }
            break;
        case 'p':
            ret = sscanf((char*) _data, "p %f", &pos);
            if (ret < 1)
            {
                printf("[error] Command format error!\r\n");
            } else if (ret == 1)
            {
                if (motor.controller->modeRunning != Motor::MODE_COMMAND_POSITION)
                    motor.controller->requestMode = Motor::MODE_COMMAND_POSITION;

                motor.controller->SetPositionSetPoint(
                    (int32_t) (pos * (float) motor.MOTOR_ONE_CIRCLE_SUBDIVIDE_STEPS));
            }
            break;
    }

在接下来的文章中,将会为大家讲解dummy 的cli_tool 的run_shell ref_tool里的py文件。

### 关于稚晖 Dummy 机械臂复刻的教程与资料 #### 工具和资源准备 为了成功复刻稚晖Dummy机械臂,需准备好必要的工具和参考资料。这不仅涉及硬件组件的选择,还包括软件环境搭建以及具体编程实践等方面的内容[^1]。 #### 硬件选型指南 根据项目需求挑选合适的材料至关重要。例如,在构建过程中会用到多种类型的微控制器单元(MCU),用于处理不同功能模块的任务;同时还需要考虑选用适当规格的电机及其配套减速机构以确保动作执行精准度。此外,对于追求高度仿生效果的设计者来说,则可能要引入视觉感知设备如双目摄像头等辅助元件来增强系统的智能化水平[^3]。 #### 开发流程概述 整个开发过程大致可分为几个阶段来进行: - **前期调研**:深入了解原版作品的技术细节,明确自己想要达到的效果目标; - **方案规划**:基于个人条件制定切实可行的工作计划书,确定所需采购清单并评估成本预算范围; - **原型制作**:按照设计方案逐步组装测试平台,期间不断调整优化直至各项性能指标均能满足预期标准为止; - **调试完善**:完成初步集成之后便进入到最后一步——全面检验各部分协同工作的稳定性,并针对发现的问题及时作出修正改进措施[^4]。 #### 实际案例分析 有爱好者分享了从零起步打造属于自己的版本的经验贴,其中提到通过特定IDE创建工程项目后能够自动生成一系列重要文档(比如Gerber文件),这对于后续PCB打样生产环节非常有用处。另外还强调了利用开源社区的力量获取更多支持的重要性,像GitHub仓库里就存有许多宝贵的源码片段可供借鉴习[^5]。 ```bash git clone https://github.com/your-repo/dummy-arm.git cd dummy-arm make all ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值