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

    gazebo中设置电机力矩参数

    已定时 已固定 已锁定 已移动 已解决
    综合问题
    ros2 gazebo controller plugin transmission
    2
    6
    634
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • H
      hitcxy2022
      最后由 编辑

      在gazebo中加载urdf四足机器人模型(ROS2),利用Velocity_controller给了髋关节电机一个速度指令,但是撑不起来机器人的身体,而利用Effort_controller给力矩指令就可以。所以猜测是速度指令控制电机时电机的力矩不够,有什么标签或者方法可以设置关节电机的最大力矩吗?(或者最大功率?)目前还没有找到方法,感谢各位大佬不吝赐教!🤠

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬 @hitcxy2022
        最后由 编辑

        @hitcxy2022 其实可以自己简单写个 effort-velocity 控制器

        新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

        H 2 条回复 最后回复 回复 引用 0
        • H
          hitcxy2022 @小鱼
          最后由 编辑

          @小鱼 因为是新手所以之前觉得写控制器有点困难hh,我去尝试一下

          1 条回复 最后回复 回复 引用 0
          • H
            hitcxy2022 @小鱼
            最后由 编辑

            @小鱼 之前一直很不理解effort和velocity同时控制电机的原理,好像也没找到太具体的资料,请问这个有什么资料或者参考么😳

            小鱼小 1 条回复 最后回复 回复 引用 0
            • 小鱼小
              小鱼 技术大佬 @hitcxy2022
              最后由 编辑

              @hitcxy2022 输出力进行速度控制的原理通常涉及到一个叫做PID控制器(比例-积分-微分控制器)的概念。PID控制器通过不断调整输出力来维持系统的速度在设定值附近。下面是PID控制器的工作原理和一个简单的Python示例代码:

              1. PID控制器的工作原理:

                • 比例项(P):比例项根据当前速度误差来调整输出力,它与误差成正比,即误差越大,输出力调整越大。
                • 积分项(I):积分项考虑速度误差的积累,用于解决系统静态误差问题。它可以减小系统的稳态误差。
                • 微分项(D):微分项考虑速度误差的变化率,用于抑制系统的震荡。它可以减小系统的超调。
              2. Python示例代码:

              class PIDController:
                  def __init__(self, kp, ki, kd, setpoint):
                      self.kp = kp
                      self.ki = ki
                      self.kd = kd
                      self.setpoint = setpoint
                      self.prev_error = 0
                      self.integral = 0
              
                  def update(self, current_value):
                      error = self.setpoint - current_value
                      self.integral += error
                      derivative = error - self.prev_error
              
                      output = self.kp * error + self.ki * self.integral + self.kd * derivative
              
                      self.prev_error = error
                      return output
              
              # 设定参数和目标速度
              kp = 0.1
              ki = 0.01
              kd = 0.05
              setpoint = 100  # 目标速度
              
              # 创建PID控制器
              pid_controller = PIDController(kp, ki, kd, setpoint)
              
              # 模拟速度控制过程
              current_speed = 0
              for _ in range(100):
                  control_output = pid_controller.update(current_speed)
                  # 这里模拟将控制输出应用到系统中,更新速度
                  current_speed += control_output
                  print("当前速度:", current_speed)
              

              这个示例代码创建了一个PIDController类,通过调整kp、ki、kd参数和setpoint来实现速度的控制。你可以根据你的具体需求来调整这些参数以达到所需的速度控制效果。在实际应用中,你需要将控制输出应用到实际的机械系统中,以实现速度控制。

              新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

              H 1 条回复 最后回复 回复 引用 0
              • H
                hitcxy2022 @小鱼
                最后由 编辑

                @小鱼 感谢大佬!

                1 条回复 最后回复 回复 引用 0
                • H hitcxy2022 将这个主题标记为已解决,在
                • 第一个帖子
                  最后一个帖子
                皖ICP备16016415号-7
                Powered by NodeBB | 鱼香ROS