鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    关于利用MPU8060的数据达成z轴旋转角度控制的问题

    已定时 已固定 已锁定 已移动 未解决
    FishBot四驱机器人V2
    imu mpu6050
    1
    1
    97
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 2
      MeowDWing
      最后由 编辑

      我想用机器人做给定角度的旋转,下面是我的代码

      void Motor::spin_with_angle(float angle, int speed_ratio, bool clockwise)
      {
          spin_mode(speed_ratio, clockwise);
          if(!clockwise){
              angle = -angle; // If not clockwise, reverse the angle
          }
          Serial.printf("Spinning with angle: %.2f degrees, speed: %d, clockwise: %d\n", angle, speed_ratio, clockwise);
      
          imu.mpu.update(); // Update the IMU data
          float present_angle = imu.getAngle('z'); // Get the current angle from the IMU
          float target_angle = _calTargetAngle(angle, present_angle); // Calculate the target angle
      
          printf("Current angle: %.2f, Target angle: %.2f\n", imu.getAngle('z'), target_angle);
          while(
              clockwise ? imu.getAngle() < target_angle : imu.getAngle() > target_angle
          ) {
              printf("Current angle: %.2f, Target angle: %.2f\n", imu.getAngle('z'), target_angle);
              // Continuously check the angle until the target angle is reached
              delay(10); 
              imu.mpu.update(); // Update the IMU data
          }
          spin_mode(0, true); // Stop the motors after reaching the target angle
          // Implement the actual spinning logic here
      }
      

      他的逻辑很简单,就是先算当前角跟目标角,然后开始转,并持续跟踪,等到到达后就停止,但结果我发现无论怎么设置,甚至我人为给目标角加上一个修正项(大概-20°),他还是会在我设置90度时转动到100多度,我测试下是每10次90°旋转大概转3圈(这个还挺精准的,我试过多次,都是大概10次3圈,相差不会大于+-10°),也就是每次大约都会转108°,即使我设置让他转70°,他还是会转这么多。这有什么解决的办法吗

      我把mpu封装到了Imu类里,这个类只有一个mpu的实例和一些函数的简单再封装,而Motor类就定义了一些操作马达的函数,spin_mode就是设置pwmratio和顺时针还是逆时针。

      我比较希望有离线的方案,因为我需要用到的测试软件只能在windows下用,但如果要无线链接又得用linux版本,而且我期望的测试目标是绕一个固定的路线,所以期望他的旋转角能精度比较高。

      1 条回复 最后回复 回复 引用 0
      • ,2 2078998650 将这个主题转为问答主题
      • 第一个帖子
        最后一个帖子
      皖ICP备16016415号-7
      Powered by NodeBB | 鱼香ROS