第一种情况没啥难度,直接做的第二种情况。第三种情况太难,有时间再说
我的思路跟机甲小兵不一样,用的是运动合成。
官方巡线用的是底盘跟随云台模式,我不是很喜欢。首先,云台根据线的情况先动,底盘跟着动,感觉响应速度会慢一些。其次,算法根据某个点的x坐标来转云台,我总感觉不太舒服,如果S1面前就是一条直线,如果S1以一个角度斜着进入,就会有一段很剧烈的调整的过程
于是我考虑用云台跟随底盘模式,然后,底盘采用运动合成
大师之路讲了,麦轮系统的速度是三个分量,X轴平移,Y轴平移和Z轴旋转。X方向不用说了,就是往前走,Y方向,我觉得应该用线上选定点的横坐标来计算,Z方向,我理解为转到前进方向,也就是线上选定点的切线方向,应该跟切线角挂钩。我用这个思路写了程序
官方美纹纸准备比赛的时候就用光了,淘宝上买的蓝色识别成功率低,用的绿色。希望官方出美纹纸,最好是红绿蓝三种颜色都有
def start():
Line = RmList()
V = 0.2 #速度,题目没提速度,那就龟速吧。家里地方小,速度快了,调试的时候横冲直撞,撞到家具太座会生气的
gimbal_ctrl.pitch_ctrl(-20) #向下转动云台到-20度
robot_ctrl.set_mode(rm_define.robot_mode_gimbal_follow) #云台跟随底盘模式
media_ctrl.exposure_value_update(rm_define.exposure_value_large) #曝光值设置,我家比较暗,设为大
vision_ctrl.enable_detection(rm_define.vision_detection_line) #打开线识别
vision_ctrl.line_follow_color_set(rm_define.line_follow_color_green) #线是绿色的
Line = RmList(vision_ctrl.get_line_detection_info()) #获得线信息
while True:
if len(Line) >= 22: #识别到线,走
t = Line[5] #t是第一点的切线角
if Line[3] >= 0.6: #第一点的横坐标大于0.6,判断为识别到双线中的右线
Dy = Line[3] - 0.77 #右线的目标值是0.77,调出来的,这个值可以保持与线合适的距离
else:
Dy = Line[3] - 0.5 #第一点的横坐标小于0.6判断为单线,目标值是0.5
chassis_ctrl.move_with_speed(V,3 * Dy,t * 2) #X方向为速度,Y方向S1到线的距离与设定值的差,Z方向为切线角,我比较懒,用的比例(其实PID也不会调)
else:
chassis_ctrl.stop() #未识别到线,停
Line=RmList(vision_ctrl.get_line_detection_info()) #再次获得线信息
我的思路跟机甲小兵不一样,用的是运动合成。
官方巡线用的是底盘跟随云台模式,我不是很喜欢。首先,云台根据线的情况先动,底盘跟着动,感觉响应速度会慢一些。其次,算法根据某个点的x坐标来转云台,我总感觉不太舒服,如果S1面前就是一条直线,如果S1以一个角度斜着进入,就会有一段很剧烈的调整的过程
于是我考虑用云台跟随底盘模式,然后,底盘采用运动合成
大师之路讲了,麦轮系统的速度是三个分量,X轴平移,Y轴平移和Z轴旋转。X方向不用说了,就是往前走,Y方向,我觉得应该用线上选定点的横坐标来计算,Z方向,我理解为转到前进方向,也就是线上选定点的切线方向,应该跟切线角挂钩。我用这个思路写了程序
官方美纹纸准备比赛的时候就用光了,淘宝上买的蓝色识别成功率低,用的绿色。希望官方出美纹纸,最好是红绿蓝三种颜色都有
def start():
Line = RmList()
V = 0.2 #速度,题目没提速度,那就龟速吧。家里地方小,速度快了,调试的时候横冲直撞,撞到家具太座会生气的
gimbal_ctrl.pitch_ctrl(-20) #向下转动云台到-20度
robot_ctrl.set_mode(rm_define.robot_mode_gimbal_follow) #云台跟随底盘模式
media_ctrl.exposure_value_update(rm_define.exposure_value_large) #曝光值设置,我家比较暗,设为大
vision_ctrl.enable_detection(rm_define.vision_detection_line) #打开线识别
vision_ctrl.line_follow_color_set(rm_define.line_follow_color_green) #线是绿色的
Line = RmList(vision_ctrl.get_line_detection_info()) #获得线信息
while True:
if len(Line) >= 22: #识别到线,走
t = Line[5] #t是第一点的切线角
if Line[3] >= 0.6: #第一点的横坐标大于0.6,判断为识别到双线中的右线
Dy = Line[3] - 0.77 #右线的目标值是0.77,调出来的,这个值可以保持与线合适的距离
else:
Dy = Line[3] - 0.5 #第一点的横坐标小于0.6判断为单线,目标值是0.5
chassis_ctrl.move_with_speed(V,3 * Dy,t * 2) #X方向为速度,Y方向S1到线的距离与设定值的差,Z方向为切线角,我比较懒,用的比例(其实PID也不会调)
else:
chassis_ctrl.stop() #未识别到线,停
Line=RmList(vision_ctrl.get_line_detection_info()) #再次获得线信息