紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
gazebo中设置电机力矩参数
-
在gazebo中加载urdf四足机器人模型(ROS2),利用Velocity_controller给了髋关节电机一个速度指令,但是撑不起来机器人的身体,而利用Effort_controller给力矩指令就可以。所以猜测是速度指令控制电机时电机的力矩不够,有什么标签或者方法可以设置关节电机的最大力矩吗?(或者最大功率?)目前还没有找到方法,感谢各位大佬不吝赐教!
-
@hitcxy2022 其实可以自己简单写个 effort-velocity 控制器
-
@小鱼 因为是新手所以之前觉得写控制器有点困难hh,我去尝试一下
-
@小鱼 之前一直很不理解effort和velocity同时控制电机的原理,好像也没找到太具体的资料,请问这个有什么资料或者参考么
-
@hitcxy2022 输出力进行速度控制的原理通常涉及到一个叫做PID控制器(比例-积分-微分控制器)的概念。PID控制器通过不断调整输出力来维持系统的速度在设定值附近。下面是PID控制器的工作原理和一个简单的Python示例代码:
-
PID控制器的工作原理:
- 比例项(P):比例项根据当前速度误差来调整输出力,它与误差成正比,即误差越大,输出力调整越大。
- 积分项(I):积分项考虑速度误差的积累,用于解决系统静态误差问题。它可以减小系统的稳态误差。
- 微分项(D):微分项考虑速度误差的变化率,用于抑制系统的震荡。它可以减小系统的超调。
-
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来实现速度的控制。你可以根据你的具体需求来调整这些参数以达到所需的速度控制效果。在实际应用中,你需要将控制输出应用到实际的机械系统中,以实现速度控制。
-
-
@小鱼 感谢大佬!
-