当前位置:   article > 正文

python机器人编程——差速AGV机器人VREP仿真python联动控制实现_基于机器人的python仿真

基于机器人的python仿真

一、前言

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

二、差速小车的python联动

这里,我们选择一个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) 
        
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

另外,需要在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       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

在这里插入图片描述

三、小车的人机界面控制

实时监控

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

手操控制

控制就通过不断调整两个轮子的速度来,并进行实时派发,起到远程控制小车的作用。
在这里插入图片描述
这里,增加了停止和继续的指令,用于及时停止小车,不至于开出边界掉落,后面还要根据之前对小车分析的集中状态,再完善和丰富一下控制指令:
在这里插入图片描述

四、后续工作

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/470804
推荐阅读
相关标签
  

闽ICP备14008679号