xbox controller demo

This commit is contained in:
2025-06-07 11:22:05 +08:00
parent 83d6419d70
commit e079566597
3 changed files with 43 additions and 22 deletions

View File

@@ -45,7 +45,7 @@ def enable_fun(arm: RoboticArm):
class EndPoseController:
def __init__(self):
def __init__(self, init_joint, init_pose):
# 初始化pygame和手柄
pygame.init()
pygame.joystick.init()
@@ -65,8 +65,8 @@ class EndPoseController:
self.fine_control_mode = False
# 初始化末端姿态 [X, Y, Z, RX, RY, RZ] XYZ meter RX RY RZ rad
self.init_joint = [10, -125, 100, 100, 0, 0, -10]
self.init_pose = [-0.185, 0.315, 0.080, -1.500, -0.800, -0.000]
self.init_joint = init_joint
self.init_pose = init_pose
self.joint = self.init_joint
self.pose = self.init_pose
self.pose_speeds = [0.0] * 6
@@ -86,8 +86,8 @@ class EndPoseController:
self.angular_step = 0.001 # 角度步长(rad) - 从度转换为弧度
# 夹爪状态和速度
self.gripper = 0.0
self.gripper_speed = 0.0
self.gripper_open = False
self.gripper_speed = 10
# 启动更新线程
self.running = True
@@ -133,8 +133,8 @@ class EndPoseController:
self.joint = self.init_joint
self.pose = self.init_pose
self.pose_speeds = [0.0] * 6
self.gripper = 0.0
self.gripper_speed = 0.0
self.gripper_open = False
self.gripper_speed = 10
print("机械臂已重置到初始位置")
time.sleep(0.3) # 防止多次触发
@@ -144,16 +144,17 @@ class EndPoseController:
# 夹爪控制(圈/叉)
circle = self.joystick.get_button(1) # 夹爪开
cross = self.joystick.get_button(0) # 夹爪关
self.gripper_speed = 0.01 if circle else (-0.01 if cross else 0.0)
self.gripper_speed = 10 if circle else (10 if cross else 0)
self.gripper_open = True if circle else False
# 更新夹爪
self.gripper += self.gripper_speed
self.gripper = max(0.0, min(0.08, self.gripper))
# self.gripper += self.gripper_speed
# self.gripper = max(0.0, min(0.1, self.gripper))
time.sleep(0.02)
def update_end_pose(self):
print("1", self.pose)
print("1", self.pose, "griper", self.gripper_open)
"""更新末端位姿控制"""
# 根据控制模式调整步长
current_linear_step = self.linear_step * (0.1 if self.fine_control_mode else 1.0)
@@ -258,7 +259,8 @@ class EndPoseController:
'RX': self.pose[3],
'RY': self.pose[4],
'RZ': self.pose[5],
'gripper': self.gripper
'gripper_speed': self.gripper_speed,
'gripper_open': self.gripper_open
}
def stop(self):
@@ -274,8 +276,8 @@ class EndPoseController:
self.joint = self.init_joint
self.pose = self.init_pose
self.pose_speeds = [0.0] * 6
self.gripper = 0.0
self.gripper_speed = 0.0
self.gripper_open = False
self.gripper_speed = 10
print("已重置到初始状态")
@@ -283,14 +285,17 @@ if __name__ == "__main__":
# 初始化睿尔曼机械臂
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)
init_joint = [-90, 90, 90, 90, -90, -90, 90]
init_pose = [-0.030, 0.255, 0.161, 3.142, 0, -1.57]
# 创建机械臂连接
handle = arm.rm_create_robot_arm("169.254.128.18", 8080)
handle = arm.rm_create_robot_arm("192.168.3.18", 8080)
print(f"机械臂连接ID: {handle.id}")
# 使能机械臂
enable_fun(arm=arm)
teleop = EndPoseController()
teleop = EndPoseController(init_joint, init_pose)
try:
while True:
@@ -314,6 +319,13 @@ if __name__ == "__main__":
if result != 0:
print(f"运动控制错误,错误码: {result}")
if action['gripper_open']:
# arm.rm_set_gripper_release(action['gripper_speed'], block=True)
arm.rm_set_gripper_position(1000, True, 1)
else:
# arm.rm_set_gripper_pick(action['gripper_speed'], force=50, block=True)
arm.rm_set_gripper_position(1, True, 1)
# 获取当前机械臂状态
ret = arm.rm_get_current_arm_state()
if ret[0] == 0: # 成功获取状态

View File

@@ -1,7 +1,7 @@
from Robotic_Arm.rm_robot_interface import *
robot = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)
handle = robot.rm_create_robot_arm("169.254.128.19", 8080)
handle = robot.rm_create_robot_arm("192.168.3.18", 8080)
print("机械臂ID", handle.id)
software_info = robot.rm_get_arm_software_info()
@@ -16,3 +16,8 @@ if software_info[0] == 0:
else:
print("\nFailed to get arm software information, Error code: ", software_info[0], "\n")
print("Left: ", robot.rm_get_current_arm_state())
print("Left: ", robot.rm_get_arm_all_state())
# 断开所有连接,销毁线程
RoboticArm.rm_destory()

View File

@@ -2,16 +2,20 @@ from Robotic_Arm.rm_robot_interface import *
armleft = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)
lefthandle = armleft.rm_create_robot_arm("169.254.128.18", 8080)
lefthandle = armleft.rm_create_robot_arm("192.168.3.18", 8080)
print("机械臂ID", lefthandle.id)
print("Left: ", armleft.rm_get_current_arm_state())
print("Left: ", armleft.rm_get_arm_all_state())
armleft.rm_movej([10, -125, 100, 100, 0, 0, -10], 50, 0, 0, 1)
# armleft.rm_movej_p([-0.185, 0.315, 0.080, -1.500, -0.800, -0.000], 50, 0, 0, 1)
# armleft.rm_movej([-90, 90, 90, -90, -90, 90], 50, 0, 0, 1)
# armleft.rm_movej([-90, 90, 90, -90, -90, 90], 50, 0, 0, 1)
# armleft.rm_movej_p([-0.185, 0.315, 0.080, -1.500, -0.800, -0.000], 50, 0, 0, 1)s
# armleft.rm_movel([-0.185, 0.315, 0.080, -1.500, -0.800, -0.000], 50, 0, 0, 1)
armleft.rm_set_gripper_position(1000, True, 2)
import time
time.sleep(3)
armleft.rm_set_gripper_position(1, True, 2)
# 断开所有连接,销毁线程
RoboticArm.rm_destory()