赞
踩
本篇是《python机器人编程——差速机器人小车的控制,控制模型、轨迹跟踪,轨迹规划、自动泊车》系列的姊妹篇。来通过python去实现vrep下仿真小车的联动控制,为该篇提出的无人控制方法提供一个验证的环境,从而可以完善相应的控制方式,进一步深入探索。要实现的预期效果如下:
这里,我们选择一个vrep里面已有的差速小车模型作为控制对象,它在里面的名字叫做先锋P3(“Pioneer_p3dx”),把它拖进来后,基本的脚本已经编好了。只要加入远程API相关的函数,和与python通信的规约就可以了,这块内容,跟之前机械臂的联动是一个原理,已经在《python机器人编程——VREP数字孪生四轴机械臂联合仿真》中进行了详细的描述。这里不再赘述。
控制小车我们还是通过类似G代码的方式实现python侧和vrep侧的信息传输。例如:通过发送字符串“G80 G0 L* R** \r”的样式,L后面代表下发的左轮速度,R为后轮速度*。停止等指令方式类似,python如下:
def send_LR(clientID,J1,J2): """ 控制指令 """ speeds='G80 G0 L'+str(J1)+' R'+str(J2)+' \r' sim.simxWriteStringStream(clientID,"fromClient",str.encode(speeds),sim.simx_opmode_oneshot) return True def stop_car(clientID): """ 停止指令 """ sendangles='G80 S0 \r' sim.simxWriteStringStream(clientID,"fromClient",str.encode(sendangles),sim.simx_opmode_oneshot) def moveon_car(clientID): """ 继续移动指令 """ sendangles='G80 C0 \r' sim.simxWriteStringStream(clientID,"fromClient",str.encode(sendangles),sim.simx_opmode_oneshot)
另外,需要在vrep侧对所接受的指令进行解析,控制指令、停止指令、继续指令等,只要做一下稍微的lau代码就可以:
if string.sub(dat,1,6)=='G80 G0' then --car verocity set code G90 G1 L2 R2 print('receive :',dat) local order = split(dat,' ') local lv=tonumber(string.sub(order[3],2,string.len(order[3]))) local rv=tonumber(string.sub(order[4],2,string.len(order[4]))) print('receive G90 G0:',lv,rv) bvLeft=vLeft bvRight=vRight vLeft=lv vRight=rv dat='' end if string.sub(dat,1,6)=='G80 G1' then --car verocity ask code G90 G1 L2 R2 print('receive G80 G1:') sim.setStringSignal('toClient','G80 G1 L'..tostring(vLeft)..' R'..tostring(vRight)..' \r ') print('toClient','G80 G1 L'..tostring(vLeft)..' R'..tostring(vRight)..' \r ') dat='' end if string.sub(dat,1,6)=='G80 S0' then --car Stop print('receive G80 S0:') sim.setStringSignal('toClient','G80 S0') if vLeft-vRight~=0 and vLeft+vRight~=0 then bvLeft=vLeft bvRight=vRight end vLeft=0 vRight=0 print('send G80 S0:') dat='' end if string.sub(dat,1,6)=='G80 C0' then --car continue move print('receive G80 C0:') sim.setStringSignal('toClient','G80 C0') vLeft=bvLeft vRight=bvRight print('send G80 C1:') dat='' end
这篇不进行无人驾驶控制,实现的是基础的人机界面控制,差速小车就只有两个控制量,左轮的速度和右轮的速度,只要向小车定时下发左右轮的速度就可以控制小车了,为了能够监视小车的轨迹,将来用于轨迹自动跟踪等,我加入了轨迹的实时绘制,另外对小车的状态轮速和坐标进行了实时监控,如下效果:
控制就通过不断调整两个轮子的速度来,并进行实时派发,起到远程控制小车的作用。
这里,增加了停止和继续的指令,用于及时停止小车,不至于开出边界掉落,后面还要根据之前对小车分析的集中状态,再完善和丰富一下控制指令:
以上只是实现了小车的简单控制,为实现无人驾驶功能,还需要对小车的物理结构和它的运动模型进行适配,并且要通过多次试验把控制模型的参数给确定好,这个工作我们在《python机器人编程——差速机器人小车的控制,控制模型、轨迹跟踪,轨迹规划、自动泊车》系列进行继续深入。
本篇源码,完善后发到网上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。