V-REP初学者笔记

前言

因为毕业设计做的是机械臂电机驱动相关,用到了V-REP这一款机器人仿真器软件,然而除了官方手册,其他方面可供参考的资料是少之又少。所以主要参考官方的使用手册、其他各方的资料以及结合自己实际使用的经历,在此进行记录。(更新中)
官方下载


下载和安装

V-REP提供了Windows Mac Linux版本的安装包下载,其中EDU版本的下载和使用是免费的,软件本身体积较小。
Windows环境的安装直接执行所下载的exe文件。
Linux系统其实是免安装的,直接执行对应的vrep.sh脚本文件即可以正常启动。这一点相对于其他运动仿真软件(如Gazebo)要友好的多。

启动和模型导入

windows平台下直接点击相应.exe文件可以启动,Linux系统下需要进入软件安装文件夹,然后执行vrep.sh脚本文件进行启动。
VREP导入6自由度机械臂模型

RemoteAPI Python

下面是我使用VREP的python接口控制一个六自由度机械臂的示例代码:

vrep.simxFinish(-1)
clientID = vrep.simxStart('127.0.0.1', 19997, True, True, 5000, 5)#start connect
if clientID!=-1:
    print 'Connected to remote API server'
    vrep.simxLoadScene(clientID,'poppy_ergo_jr02.ttt',1,vrep.simx_opmode_oneshot_wait)
    vrep.simxStartSimulation(clientID,vrep.simx_opmode_oneshot_wait) #start simulation            
    res,target = vrep.simxGetObjectHandle(clientID, "target", vrep.simx_opmode_oneshot_wait)
    res,base = vrep.simxGetObjectHandle(clientID, "base", vrep.simx_opmode_oneshot_wait)
    res,targetPosition = vrep.simxGetObjectPosition(clientID, target,base, vrep.simx_opmode_streaming)
    print targetPosition
    targetPosition[0]= 0.1
    targetPosition[1]= -0.04
    targetPosition[2]= 0.04 
    res = vrep.simxSetObjectPosition(clientID, target,base,targetPosition,vrep.simx_opmode_streaming)
    res,m1Dyn = vrep.simxGetObjectHandle(clientID, "m1", vrep.simx_opmode_oneshot_wait)
    res,m2Dyn = vrep.simxGetObjectHandle(clientID, "m2", vrep.simx_opmode_oneshot_wait)
    res,m3Dyn = vrep.simxGetObjectHandle(clientID, "m3", vrep.simx_opmode_oneshot_wait)
    res,m4Dyn = vrep.simxGetObjectHandle(clientID, "m4", vrep.simx_opmode_oneshot_wait)
    res,m5Dyn = vrep.simxGetObjectHandle(clientID, "m5", vrep.simx_opmode_oneshot_wait)
    res,m6Dyn = vrep.simxGetObjectHandle(clientID, "m6", vrep.simx_opmode_oneshot_wait)

    res,m1Position = vrep.simxGetJointPosition(clientID, m1Dyn, vrep.simx_opmode_oneshot_wait)
    res,m2Position = vrep.simxGetJointPosition(clientID, m2Dyn, vrep.simx_opmode_oneshot_wait)
    res,m3Position = vrep.simxGetJointPosition(clientID, m3Dyn, vrep.simx_opmode_oneshot_wait)
    res,m4Position = vrep.simxGetJointPosition(clientID, m4Dyn, vrep.simx_opmode_oneshot_wait)
    res,m5Position = vrep.simxGetJointPosition(clientID, m5Dyn, vrep.simx_opmode_oneshot_wait)
    res,m6Position = vrep.simxGetJointPosition(clientID, m6Dyn, vrep.simx_opmode_oneshot_wait)
    try:
        while 1:
            res,m1Position = vrep.simxGetJointPosition(clientID, m1Dyn, vrep.simx_opmode_streaming)
            res,m2Position = vrep.simxGetJointPosition(clientID, m2Dyn, vrep.simx_opmode_streaming)
            res,m3Position = vrep.simxGetJointPosition(clientID, m3Dyn, vrep.simx_opmode_streaming)
            res,m4Position = vrep.simxGetJointPosition(clientID, m4Dyn, vrep.simx_opmode_streaming)
            res,m5Position = vrep.simxGetJointPosition(clientID, m5Dyn, vrep.simx_opmode_streaming)
            res,m6Position = vrep.simxGetJointPosition(clientID, m6Dyn, vrep.simx_opmode_streaming)
            angle2_comp = 0.95 - data1[1]*0.1/1080 - abs(683-abs(data1[0] - 960))*0.08/683
            angle3_comp = 0.95 - data1[1]*0.1/1080 - abs(683-abs(data1[0] - 960))*0.08/683
            motor_angle[0] = angle1a + m1Position*180/3.14
            motor_angle[1] = angle2a + m2Position*180*angle2_comp/3.14
            motor_angle[2] = angle3a + m3Position*180*angle3_comp/3.14
            motor_angle[3] = angle4a - m4Position*180/3.14
            motor_angle[4] = angle5a + m5Position*180*1/3.14
            motor_angle[5] = angle6a - m6Position*180*1/3.14
            print motor_angle
            Motion(ser,motor_angle,packet)  
            print data1[0],data1[1]
            print "Wheel"
            print data2
            if data2 == -1:
                targetPosition[2] = 0.04
            elif data2 == 0:
                print " "
            else:
                targetPosition[2] = 0.1
                
            targetPosition[0]= -0.1 + data1[0]/6800.0
            targetPosition[1]= -0.04 - data1[1]/6800.0
            
            res = vrep.simxSetObjectPosition(clientID, target,base,targetPosition,vrep.simx_opmode_streaming)
            #res,targetPosition = vrep.simxGetObjectPosition(clientID, target,base, vrep.simx_opmode_streaming)
            print targetPosition
            time.sleep(0.05)
        pass
    except KeyboardInterrupt:
        ser.close()
        vrep.simxStopSimulation(clientID,vrep.simx_opmode_oneshot_wait)
        vrep.simxFinish(clientID)
        print "Simulation Finish"
        print "Serial Closed"
        pass 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值