【兔子机器人】实现从初始状态到站立
一、遥想星空up主的方法
由于我有卡位结构,无法做到劈腿,而且底盘也不一样,无法使用此方法
但是其代码思想是可以借鉴的。
参考视频:
【【开源啦!】无刷轮腿平衡机器人】 【精准空降到 01:16】 https://www.bilibili.com/video/BV1bP411k75b/?share_source=copy_web&vd_source=77e36f24add8dc77c362748ffb980148&t=76


Motor_SetTorque(&leftJoint[0], 0.2f); //将0.2Nm扭矩添加到左边0号关节电机



这部分代码更新腿部姿态

vTaskDelay(5); // 延时,直到腿部角度转到一定位置

设置standupState初始值为StandupState_None

StandupState_None的引用:

StandupState_Standup的引用:

lsk兔子的站立代码:

电机力矩求解函数:




每次循环都解算关节电机


#define PROTECT_CONDITION (leftTheta < -M_PI_4 || leftTheta > M_PI_4 || \rightTheta < -M_PI_4 || rightTheta > M_PI_4 || \imuData.pitch > M_PI_4 || imuData.pitch < -M_PI_4) //腿部角度超限保护条件
if(PROTECT_CONDITION) //当前达到保护条件
{if(standupState == StandupState_None) //未处于起立过程中{//关闭所有电机Motor_SetTorque(&leftWheel, 0);Motor_SetTorque(&rightWheel, 0);Motor_SetTorque(&leftJoint[0], 0);Motor_SetTorque(&leftJoint[1], 0);Motor_SetTorque(&rightJoint[0], 0);Motor_SetTorque(&rightJoint[1], 0);//阻塞等待腿部角度回到安全范围,再等待4s后恢复控制(若中途触发了起立则在起立准备完成后直接跳出)while(PROTECT_CONDITION && standupState == StandupState_None){leftTheta = leftLegPos.angle - imuData.pitch - M_PI_2;rightTheta = rightLegPos.angle - imuData.pitch - M_PI_2;vTaskDelay(100);}if(standupState == StandupState_None)vTaskDelay(4000);//退出保护后设定目标位置和yaw角度为当前值target.position = (leftWheel.angle + rightWheel.angle) / 2 * wheelRadius;target.yawAngle = imuData.yaw;continue;}if(standupState == StandupState_Standup && (leftTheta < -M_PI_4 || rightTheta > M_PI_4))standupState = StandupState_None;
}
else
{if(standupState == StandupState_Standup) //未达到保护条件且处于起立过程中,说明起立完成,退出起立过程standupState = StandupState_None;
}//设定关节电机输出扭矩
Motor_SetTorque(&leftJoint[0], -leftJointTorque[0]);
Motor_SetTorque(&leftJoint[1], -leftJointTorque[1]);
Motor_SetTorque(&rightJoint[0], -rightJointTorque[0]);
Motor_SetTorque(&rightJoint[1], -rightJointTorque[1]);vTaskDelayUntil(&xLastWakeTime, 4); //4ms控制周期
二、吴方法
核心思想:

实操:


三、自己的控制规划
四腿贴紧卡位,然后解算出陀螺仪的pitch俯仰角,来判断是前倒还是后倒。然后车轮瞬间给一个大力距,将兔子立起来。
后仰角度:

前倾角度:

要将站立写在一个线程里面,或者main.c里面,因为线程在来回切换,会有可能影响条件语句判断导致出错,而且代码看起来很乱。目前的错是,轮毂电机的力不受控制,一直都大。
四、控制代码debug
直接将以下代码放在control.h中,会出现下面的报错,因为.h只能声明,而不能初始化赋值。


正确处理方式:
在.h里面声明,在.c里面初始化赋值:


