优化 move_to_hori_line 函数的移动速度控制和停止机制
- 根据目标移动距离动态调整移动速度,提升运动灵活性 - 新增平滑停止方法 stop_smooth,采用逐渐减速的方式实现更柔和的停止过程 - 确保机器人在移动和停止时的控制更加平稳
This commit is contained in:
parent
9c251bc471
commit
b02c2aea88
@ -259,7 +259,15 @@ def move_to_hori_line(ctrl, msg, target_distance=0.5, observe=False):
|
|||||||
forward = distance_to_move > 0 # 判断是前进还是后退
|
forward = distance_to_move > 0 # 判断是前进还是后退
|
||||||
|
|
||||||
# 设置移动速度
|
# 设置移动速度
|
||||||
move_speed = 1 # 米/秒
|
# 根据需要移动的距离动态调整移动速度
|
||||||
|
if abs(distance_to_move) > 1.0:
|
||||||
|
move_speed = 1.0 # 距离较远时用最大速度
|
||||||
|
elif abs(distance_to_move) > 0.5:
|
||||||
|
move_speed = 0.6 # 中等距离用中等速度
|
||||||
|
elif abs(distance_to_move) > 0.2:
|
||||||
|
move_speed = 0.3 # 较近距离用较慢速度
|
||||||
|
else:
|
||||||
|
move_speed = 0.15 # 非常接近时用最慢速度
|
||||||
if forward:
|
if forward:
|
||||||
msg.vel_des = [move_speed, 0, 0] # 设置前进速度
|
msg.vel_des = [move_speed, 0, 0] # 设置前进速度
|
||||||
else:
|
else:
|
||||||
@ -303,7 +311,7 @@ def move_to_hori_line(ctrl, msg, target_distance=0.5, observe=False):
|
|||||||
time.sleep(0.05) # 小间隔检查位置
|
time.sleep(0.05) # 小间隔检查位置
|
||||||
|
|
||||||
# 使用平滑停止
|
# 使用平滑停止
|
||||||
ctrl.base_msg.stop_force()
|
ctrl.base_msg.stop_smooth()
|
||||||
|
|
||||||
if observe:
|
if observe:
|
||||||
print(f"移动完成,平稳停止,通过里程计计算的移动距离: {distance_moved:.3f}米")
|
print(f"移动完成,平稳停止,通过里程计计算的移动距离: {distance_moved:.3f}米")
|
||||||
|
@ -22,4 +22,40 @@ class BaseMsg:
|
|||||||
self.ctrl.Send_cmd(self.msg)
|
self.ctrl.Send_cmd(self.msg)
|
||||||
if wait_time:
|
if wait_time:
|
||||||
time.sleep(wait_time / 1000)
|
time.sleep(wait_time / 1000)
|
||||||
|
|
||||||
|
def stop_smooth(self, wait_time=300):
|
||||||
|
"""平滑停止,采用逐渐减速的方式实现更柔和的停止过程"""
|
||||||
|
# 获取当前速度
|
||||||
|
current_vel = self.msg.vel_des.copy() if hasattr(self.msg, 'vel_des') and self.msg.vel_des else [0, 0, 0]
|
||||||
|
|
||||||
|
# 如果当前速度已经为零,直接调用普通停止
|
||||||
|
if all(abs(v) < 0.01 for v in current_vel):
|
||||||
|
self.stop(wait_time)
|
||||||
|
return
|
||||||
|
|
||||||
|
# 计算减速步数和每步减速量
|
||||||
|
steps = 5 # 减速分5步完成
|
||||||
|
step_time = wait_time / steps
|
||||||
|
vel_step = [v / steps for v in current_vel]
|
||||||
|
|
||||||
|
# 逐步减速
|
||||||
|
for i in range(steps):
|
||||||
|
# 计算当前步骤的目标速度
|
||||||
|
target_vel = [current_vel[j] - vel_step[j] * (i + 1) for j in range(len(current_vel))]
|
||||||
|
|
||||||
|
# 发送减速命令
|
||||||
|
self.msg.mode = 11
|
||||||
|
self.msg.gait_id = 26
|
||||||
|
self.msg.vel_des = target_vel
|
||||||
|
self.msg.duration = step_time
|
||||||
|
self.msg.life_count += 1
|
||||||
|
self.ctrl.Send_cmd(self.msg)
|
||||||
|
time.sleep(step_time / 1000)
|
||||||
|
|
||||||
|
# 最后确保完全停止
|
||||||
|
self.msg.vel_des = [0, 0, 0]
|
||||||
|
self.msg.duration = step_time
|
||||||
|
self.msg.life_count += 1
|
||||||
|
self.ctrl.Send_cmd(self.msg)
|
||||||
|
time.sleep(step_time / 1000)
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user