{ "cells": [ { "cell_type": "code", "execution_count": null, "id": "initial_id", "metadata": { "collapsed": true }, "outputs": [], "source": [ "%%bash\n", "cd /home/jovyan/workspace/ros/src/giskardpy_ros/ && git checkout c4a25152faa05246a4c263b22b76696b7bc6a72a" ] }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "%%bash --bg\n", "roslaunch giskardpy_ros giskardpy_justin_standalone.launch" ], "id": "e10f2a7e539caebe" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "import rospy\n", "from geometry_msgs.msg import PoseStamped, Quaternion\n", "import numpy as np\n", "from giskardpy.utils.math import quaternion_from_axis_angle\n", "from giskardpy_ros.python_interface.python_interface import GiskardWrapper\n", "from copy import deepcopy" ], "id": "48bdd594f165488f" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": "rospy.init_node('justin_demo')", "id": "1f4e1e15d4d406e0" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": "giskard = GiskardWrapper()", "id": "5e93e2c3e069b1a9" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "kitchen_pose = PoseStamped()\n", "kitchen_pose.header.frame_id = 'map'\n", "kitchen_pose.pose.position.x = -2\n", "kitchen_pose.pose.position.y = 2\n", "kitchen_pose.pose.orientation = Quaternion(*quaternion_from_axis_angle([0, 0, 1], -np.pi / 2))\n", "giskard.world.add_urdf(name='dlr_kitchen',\n", " urdf=rospy.get_param('kitchen_description'),\n", " pose=kitchen_pose)\n" ], "id": "f4a04a641df84a39" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "default_pose = {\n", " \"torso1_joint\": 0.0,\n", " \"torso2_joint\": -0.9,\n", " \"torso3_joint\": 1.26,\n", " \"head1_joint\": 0.0,\n", " \"head2_joint\": 0.0\n", "}\n", "default_left_arm = {\n", " \"left_arm1_joint\": 0.41,\n", " \"left_arm2_joint\": -1.64,\n", " \"left_arm3_joint\": 0.12,\n", " \"left_arm4_joint\": 0.96,\n", " \"left_arm5_joint\": 0.71,\n", " \"left_arm6_joint\": -0.02,\n", " \"left_arm7_joint\": 0.43\n", "}\n", "default_right_arm = {\n", " \"right_arm1_joint\": 0.6,\n", " \"right_arm2_joint\": -1.59,\n", " \"right_arm3_joint\": 2.97,\n", " \"right_arm4_joint\": -0.99,\n", " \"right_arm5_joint\": -2.44,\n", " \"right_arm6_joint\": 0.0,\n", " \"right_arm7_joint\": 0.0,\n", "}\n", "\n", "better_pose = default_pose\n", "better_pose.update(default_left_arm)\n", "better_pose.update(default_right_arm)\n", "right_closed = {\n", " \"right_1thumb1_joint\": 0.0,\n", " \"right_1thumb2_joint\": 0.5,\n", " \"right_1thumb3_joint\": 0.5,\n", " \"right_3middle1_joint\": 0.0,\n", " \"right_3middle2_joint\": 0.5,\n", " \"right_3middle3_joint\": 0.5,\n", " \"right_4ring1_joint\": 0.0,\n", " \"right_4ring2_joint\": 0.5,\n", " \"right_4ring3_joint\": 0.5,\n", " \"right_2tip1_joint\": 0.0,\n", " \"right_2tip2_joint\": 0.5,\n", " \"right_2tip3_joint\": 0.5,\n", "}\n", "left_open = {\n", " \"left_1thumb1_joint\": 0.0,\n", " \"left_1thumb2_joint\": 0.0,\n", " \"left_1thumb3_joint\": 0.0,\n", " \"left_3middle1_joint\": 0.0,\n", " \"left_3middle2_joint\": 0.0,\n", " \"left_3middle3_joint\": 0.0,\n", " \"left_4ring1_joint\": 0.0,\n", " \"left_4ring2_joint\": 0.0,\n", " \"left_4ring3_joint\": 0.0,\n", " \"left_2tip1_joint\": 0.0,\n", " \"left_2tip2_joint\": 0.0,\n", " \"left_2tip3_joint\": 0.0,\n", "}\n", "left_closed = {\n", " \"left_1thumb1_joint\": 0.0,\n", " \"left_1thumb2_joint\": 0.5,\n", " \"left_1thumb3_joint\": 0.5,\n", " \"left_3middle1_joint\": 0.0,\n", " \"left_3middle2_joint\": 0.5,\n", " \"left_3middle3_joint\": 0.5,\n", " \"left_4ring1_joint\": 0.0,\n", " \"left_4ring2_joint\": 0.5,\n", " \"left_4ring3_joint\": 0.5,\n", " \"left_2tip1_joint\": 0.0,\n", " \"left_2tip2_joint\": 0.5,\n", " \"left_2tip3_joint\": 0.5,\n", "}\n", "right_open = {\n", " \"right_1thumb1_joint\": 0.0,\n", " \"right_1thumb2_joint\": 0.0,\n", " \"right_1thumb3_joint\": 0.0,\n", " \"right_3middle1_joint\": 0.0,\n", " \"right_3middle2_joint\": 0.0,\n", " \"right_3middle3_joint\": 0.0,\n", " \"right_4ring1_joint\": 0.0,\n", " \"right_4ring2_joint\": 0.0,\n", " \"right_4ring3_joint\": 0.0,\n", " \"right_2tip1_joint\": 0.0,\n", " \"right_2tip2_joint\": 0.0,\n", " \"right_2tip3_joint\": 0.0,\n", "}" ], "id": "fe3196e049c7aebf" }, { "metadata": {}, "cell_type": "code", "execution_count": null, "source": [ "giskard.motion_goals.add_joint_position(better_pose)\n", "giskard.add_default_end_motion_conditions()\n", "giskard.execute()\n", "\n", "handle_frame_id = 'dlr_kitchen/fridge_door_handle'\n", "handle_name = 'fridge_door_handle'\n", "door_joint = 'fridge_door_joint'\n", "fridge = 'dlr_kitchen/fridge'\n", "# base_goal = PoseStamped()\n", "box_name = 'box'\n", "kitchenette = 'dlr_kitchen/kitchenette'\n", "box_pose = PoseStamped()\n", "box_pose.header.frame_id = kitchenette\n", "box_pose.pose.position.z = 0.22\n", "box_pose.pose.position.x = -0.15\n", "box_pose.pose.orientation.w = 1.0\n", "giskard.world.add_box(name=box_name, size=(0.03, 0.15, 0.2), pose=box_pose, parent_link=kitchenette)\n", "giskard.world.dye_group(group_name=box_name, rgba=(0.0, 0.0, 1.0, 1.0))\n", "\n", "pre_grasp_pose = PoseStamped()\n", "pre_grasp_pose.header.frame_id = box_name\n", "pre_grasp_pose.pose.orientation = Quaternion(0, 1, 0, 0)\n", "pre_grasp_pose.pose.position.z = 0.35\n", "box_pre_grasped = 'pregrasp pose'\n", "giskard.motion_goals.add_cartesian_pose(name=box_pre_grasped,\n", " goal_pose=pre_grasp_pose,\n", " tip_link='r_gripper_tool_frame',\n", " root_link='map', end_condition=box_pre_grasped)\n", "\n", "grasp_pose = deepcopy(pre_grasp_pose)\n", "grasp_pose.pose.position.z -= 0.2\n", "box_grasped = giskard.motion_goals.add_cartesian_pose(name='grasp box',\n", " goal_pose=grasp_pose,\n", " tip_link='r_gripper_tool_frame',\n", " root_link='map',\n", " start_condition=box_pre_grasped)\n", "right_hand_closed = giskard.motion_goals.add_joint_position(name='close right hand',\n", " goal_state=right_closed,\n", " start_condition=box_pre_grasped)\n", "\n", "# dlr_kitchen_setup.tasks.add_maximize_manipulability(name='maximize manipulability right',\n", "# tip_link=dlr_kitchen_setup.r_tip,\n", "# root_link='torso4')\n", "\n", "giskard.monitors.add_end_motion(start_condition=f'{box_grasped} and {right_hand_closed}')\n", "# dlr_kitchen_setup.motion_goals.allow_self_collision(end_condition=box_pre_grasped)\n", "giskard.motion_goals.allow_collision(group1='rollin_justin', group2=box_name)\n", "giskard.motion_goals.allow_self_collision()\n", "giskard.motion_goals.add_justin_torso_limit(name='torso4_joint', end_condition='')\n", "giskard.execute()\n", "\n", "# %%\n", "giskard.world.update_parent_link_of_group(name=box_name, parent_link='r_gripper_tool_frame')\n", "\n", "# %% HAND OVER\n", "base_pose = PoseStamped()\n", "base_pose.header.frame_id = 'base_footprint'\n", "base_pose.pose.orientation.w = 1.0\n", "base_pose.pose.position.x = -1\n", "drove_back = giskard.motion_goals.add_cartesian_pose(name='drive back',\n", " goal_pose=base_pose,\n", " tip_link='base_footprint',\n", " root_link='map')\n", "\n", "hand_over_pose = PoseStamped()\n", "hand_over_pose.header.frame_id = 'l_gripper_tool_frame'\n", "hand_over_pose.pose.orientation = Quaternion(1, 0, 0, 0)\n", "hand_over_pose.pose.position.z = 0.3\n", "handed_over = 'hand over'\n", "giskard.motion_goals.add_cartesian_pose(name=handed_over,\n", " goal_pose=hand_over_pose,\n", " tip_link='r_gripper_tool_frame',\n", " root_link='l_gripper_tool_frame',\n", " end_condition=handed_over)\n", "left_hand_opened = 'open left hand'\n", "giskard.motion_goals.add_joint_position(name=left_hand_opened,\n", " goal_state=left_open,\n", " end_condition=left_hand_opened)\n", "left_hand_closed = 'close left hand'\n", "giskard.motion_goals.add_joint_position(name=left_hand_closed,\n", " goal_state=left_closed,\n", " start_condition=f'{handed_over} and {left_hand_opened}',\n", " end_condition=left_hand_closed)\n", "right_hand_opened = 'open right hand'\n", "giskard.motion_goals.add_joint_position(name=right_hand_opened,\n", " goal_state=right_open,\n", " start_condition=f'{left_hand_closed}',\n", " end_condition=right_hand_opened)\n", "# dlr_kitchen_setup.tasks.add_maximize_manipulability(name='maximize manipulability right',\n", "# tip_link=dlr_kitchen_setup.r_tip,\n", "# root_link='torso4')\n", "# dlr_kitchen_setup.tasks.add_maximize_manipulability(name='maximize manipulability left',\n", "# tip_link=dlr_kitchen_setup.l_tip,\n", "# root_link='torso4')\n", "\n", "giskard.monitors.add_end_motion(start_condition=f'{right_hand_opened} and {drove_back}')\n", "giskard.motion_goals.allow_collision(group1='rollin_justin', group2=box_name)\n", "giskard.motion_goals.allow_self_collision()\n", "giskard.motion_goals.add_justin_torso_limit(name='torso4_joint', end_condition='')\n", "giskard.execute()\n", "\n", "# %%\n", "giskard.world.update_parent_link_of_group(name=box_name, parent_link='l_gripper_tool_frame')\n", "# %% PLACE\n", "in_default_pose = 'default joint pose'\n", "giskard.motion_goals.add_joint_position(name=in_default_pose,\n", " goal_state=better_pose,\n", " end_condition=in_default_pose)\n", "handle_grasp_pose = PoseStamped()\n", "handle_grasp_pose.header.frame_id = handle_frame_id\n", "handle_grasp_pose.pose.orientation = Quaternion(0.5, 0.5, 0.5, 0.5)\n", "handle_grasp_pose.pose.position.x = -0.12\n", "handle_graped = 'grasp handle'\n", "giskard.motion_goals.add_cartesian_pose(name=handle_graped,\n", " goal_pose=handle_grasp_pose,\n", " tip_link='r_gripper_tool_frame',\n", " root_link='map',\n", " start_condition=in_default_pose,\n", " end_condition=handle_graped)\n", "right_hand_closed = 'close right hand'\n", "giskard.motion_goals.add_joint_position(name=right_hand_closed,\n", " goal_state=right_closed,\n", " start_condition=f'{handle_graped}',\n", " end_condition=right_hand_closed)\n", "\n", "door_open = 'open fridge'\n", "giskard.motion_goals.add_open_container(name=door_open,\n", " tip_link='r_gripper_tool_frame',\n", " environment_link=handle_name,\n", " start_condition=right_hand_closed,\n", " end_condition='')\n", "door_half_open = 'is door half open?'\n", "giskard.monitors.add_joint_position(name=door_half_open,\n", " goal_state={door_joint: np.pi / 4},\n", " start_condition=handle_graped,\n", " end_condition=door_half_open)\n", "\n", "place_pose = PoseStamped()\n", "place_pose.header.frame_id = fridge\n", "place_pose.pose.orientation = Quaternion(0.5, 0.5, 0.5, 0.5)\n", "place_pose.pose.position.z = 0.4\n", "place_pose.pose.position.x = 0.\n", "box_placed = 'place box'\n", "giskard.motion_goals.add_cartesian_pose(name=box_placed,\n", " goal_pose=place_pose,\n", " tip_link=box_name,\n", " root_link='map',\n", " start_condition=door_half_open,\n", " end_condition=box_placed)\n", "left_hand_opened = 'open left hand'\n", "giskard.motion_goals.add_joint_position(name=left_hand_opened,\n", " goal_state=left_open,\n", " start_condition=f'{box_placed}',\n", " end_condition=left_hand_opened)\n", "\n", "done = f'{door_open} and {left_hand_opened}'\n", "giskard.monitors.add_end_motion(start_condition=done)\n", "giskard.motion_goals.allow_collision(group2='right_hand',\n", " group1='dlr_kitchen')\n", "giskard.motion_goals.allow_self_collision()\n", "giskard.motion_goals.add_justin_torso_limit(name='torso4_joint', end_condition='')\n", "giskard.execute()\n", "\n", "# %%\n", "giskard.world.update_parent_link_of_group(name=box_name, parent_link=fridge)\n", "\n", "# %%\n", "retract_pose = PoseStamped()\n", "retract_pose.header.frame_id = 'l_gripper_tool_frame'\n", "retract_pose.pose.orientation.w = 1.0\n", "retract_pose.pose.position.z = -0.5\n", "retracted = 'retract left hand'\n", "giskard.motion_goals.add_joint_position(name=retracted,\n", " goal_state=default_left_arm,\n", " end_condition=retracted)\n", "delay = giskard.monitors.add_sleep(name='wait 1s', seconds=1)\n", "giskard.motion_goals.add_open_container(name='hold handle',\n", " tip_link='r_gripper_tool_frame',\n", " environment_link=handle_name,\n", " end_condition=delay)\n", "\n", "door_closed = giskard.motion_goals.add_close_container(name='close fridge',\n", " tip_link='r_gripper_tool_frame',\n", " environment_link=handle_name,\n", " start_condition=delay)\n", "giskard.monitors.add_end_motion(start_condition=f'{door_closed} and {retracted}')\n", "giskard.motion_goals.allow_collision(group2='right_hand',\n", " group1='dlr_kitchen')\n", "giskard.motion_goals.allow_self_collision()\n", "giskard.motion_goals.add_justin_torso_limit(name='torso4_joint', end_condition='')\n", "giskard.execute()" ], "id": "8db5b0dbba7b5fc5", "outputs": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 5 }