如何在if语句中使用模运算实现周期性电机调速逻辑?
问题分析与解决方案
原代码的核心问题是仅在模拟时间刚好是5000/10000/15000的整数倍瞬间才切换电机速度,其余时间都进入else分支;且超过15000ms后,模运算结果无法触发任何条件判断,导致循环逻辑失效。
要基于持续递增的模拟时间实现循环时段控制,正确的做法是先通过模运算将时间映射到15000ms的循环周期内,再根据周期内的相对时间判断所属区间:
修改后的代码
# 计算当前时间在15000ms循环内的相对时间 cycle_time = simulation_time % 15000 if 0 <= cycle_time < 5000: motorSpeed = actionList[choice1] elif 5000 <= cycle_time < 10000: motorSpeed = actionList[choice2] elif 10000 <= cycle_time < 15000: motorSpeed = actionList[choice3] else: # 兜底分支,理论上不会触发 motorSpeed = dict(speedLeft=0, speedRight=0)
逻辑说明
cycle_time = simulation_time % 15000:把持续递增的simulation_time映射到[0, 15000)区间,实现时间循环。比如16000ms时,cycle_time为1000ms,会自动进入第一个时段的调速逻辑。- 区间判断:通过相对时间的范围匹配对应逻辑,确保整个时段内都执行对应电机速度设置,而非仅在特定时间点切换。
内容的提问来源于stack exchange,提问作者JoRPaul
相关产品推荐
相关产品推荐

