把课程的代码移植到了python上,但实现不了课程中的仿真,不知道什么问题,有大佬能帮忙看下吗?代码如下
import sim
import time
import numpy as np
import gait_plan
import inverse_kinematics
print('Program started')
sim.simxFinish(-1)
clientID = sim.simxStart('127.0.0.1', 19999, True, True, 5000, 5)
if clientID != -1:
print('Connected to remote API server')
# Now try to retrieve data in a blocking fashion (i.e. a service call):
res, objs = sim.simxGetObjects(clientID, sim.sim_handle_all, sim.simx_opmode_blocking)
if res == sim.simx_return_ok:
print('Number of objects in the scene: ', len(objs))
else:
print('Remote API function call returned with error code: ', res)
# time.sleep(2)
sim.simxStartSimulation(clientID, sim.simx_opmode_oneshot) # 开启仿真
res, lb_rot_1 = sim.simxGetObjectHandle(clientID, 'lb_rot_1', sim.simx_opmode_blocking)
res, lb_rot_2 = sim.simxGetObjectHandle(clientID, 'lb_rot_2', sim.simx_opmode_blocking)
res, lb_rot_3 = sim.simxGetObjectHandle(clientID, 'lb_rot_3', sim.simx_opmode_blocking)
res, lf_rot_1 = sim.simxGetObjectHandle(clientID, 'lf_rot_1', sim.simx_opmode_blocking)
res, lf_rot_2 = sim.simxGetObjectHandle(clientID, 'lf_rot_2', sim.simx_opmode_blocking)
res, lf_rot_3 = sim.simxGetObjectHandle(clientID, 'lf_rot_3', sim.simx_opmode_blocking)
res, rb_rot_1 = sim.simxGetObjectHandle(clientID, 'rb_rot_1', sim.simx_opmode_blocking)
res, rb_rot_2 = sim.simxGetObjectHandle(clientID, 'rb_rot_2', sim.simx_opmode_blocking)
res, rb_rot_3 = sim.simxGetObjectHandle(clientID, 'rb_rot_3', sim.simx_opmode_blocking)
res, rf_rot_1 = sim.simxGetObjectHandle(clientID, 'rf_rot_1', sim.simx_opmode_blocking)
res, rf_rot_2 = sim.simxGetObjectHandle(clientID, 'rf_rot_2', sim.simx_opmode_blocking)
res, rf_rot_3 = sim.simxGetObjectHandle(clientID, 'rf_rot_3', sim.simx_opmode_blocking)
# 设置电机力矩
# 第一条腿
rb_rot_1_force = 70
rb_rot_2_force = 70
rb_rot_3_force = 70
# 第二条腿
rf_rot_1_force = 70
rf_rot_2_force = 70
rf_rot_3_force = 70
# 第三条腿
lb_rot_1_force = 70
lb_rot_2_force = 70
lb_rot_3_force = 70
# 第四条腿
lf_rot_1_force = 70
lf_rot_2_force = 70
lf_rot_3_force = 70
# 设置电机角度参数
# 第一条腿
rb_rot_1_pos = 0
rb_rot_2_pos = 0
rb_rot_3_pos = 0
# 第二条腿
rf_rot_1_pos = 0
rf_rot_2_pos = 0
rf_rot_3_pos = 0
# 第三条腿
lb_rot_1_pos = 0
lb_rot_2_pos = 0
lb_rot_3_pos = 0
# 第四条腿
lf_rot_1_pos = 0
lf_rot_2_pos = 0
lf_rot_3_pos = 0
# 设置电机力矩
res = sim.simxSetJointMaxForce(clientID, lb_rot_1, lb_rot_1_force, sim.simx_opmode_blocking)
res = sim.simxSetJointMaxForce(clientID, lb_rot_2, lb_rot_2_force, sim.simx_opmode_blocking)
res = sim.simxSetJointMaxForce(clientID, lb_rot_3, lb_rot_3_force, sim.simx_opmode_blocking)
res = sim.simxSetJointMaxForce(clientID, lf_rot_1, lf_rot_1_force, sim.simx_opmode_blocking)
res = sim.simxSetJointMaxForce(clientID, lf_rot_2, lf_rot_2_force, sim.simx_opmode_blocking)
res = sim.simxSetJointMaxForce(clientID, lf_rot_3, lf_rot_3_force, sim.simx_opmode_blocking)
res = sim.simxSetJointMaxForce(clientID, rb_rot_1, rb_rot_1_force, sim.simx_opmode_blocking)
res = sim.simxSetJointMaxForce(clientID, rb_rot_2, rb_rot_2_force, sim.simx_opmode_blocking)
res = sim.simxSetJointMaxForce(clientID, rb_rot_3, rb_rot_3_force, sim.simx_opmode_blocking)
res = sim.simxSetJointMaxForce(clientID, rf_rot_1, rf_rot_1_force, sim.simx_opmode_blocking)
res = sim.simxSetJointMaxForce(clientID, rf_rot_2, rf_rot_2_force, sim.simx_opmode_blocking)
res = sim.simxSetJointMaxForce(clientID, rf_rot_3, rf_rot_3_force, sim.simx_opmode_blocking)
time.sleep(1)
startTime = time.time()
# print('startTime:{}'.format(startTime))
# 当前时间
currentTime = 0
# 步态标志位
gait_state = 2
lb_x = 0
rb_x = 0
lf_x = 0
rf_x = 0
lb_z = 0
rf_z = 0
lf_z = 0
rb_z = 0
sim_time = 0
sim_realtime = 0
while currentTime < 100:
currentTime = time.time()
currentTime = np.around(currentTime - startTime, 3)
# print('currentTime:{}'.format(currentTime))
if currentTime < 5:
# walk步态
if gait_state == 2:
lb_x = -0.1
rb_x = -0.1
lf_x = 0.1
rf_x = 0.1
lb_z = -0.482
rf_z = -0.482
lf_z = -0.482
rb_z = -0.482
pass
# trot步态
elif gait_state == 1:
lb_x = -0.1
rb_x = 0.1
lf_x = 0.1
rf_x = -0.1
lb_z = -0.482
rf_z = -0.482
lf_z = -0.482
rb_z = -0.482
pass
rec, sim_time = np.around(sim.simxGetFloatSignal(clientID, 'time',
sim.simx_opmode_blocking), 2)
print('sim_time:{}'.format(sim_time))
else:
res, sim_realtime = np.around(sim.simxGetFloatSignal(clientID, 'time',
sim.simx_opmode_blocking), 2)
print('sim_realtime:{}'.format(sim_realtime))
if gait_state == 2:
T = 1
time1 = np.around(sim_realtime - sim_time, 2)
time2 = np.around(sim_realtime - sim_time + 0.25, 2)
time3 = np.around(sim_realtime - sim_time + 0.5, 2)
time4 = np.around(sim_realtime - sim_time + 0.75, 2)
# print(
# 'time1:{}'.format(time1) + 'time2:{}'.format(time2) + 'time3:{}'.format(time3) + 'time4:{}'.format(
# time4))
T1 = np.around(np.mod(time1, T), 2)
T2 = np.around(np.mod(time2, T), 2)
T3 = np.around(np.mod(time3, T), 2)
T4 = np.around(np.mod(time4, T), 2)
lb_x, lb_z = gait_plan.gait_plan(T1, T)
rf_x, rf_z = gait_plan.gait_plan(T2, T)
rb_x, rb_z = gait_plan.gait_plan(T3, T)
lf_x, lf_z = gait_plan.gait_plan(T4, T)
# print('lb_x:{}'.format(lb_x) + 'lb_z:{}'.format(lb_z) + 'rf_x:{}'.format(rf_x) + 'rf_z:{}'.format(
# rf_z) + 'rb_x{}:'.format(rb_x) + 'rb_z:{}'.format(rb_z) + 'lf_x:{}'.format(lf_x) + 'lf_z:{}'.format(
# lf_z))
time1 = time1
time2 = time2 + 0.25
time3 = time3 + 0.5
time4 = time4 + 0, 75
pass
elif gait_state == 1:
T = 0.4
time1 = sim_realtime - sim_time
T1 = np.mod(time1, T)
time2 = sim_realtime - sim_time + 0.2
T2 = np.mod(time2, T)
lb_x, lb_z = gait_plan.gait_plan(T1, T)
rf_x, rf_z = gait_plan.gait_plan(T1, T)
rb_x, rb_z = gait_plan.gait_plan(T2, T)
lf_x, lf_z = gait_plan.gait_plan(T2, T)
pass
pass
# 单腿逆运动学
lb_rot_1_pos, lb_rot_2_pos, lb_rot_3_pos = inverse_kinematics.inverse_kinematic(lb_x, -0.15, lb_z)
lf_rot_1_pos, lf_rot_2_pos, lf_rot_3_pos = inverse_kinematics.inverse_kinematic(lf_x, -0.15, lf_z)
rb_rot_1_pos, rb_rot_2_pos, rb_rot_3_pos = inverse_kinematics.inverse_kinematic(rb_x, -0.15, rb_z)
rf_rot_1_pos, rf_rot_2_pos, rf_rot_3_pos = inverse_kinematics.inverse_kinematic(rf_x, -0.15, lf_z)
rec = sim.simxSetJointTargetPosition(clientID, lb_rot_1, -lb_rot_1_pos, sim.simx_opmode_oneshot)
rec = sim.simxSetJointTargetPosition(clientID, lb_rot_2, lb_rot_2_pos, sim.simx_opmode_oneshot)
rec = sim.simxSetJointTargetPosition(clientID, lb_rot_3, lb_rot_3_pos, sim.simx_opmode_oneshot)
rec = sim.simxSetJointTargetPosition(clientID, rf_rot_1, rf_rot_1_pos, sim.simx_opmode_oneshot)
rec = sim.simxSetJointTargetPosition(clientID, rf_rot_2, rf_rot_2_pos, sim.simx_opmode_oneshot)
rec = sim.simxSetJointTargetPosition(clientID, rf_rot_3, rf_rot_3_pos, sim.simx_opmode_oneshot)
rec = sim.simxSetJointTargetPosition(clientID, rb_rot_1, -rb_rot_1_pos, sim.simx_opmode_oneshot)
rec = sim.simxSetJointTargetPosition(clientID, rb_rot_2, rb_rot_2_pos, sim.simx_opmode_oneshot)
rec = sim.simxSetJointTargetPosition(clientID, rb_rot_3, rb_rot_3_pos, sim.simx_opmode_oneshot)
rec = sim.simxSetJointTargetPosition(clientID, lf_rot_1, lf_rot_1_pos, sim.simx_opmode_oneshot)
rec = sim.simxSetJointTargetPosition(clientID, lf_rot_2, lf_rot_2_pos, sim.simx_opmode_oneshot)
rec = sim.simxSetJointTargetPosition(clientID, lf_rot_3, lf_rot_3_pos, sim.simx_opmode_oneshot)
pass
sim.simxStopSimulation(clientID, sim.simx_opmode_blocking)
sim.simxFinish(clientID)
else:
print('Failed connecting to remote API server')
pass
print('Program ended')
第三方账号登入
QQ 微博 微信