外部文件想使用其变量(变成外部变量),在自己的.h文件利用extern声明变量,但不要赋值,这样子就可以在.c文件直接引用了。
站立过程状态含义:
//站立过程状态枚举量
enum StandupState
{StandupState_None_Front,StandupState_None_Back,//当pitch角度在一定倾斜角度时,赋值StandupState_None,//如果是前倾--Front,如果是后倾--BackStandupState_Prepare,//虚拟腿收缩最短,则赋值StandupState_PrepareStandupState_Standup//准备工作完成,则赋值StandupState_Standup,开始站立
};
GO电机参数


代码

需要发送到电机,CAN线可以同时发到好几个电机。Go电机是用RS485通信,只能一个一个包的发,一个包包含一个GO电机。

group为0时,只能控制ID:0~3的电机

相关文章:
【兔子机器人】实现从初始状态到站立
一、遥想星空up主的方法 由于我有卡位结构,无法做到劈腿,而且底盘也不一样,无法使用此方法 但是其代码思想是可以借鉴的。 参考视频: 【【开源啦!】无刷轮腿平衡机器人】 【精准空降到 01:16】 https://www.bilibili…...
ImportError: cannot import name ‘open_filename‘ from ‘pdfminer.utils‘已搞定
报错内容 ImportError: cannot import name ‘open_filename’ from ‘pdfminer.utils’ 第一步:pip uninstall pdfminer 解决办法 pip3 install pdfminer.six注意不要 pip install pdfminer.six是安装不了的...
一文解决Word中公式插入问题(全免费/latex公式输入/texsWord)
分文不花,搞定你的word公式输入/texsWord完全使用指南 背景 碎碎念:折折腾腾至少装了几个小时,遇到了若干大坑。遇到的问题网上都搜索不到答案!!!就让我来当指路的小火柴吧。 本篇适用于在word中输入la…...
C语言实战——扫雷游戏
目录 1. 扫雷游戏分析和设计2.扫雷游戏的代码实现 1. 扫雷游戏分析和设计 1.1扫雷游戏的功能说明 使用控制台实现经典的扫雷游戏游戏可以通过菜单实现继续玩或者退出游戏扫雷的棋盘是9*9的格子默认随机布置10个雷可以排查雷 如果位置不是雷,就显示周围有几个雷 如果…...
.Net使用ElasticSearch
文章目录 前言主体内容一.Kibana中ElasticSearch的基础操作1.GET(查询)1.POST(新增)1.PUT(修改)1.DELET(删除) 二.在.Net中,对ElasticSearch进行基础操作1.DotNet连接Ela…...
HTML5、CSS3面试题(二)
上一章:HTML5、CSS3面试题(一) 哪些是块级元素那些是行内元素,各有什么特点 ?(必会) 行内元素: a、span、b、img、strong、input、select、lable、em、button、textarea 、selecting 块级元素࿱…...
sqllab第十一关通关笔记
知识点: 发现登录框就可以尝试注入登录框一般都是字符型注入通过注入可以获取其他表的信息绕过手段 单引号闭合联合注入也可以进行错误注入 首先看界面是一个登录框;通过admin admin登录进去,发现页面会把用户名和密码的登录信息打印出来&am…...
机械女生,双非本985硕,目前学了C 基础知识,转嵌入式还是java更好?
作为单片机项目开发的卖课佬,个人建议,先转嵌入式单片机开发方向,哈哈。 java我也学过,还学过oracle、mysql数据库,只是当时没做笔记,找不好充分的装逼证据了。 从实习通过业余时间,学到快正式毕…...
Python之字符串操作大全(29种方法)
本章详细介绍了常用的29种字符串操作方法及代码示例。 1. 重复输出字符串 print(x * 20) 输出:xxxxxxxxxxxxxxxxxxxx 2. 通过索引获取字符串 print(hello world[2:5]) 输出:llo 3. in 判断字符是否在字符串内 print(e in hello world) 输出&…...
ArcGIS学习(十五)用地适宜性评价
ArcGIS学习(十五)用地适宜性评价 本任务给大家带来的内容是用地适宜性评价。 用地适宜性评价是大家在平时工作中最常接触到的分析场景之一。尤其是在国土空间规划的大背景下,用地适宜性评价变得越来越重要。 此外,我们之前的任务主要是使用矢量数据进行分析。本案例是主讲…...
【matlab】如何将.mat文件与.nii文件互转
【matlab】如何将.mat文件与.nii文件互转 .mat转为.nii文件 有时候代码需要读取的是.nii文件,但是如何现有的数据是.mat格式,需要将.mata转化为.nii文件 1、先加载.mat文件 % 加载.mat文件 load(your_mat_file.mat); % 请将your_mat_file.mat替换为实…...
Uni-app开发Canvas当子组件示例,点点绘制图形
前言 使用Uni-app 实现封装一个Canvas渲染的子组件,实现通过传入两点绘制一条完整的路程 具体逻辑看我发的后端和数据库设计 C# 根据两点名称,寻找两短路程的最优解,【有数据库设计,完整代码】 即使不了解具体逻辑,该…...
从金蝶云星空到钉钉通过接口配置打通数据
从金蝶云星空到钉钉通过接口配置打通数据 对接系统金蝶云星空 金蝶K/3Cloud(金蝶云星空)是移动互联网时代的新型ERP,是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、体验”,旨在帮助企业打造面…...
Unreal发布Android在刘海屏手机上不能全屏显示问题
Unreal 4.27发布Android在刘海屏手机上不能全屏显示问题 Android设置全屏刘海屏全屏设置4.27设置刘海屏在部分手机不能显示问题 Android设置全屏 AndroidManifest.xml文件配置 ...<activity android:name"com.epicgames.ue4.GameActivity" android:label"st…...
hive库表占用空间大小的命令
1、查每个hive表占用的空间大小 hdfs dfs -du -h /user/hive/warehouse 2、按占用空间大小降序排列 hdfs dfs -du /user/hive/warehouse/ipms.db | sort -nr 3、查某一个分区占用空间大小(单位G) hadoop fs -ls /user/hive/warehouse/ipms.db/dw_ft_se_nt_u_gen…...
关于go中的select
笔记仓库:gitee.com/xiaoyinhui 代码中的解释纯个人理解,有不对的望指出 package testsimport ("fmt""testing" )var uCnt int 0func TestSelece(t *testing.T) {// 对于 select 语句,在进入该语句时,会按源…...
【Node.js从基础到高级运用】十一、构建RESTful API
在本篇博客中,我们将综合之前讨论的内容,深入探索如何使用Node.js构建一个RESTful API。我们将重点讨论设计合理的API端点,展示如何通过代码实现这些端点,并指导如何使用Postman测试我们的API,确保其按预期工作。 前提…...
Python和MATLAB数字信号波形和模型模拟
要点 Python和MATLAB实现以下波形和模型模拟 以给定采样率模拟正弦信号,生成给定参数的方波信号,生成给定参数隔离矩形脉冲,生成并绘制线性调频信号。快速傅里叶变换结果释义:复数离散傅里叶变换、频率仓和快速傅里叶变换移位&am…...
华为OD技术C卷“测试用例执行计划”Java解答
描述 示例 算法思路1 整体思路是,先读取特性的优先级和测试用例覆盖的特性列表,然后计算每个测试用例的优先级,并将其与测试用例的索引存储到二维数组中。最后按照优先级和索引排序,输出测试用例的索引,即为执行顺序。…...
solana 入门 1
solana-co-learn Solana 开发学习笔记(一)——从 Hello World 出发 安装开发环境 windows下环境配置 wsl First start with installing WSL on your system. wsl --install wsl安装Ubuntu 列出可用的分发版 wsl.exe --list --online显示: 以下是可安装的有效…...
DeepSeek训练数据准备实战手册(含GitHub可复现Pipeline):覆盖去重、毒性过滤、领域配比、版权脱敏、质量打分五大核心模块
更多请点击: https://kaifayun.com 第一章:DeepSeek训练数据准备概述 DeepSeek系列大语言模型的训练质量高度依赖于原始数据的规模、多样性与清洗精度。数据准备并非简单拼接语料,而是一个涵盖采集、去重、过滤、格式标准化与安全对齐的系统…...
破解行业共性管控难题,推动矿山安全体系迭代升级 ——基于视频孪生无感定位的矿山安全体系革新技术方案
破解行业共性管控难题,推动矿山安全体系迭代升级——基于视频孪生无感定位的矿山安全体系革新技术方案一、方案引言国内煤炭矿山长期在人员监管、灾害应急、隐患溯源、空间管控层面沉淀诸多共性难题,佩戴管控流于形式、监测数据失真失实、灾变监测体系快…...
【仅限头部AI团队内部流通】DeepSeek-Coder 33B代码生成延迟优化白皮书(含vLLM 0.6.3 patch补丁包)
更多请点击: https://kaifayun.com 第一章:DeepSeek-Coder 33B模型架构与延迟瓶颈全景分析 DeepSeek-Coder 33B 是一款专为代码理解与生成优化的开源大语言模型,基于标准 LLaMA 架构演进,采用 64 层 Transformer 解码器堆叠&…...
ChatGPT翻译质量真相:20年本地化专家实测12类文本(技术文档/法律合同/文学隐喻),准确率暴跌的3个致命盲区!
更多请点击: https://intelliparadigm.com 第一章:ChatGPT翻译质量怎么样 ChatGPT 在多语种翻译任务中展现出较强的上下文理解与语义连贯能力,尤其在非技术类通用文本(如日常对话、新闻摘要、文学性段落)上࿰…...
ubuntu个人开发者如何利用taotoken token plan降低ai实验成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Ubuntu 个人开发者如何利用 Taotoken Token Plan 降低 AI 实验成本 对于在 Ubuntu 环境下进行 AI 实验与原型开发的个人开发者而言…...
Windows与Office智能激活终极指南:KMS_VL_ALL_AIO完整解决方案
Windows与Office智能激活终极指南:KMS_VL_ALL_AIO完整解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 在数字化工作环境中,稳定可靠的操作系统和办公软件是高效工…...
稀疏矩阵:深度学习三大架构的统一数学语言
1. 稀疏矩阵:深度学习架构的统一数学语言在深度学习领域,卷积神经网络(CNN)、循环神经网络(RNN)和Transformer长期被视为三种截然不同的架构范式。但当我们透过表象看本质,会发现它们共享着相同的数学内核——稀疏矩阵运算。这种统一性不仅具…...
Grafana k6性能工程实践:从压测工具到CI/CD原生可观测性基础设施
1. 这不是又一个“压测脚本包装器”,而是性能工程的基础设施重构Grafana k6——这个名字刚出现时,我第一反应是:又一个基于Node.js封装的轻量级压测工具?毕竟JMeter、Locust、Artillery都走过类似路径。但真正把它跑通第一个真实业…...
LiDAR增强信道估计:融合几何感知提升毫米波MIMO-OFDM系统性能
1. 项目概述与核心思路在毫米波大规模MIMO-OFDM系统中,尤其是在车联网这类高动态、低时延的应用场景里,获取精确的信道状态信息(CSI)是保障通信可靠性与高效性的基石。传统的信道估计方法,无论是基于最小二乘ÿ…...
FlexNet Publisher Host ID获取与验证全指南
1. 理解FlexNet Publisher Host ID的核心概念在软件许可管理领域,FlexNet Publisher(简称FNP)是业界广泛使用的许可证管理系统。当我们需要将软件许可证绑定到特定机器时,Host ID就像这台设备的"身份证号码"。对于使用A…...
