10浏览
查看: 10|回复: 0

[项目] 【Arduino 动手做】全新视角的自平衡远程呈现机器人算法

[复制链接]
自平衡机器人是一个很酷的项目,许多创客喜欢在机器人世界的某个地方建造它。

在大多数情况下,您可以在互联网上找到自平衡机器人中使用的三种不同类型的电机:

步进电机
直流电动机
带正交编码器的直流电机

自平衡远程呈现机器人通过 https://cloud.husarion.com/ 提供的 Web 用户界面在全球范围内进行控制。您不仅可以控制该机器人,还可以通过 hVideo 应用程序(可在 App Store 或 Google Play 中找到)查看与该机器人集成的智能手机中的图像)

机器人的主要特点

• Web 用户界面
• 用于智能手机或小型平板电脑(iPad mini 是最大适配的平板电脑)的支架,带有 hVideo 应用程序(Android 或 iPhone/iPad))
• 稳定算法不受干扰
• 用于平衡启动/停止模式的伺服电机控制支腿
• 平稳驾驶
• 防止机器人损坏的底盘

机器人硬件概述

【Arduino 动手做】全新视角的自平衡远程呈现机器人算法图1

• 基于 Husarion CORE2 机器人控制器,具有 Arduino 兼容层和 RTOS
• 2 个带正交编码器的直流电机
• MPU9250惯性测量单元(陀螺仪 + 加速度计)和集成的 DMP 功能,用于完整的 3D 方向数据
• 1 个用于腿的舵机
• 3 个 18650 锂离子电池座(无需充电即可运行长达 8 小时)

稳定算法概述

【Arduino 动手做】全新视角的自平衡远程呈现机器人算法图2

该机器人使用 4 个 PID 调节器:
• 每个直流电机 1 个,带有用于电机速度调节的编码器
• 用于在机器人底盘和地面之间保持所需的角度
• 用于控制电机角度以获得整个机器人所需的速度

以下是稳定算法代码的示例:

  1. void RobotController::regTask()
  2. {
  3.         imu.resetFifo();
  4.         pidIMU.reset();
  5.         pidOut_IMU = 0.0;
  6.         pidV.reset();
  7.         pidOut_V = 0.0;
  8.         wheelLeft.reset();
  9.         wheelRight.reset();
  10.         while (1) {
  11.                 dt = sys.getRefTime() - lastTime;
  12.                 lastTime = sys.getRefTime();
  13.    
  14.     //get new angle
  15.                 angleNow = imu.getAngle();  //wait for interrupt and a new angle (every 20ms)
  16.                 //compute mean speed
  17.                 speedNow = (wheelLeft.getSpeed() + wheelRight.getSpeed()) / 2;
  18.                 //PID to control robot speed
  19.                 errSpeed = speedNow - targetSpeed;
  20.                 pidOut_V = pidV.update(errSpeed, dt);
  21.                 targetAngle = angle0 - pidOut_V;
  22.     //PID for controlling robot angle
  23.                 errAngle = angleNow - targetAngle;
  24.                 pidOut_IMU = pidIMU.update(errAngle, dt);
  25.                 if ((angleNow - angle0) > 30.0 || (angleNow - angle0) < -30.0) {
  26.                         pidIMU.reset();
  27.                         pidOut_IMU = 0.0;
  28.                         pidV.reset();
  29.                         pidOut_V = 0.0;
  30.                         wheelLeft.reset();
  31.                         wheelRight.reset();
  32.                 }
  33.    
  34.                 wheelLeft.setSpeed(pidOut_IMU + turnRight);
  35.                 wheelRight.setSpeed(pidOut_IMU - turnRight);
  36.                 wheelLeft.update(dt);
  37.                 wheelRight.update(dt);
  38.         }
  39. }
复制代码

【Arduino 动手做】全新视角的自平衡远程呈现机器人算法
项目链接:https://medium.com/husarion-blog ... orithm-d50d41711d58
项目作者:多米尼克·诺瓦克

项目视频(动画) :
https://miro.medium.com/v2/resize:fit:640/format:webp/0*3wf00ERu6WEgtRZm.
https://miro.medium.com/v2/resize:fit:640/format:webp/0*jJ06x3rUaJmhJBW2.
https://miro.medium.com/v2/resize:fit:640/format:webp/0*K_6SGkAljzrSUbOa.
https://miro.medium.com/v2/resize:fit:640/format:webp/0*AF1OEV1RkC2Tv9ag.
项目代码:https://github.com/husarion/self-balancing-telepresence-robot

【Arduino 动手做】全新视角的自平衡远程呈现机器人算法图4

【Arduino 动手做】全新视角的自平衡远程呈现机器人算法图3

【Arduino 动手做】全新视角的自平衡远程呈现机器人算法图5

【Arduino 动手做】全新视角的自平衡远程呈现机器人算法图6

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail