目录

  • 一、前言
  • 二、差速小车的python联动
  • 三、小车的人机界面控制
  • 实时监控
  • 手操控制
  • 四、后续工作


一、前言

本篇是《python机器人编程——差速机器人小车的控制,控制模型、轨迹跟踪,轨迹规划、自动泊车》系列的姊妹篇。来通过python去实现vrep下仿真小车的联动控制,为该篇提出的无人控制方法提供一个验证的环境,从而可以完善相应的控制方式,进一步深入探索。要实现的预期效果如下:

python3 rpa机器人 python机器人编程_开发语言

二、差速小车的python联动

这里,我们选择一个vrep里面已有的差速小车模型作为控制对象,它在里面的名字叫做先锋P3(“Pioneer_p3dx”),把它拖进来后,基本的脚本已经编好了。只要加入远程API相关的函数,和与python通信的规约就可以了,这块内容,跟之前机械臂的联动是一个原理,已经在《python机器人编程——VREP数字孪生四轴机械臂联合仿真》中进行了详细的描述。这里不再赘述。

python3 rpa机器人 python机器人编程_python3 rpa机器人_02


控制小车我们还是通过类似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

python3 rpa机器人 python机器人编程_python_03

三、小车的人机界面控制

实时监控

这篇不进行无人驾驶控制,实现的是基础的人机界面控制,差速小车就只有两个控制量,左轮的速度和右轮的速度,只要向小车定时下发左右轮的速度就可以控制小车了,为了能够监视小车的轨迹,将来用于轨迹自动跟踪等,我加入了轨迹的实时绘制,另外对小车的状态轮速和坐标进行了实时监控,如下效果:

python3 rpa机器人 python机器人编程_开发语言_04

手操控制

控制就通过不断调整两个轮子的速度来,并进行实时派发,起到远程控制小车的作用。

python3 rpa机器人 python机器人编程_开发语言_05


这里,增加了停止和继续的指令,用于及时停止小车,不至于开出边界掉落,后面还要根据之前对小车分析的集中状态,再完善和丰富一下控制指令:

python3 rpa机器人 python机器人编程_G1_06

四、后续工作

以上只是实现了小车的简单控制,为实现无人驾驶功能,还需要对小车的物理结构和它的运动模型进行适配,并且要通过多次试验把控制模型的参数给确定好,这个工作我们在《python机器人编程——差速机器人小车的控制,控制模型、轨迹跟踪,轨迹规划、自动泊车》系列进行继续深入。