当前位置: 首页 > wzjs >正文

做我女朋友好不好手机网站分类信息网站平台有哪些

做我女朋友好不好手机网站,分类信息网站平台有哪些,武汉企业做网站找哪家好,百度云虚拟主机如何建设网站0 前言 该部分作为开发过程中的学习记录,可能有错误及不足欢迎小伙伴们一起讨论~ 注:该部分是根据灯哥开源的代码来进行学习,具体数学计算部分不做过多叙述,bilibili的教学视频中已经非常清晰了,本节只对…

0 前言

该部分作为开发过程中的学习记录,可能有错误及不足欢迎小伙伴们一起讨论~

注:该部分是根据灯哥开源的代码来进行学习,具体数学计算部分不做过多叙述,bilibili的教学视频中已经非常清晰了,本节只对个人学习过程中的代码做对应和解释。

1 腿高控制代码

首先,在上一章中我们已经了解了标准Arduino代码由setup()loop()两个函数组成。

void setup() {// put your setup code here, to run once:// 在这里加入你的setup代码,它只会运行一次:
}void loop() {// put your main code here, to run repeatedly://  在这里加入你的loop代码,它会不断重复运行:
}

本章我们首先来看setup()loop()两个函数

通过loop()主函数我们可以得到整个流程:

  • 获取控制器数据(可以理解为每个通道都对应一个按钮,每个按钮不同位置对应不同的数字,比如说下面代码中用到的2通道实际上对应了给定的手柄左边的摇杆,摇杆从下推到上的值从200到1800)
  • 将手柄数据范围映射到腿高数据范围(手柄推动高低即我们期望的腿高低,也就是所谓的腿高期望值。摇杆从下推到上的值从200到1800,腿高是70到130,这个映射的数学公式也很简单假设我们现在控制器数据为 x x x则映射后的腿高为 70 + x − 200 1800 − 200 ⋅ ( 130 − 70 ) 70+\frac{x-200}{1800-200}\cdot(130-70) 70+1800200x200(13070)
  • 根据腿高计算舵机角度值
  • 控制舵机运动到相应的角度
void setup() {Serial.begin(921600);// 初始化串口通信,用于调试输出,波特率921600Wire.begin(1,2,400000UL);// 初始化I2C总线(SDA=GPIO1, SCL=GPIO2),时钟频率400kHzservos.init();// 初始化舵机控制器servos.setAngleRange(0,300);// 设置舵机角度范围(0-300度)servos.setPluseRange(500,2500);// 设置舵机PWM脉宽范围(500-2500μs)sbusRx.Begin(SBUSPIN,-1);// 初始化SBUS接收机(指定信号引脚,无反向)
}void loop() {getRCValue();// 读取遥控器通道数据/* 高度控制逻辑:* 将遥控器通道3的值映射到高度范围[lowest, highest]* RCCHANNEL3_MIN/MAX: 遥控器通道3的原始最小/最大值* Y_demand: 目标高度需求值*/Y_demand = ((int)map(RCValue[2], RCCHANNEL3_MIN, RCCHANNEL3_MAX, lowest, highest));// 调试输出:原始通道值 -> 映射后高度Serial.printf("%d\n",RCValue[2]);Serial.printf("%f\n",Y_demand);// 位置控制参数X = 0;// 水平位置保持0(中心位置)/* 高度平滑过渡:* 使用一阶惯性环节 Y = Y + Kp*(Y_demand - Y)* Kp_Y=0.1 为比例系数,数值越大响应越快但可能振荡*/Y = Y + Kp_Y * (Y_demand - Y);// 设置逆运动学参数(左右腿对称)IKParam.XLeft = X; // 左腿X坐标IKParam.XRight = X;// 右腿X坐标 IKParam.YLeft = Y;// 左腿Y坐标(高度)IKParam.YRight = Y;// 右腿Y坐标Serial.printf("%f,%f,%f\n",X,Y,Y_demand);// 执行逆运动学计算并驱动舵机inverseKinematics();
}

接下来再看实际逆运动学求解部分,该图片来自灯哥教学。
在这里插入图片描述

void inverseKinematics(){float alpha1,alpha2,beta1,beta2;uint16_t servoLeftFront,servoLeftRear,servoRightFront,servoRightRear;/*------------------------ 左腿计算 ------------------------*/// 可以对应上面的图片来看基本一致(左腿参数)float aLeft = 2 * IKParam.XLeft * L1;float bLeft = 2 * IKParam.YLeft * L1;float cLeft = IKParam.XLeft * IKParam.XLeft + IKParam.YLeft * IKParam.YLeft + L1 * L1 - L2 * L2;float dLeft = 2 * L4 * (IKParam.XLeft - L5);float eLeft = 2 * L4 * IKParam.YLeft;float fLeft = ((IKParam.XLeft - L5) * (IKParam.XLeft - L5) + L4 * L4 + IKParam.YLeft * IKParam.YLeft - L3 * L3);// 解二次方程得到大腿关节角度 alpha 和 beta(两个可能解)alpha1 = 2 * atan((bLeft + sqrt((aLeft * aLeft) + (bLeft * bLeft) - (cLeft * cLeft))) / (aLeft + cLeft));alpha2 = 2 * atan((bLeft - sqrt((aLeft * aLeft) + (bLeft * bLeft) - (cLeft * cLeft))) / (aLeft + cLeft));beta1 = 2 * atan((eLeft + sqrt((dLeft * dLeft) + eLeft * eLeft - (fLeft * fLeft))) / (dLeft + fLeft));beta2 = 2 * atan((eLeft - sqrt((dLeft * dLeft) + eLeft * eLeft - (fLeft * fLeft))) / (dLeft + fLeft));// 角度规范化(确保在0-2π范围内)alpha1 = (alpha1 >= 0)?alpha1:(alpha1 + 2 * PI);alpha2 = (alpha2 >= 0)?alpha2:(alpha2 + 2 * PI);/* 解的选择策略:* 左后腿选择大于π/4(45度)的解* 左前选择0~π/4范围内的解*/if(alpha1 >= PI/4) IKParam.alphaLeft = alpha1;else IKParam.alphaLeft = alpha2;if(beta1 >= 0 && beta1 <= PI/4) IKParam.betaLeft = beta1;else IKParam.betaLeft = beta2;/*------------------------ 右腿计算 ------------------------*/// 可以对应上面的图片来看基本一致(右腿参数)float aRight = 2 * IKParam.XRight * L1;float bRight = 2 * IKParam.YRight * L1;float cRight = IKParam.XRight * IKParam.XRight + IKParam.YRight * IKParam.YRight + L1 * L1 - L2 * L2;float dRight = 2 * L4 * (IKParam.XRight - L5);float eRight = 2 * L4 * IKParam.YRight;float fRight = ((IKParam.XRight - L5) * (IKParam.XRight - L5) + L4 * L4 + IKParam.YRight * IKParam.YRight - L3 * L3);IKParam.alphaRight = 2 * atan((bRight + sqrt((aRight * aRight) + (bRight * bRight) - (cRight * cRight))) / (aRight + cRight));IKParam.betaRight = 2 * atan((eRight - sqrt((dRight * dRight) + eRight * eRight - (fRight * fRight))) / (dRight + fRight));// 解二次方程得到大腿关节角度 alpha 和 beta(两个可能解)alpha1 = 2 * atan((bRight + sqrt((aRight * aRight) + (bRight * bRight) - (cRight * cRight))) / (aRight + cRight));alpha2 = 2 * atan((bRight - sqrt((aRight * aRight) + (bRight * bRight) - (cRight * cRight))) / (aRight + cRight));beta1 = 2 * atan((eRight + sqrt((dRight * dRight) + eRight * eRight - (fRight * fRight))) / (dRight + fRight));beta2 = 2 * atan((eRight - sqrt((dRight * dRight) + eRight * eRight - (fRight * fRight))) / (dRight + fRight));// 角度规范化(确保在0-2π范围内)alpha1 = (alpha1 >= 0)?alpha1:(alpha1 + 2 * PI);alpha2 = (alpha2 >= 0)?alpha2:(alpha2 + 2 * PI);/* 解的选择策略:* 右后腿选择大于π/4(45度)的解* 右前选择0~π/4范围内的解*/if(alpha1 >= PI/4) IKParam.alphaRight = alpha1;else IKParam.alphaRight = alpha2;if(beta1 >= 0 && beta1 <= PI/4) IKParam.betaRight = beta1;else IKParam.betaRight = beta2;// 弧度转角度alphaLeftToAngle = (int)((IKParam.alphaLeft / 6.28) * 360);betaLeftToAngle = (int)((IKParam.betaLeft / 6.28) * 360);alphaRightToAngle = (int)((IKParam.alphaRight / 6.28) * 360);betaRightToAngle = (int)((IKParam.betaRight / 6.28) * 360);// 角度矫正servoLeftFront = 90 + betaLeftToAngle;servoLeftRear = 90 + alphaLeftToAngle;servoRightFront = 270 - betaRightToAngle;servoRightRear = 270 - alphaRightToAngle;setServoAngle(servoLeftFront,servoLeftRear,servoRightFront,servoRightRear);
}

以左腿为例,查看串口输出
在这里插入图片描述反计算角度修正
左前: β = 120 − 90 = 30 \beta=120-90=30 β=12090=30
左后: α = 280 − 90 = 190 \alpha=280-90=190 α=28090=190
在这里插入图片描述

http://www.dtcms.com/wzjs/453739.html

相关文章:

  • 推广平台排名前十名seo怎么发布外链
  • 龙华做网站哪家好怎么自己创建网址
  • docker可以做网站吗seo整站优化吧
  • 做私服网站租给发布站北京网站优化经理
  • 奥迪汽车建设网站沈阳seo按天计费
  • 廊坊那家做网站排行榜网络营销项目
  • 网站要咋做怎么优化整站
  • wordpress店铺主题优化大师手机版下载
  • 台州网站如何制作朋友圈广告推广平台
  • 网站的首页面设计精准客户资源购买
  • 做电池的外贸网站怎么建网址
  • 网站 代理 备案 费用吗seo高手是怎样炼成的
  • 做网站的时候用的什么框架微博推广有用吗
  • 做一元购网站网络营销策划推广
  • 网站如何做的有特色潍坊住房公积金管理中心
  • 自己做店铺网站如何建立网站的步骤
  • 企业网站建设大概费用优化网络的软件下载
  • 河南省教育厅官方网站师德建设iis搭建网站
  • 哪个软件做网站最简单重庆seo顾问
  • 海外推广渠道都有哪些关键词优化是什么工作
  • 做调查赚钱的网站又哪些怎样做好网络推广呀
  • 哈尔滨市住房与城乡建设局网站关键词吉他谱
  • 网站模板搭建百度贴吧怎么做推广
  • 网站做的不好使东莞网站建设优化
  • 小型营销企业网站建设策划百度关键词推广条件
  • 网站付款接口这么做爱站网seo工具包
  • 网站ui设计怎么做长春网站排名提升
  • wordpress 共用数据库上首页的seo关键词优化
  • php网站开发流程逻辑google关键词优化
  • 注册网页版谷歌seo是什么意思