optimize gripper code

This commit is contained in:
NuoDaJia02
2026-01-20 09:59:31 +08:00
parent fde2503b8c
commit d981bb5d7c

View File

@@ -117,14 +117,11 @@ class CtrlGuiNode(Node):
ui.notify(f'BT action {action_name} accepted', color='positive')
get_result_future = goal_handle.get_result_async()
get_result_future.add_done_callback(self.bt_action_done_callback)
while not get_result_future.done():
await asyncio.sleep(0.1)
result = get_result_future.result()
bt_result = result.result
status = result.status
self.file_logger.info(f'BT Action Result: {bt_result}, Status: {status}')
ui.notify(f'BT Action {action_name} finished', color='info')
def bt_action_feedback_callback(self, feedback_msg):
@@ -133,6 +130,14 @@ class CtrlGuiNode(Node):
self.file_logger.info(f'BT Action Feedback: {feedback}')
print(f'BT Action Feedback: {feedback}')
def bt_action_done_callback(self, future):
"""Callback for BT action completion."""
result = future.result()
bt_result = result.result
status = result.status
self.file_logger.info(f'BT Action Finished - Result: {bt_result}, Status: {status}')
print(f'BT Action Finished - Result: {bt_result}, Status: {status}')
async def call_gripper_action(self, id, loc, speed, torq, mode):
import asyncio
gm = GripperCmd.Goal()
@@ -161,10 +166,10 @@ class CtrlGuiNode(Node):
ui.notify(f'Gripper {id} action accepted', color='positive')
result_future = goal_handle.get_result_async()
result_future.add_done_callback(self.gripper_action_done_callback)
while not result_future.done():
await asyncio.sleep(0.1)
result = result_future.result()
ui.notify(f'Gripper {id} action finished', color='info')
def gripper_action_feedback_callback(self, feedback_msg):
@@ -179,6 +184,12 @@ class CtrlGuiNode(Node):
if hasattr(goal_feedback, 'torque'):
print(f"Feedback Torque: {goal_feedback.torque}")
def gripper_action_done_callback(self, future):
"""Callback for gripper action completion."""
result = future.result()
self.file_logger.info('Gripper action finished')
print('Gripper action finished')
def _on_arm_error(self, msg: ArmError) -> None:
"""Callback for /arm_errors subscription."""
self.last_arm_error[msg.arm_id] = msg
@@ -502,19 +513,38 @@ def build_ui(node: CtrlGuiNode) -> None:
)).classes('self-end')
with ui.column():
# with ui.row():
gripper_width = ui.input('width(0~255)', value=0).style('width: 100px')
with ui.row():
gripper_width = ui.input('width(0~255)', value=100).style('width: 100px')
gripper_torque = ui.input('torque(0~255)', value=50).style('width: 100px')
with ui.row():
gripper_speed = ui.input('speed(0~255)', value=150).style('width: 100px')
gripper_mode = ui.select(['位置模式', '力矩模式', "both"], value='位置模式').style('width: 100px')
with ui.row():
gripper_id = ui.select(['夹爪0', '夹爪1'], value='夹爪0').style('width: 100px')
async def gripper_control(id) -> None:
try:
print(f"Gripper {id} Send Action Start..")
await node.call_gripper_action(id, int(gripper_width.value), 50, 50, 2)
print(f"Gripper {id} Send Action Goal Finish")
id_value = 0
if id == '夹爪0':
id_value = 0
else:
id_value = 1
print(f"Gripper {id_value} Send Action Start..")
mode = 0
if gripper_mode.value == "both":
mode = 2
elif gripper_mode.value == "力矩模式":
mode = 1
node.file_logger.info(f"Gripper {id_value}, speed {gripper_speed.value}, torque={gripper_torque.value}, width={gripper_width.value}, mode={mode} Send Action Start..")
await node.call_gripper_action(id_value, int(gripper_width.value), int(gripper_torque.value), int(gripper_speed.value), mode)
print(f"Gripper {id_value} Send Action Goal Finish")
except Exception as e:
node.file_logger.error(f'Failed to gripper action send goal: {str(e)}')
# ui.element().style('height: 40px')
ui.button('控制夹爪0', on_click=lambda: show_confirm_dialog(f'确定控制夹爪0? gripper width: {gripper_width.value}', lambda: gripper_control(0))).classes('self-end')
ui.button('控制夹爪1', on_click=lambda: show_confirm_dialog(f'确定控制夹爪1? gripper width: {gripper_width.value}', lambda: gripper_control(1))).classes('self-end')
ui.button('控制夹爪', on_click=lambda: show_confirm_dialog(f'确定控制夹爪? gripper width: {gripper_width.value}, torque: {gripper_torque.value}, speed: {gripper_speed.value}, mode: {gripper_mode.value}, id: {gripper_id.value}', lambda: gripper_control((gripper_id.value)))).classes('self-end')
#move wheel
with ui.column():