====== Jaemi HUBO ====== {{youtube>ll0rMcHXw9I?large}}\\ ===== 3D printing shells ===== * Tutorials: {{ ::jamie-hubo_shell_3d_printing_and_solidworks_recreation.pdf |}} * Inventory: [[https://docs.google.com/spreadsheets/d/1u6UHnJ1XtFWTUfRkc8IrJKpliWGqgglOkiO_Sikml9U/edit#gid=0]] ===== Calibration ===== ==== Lower Body ==== Before preforming any experiments with the Jaemi Hubo, it is necessary to properly calibrate the joints to ensure repeatability of motion and alleviation of unnecessary bending moments when standing or walking. The sections below detail the procedure to calibrate the lower body of the Jaemi Hubo. === Required Tools === * Hoist/Gantry * Power supply/battery * Balancing plate * Laser level * Metal ruler {{dylanw:Hubo_Calibration_Tools.JPG}}\\ From left to right: long metal ruler, short metal ruler, liquid magnetic level, laser level\\ {{dylanw:Hubo_Balance_Plate.JPG}}\\ Hubo balance plate\\ === Procedure === {{dylanw:Hubo_Key_Fob.JPG}}\\ {{dylanw:Hubo_Calibration_Stance.JPG}}\\ When calibrating the joints, make sure that the laser level is projecting perpendicular to the face of the joint\\ {{dylanw:Hubo_Calibration_Stance_Side.JPG}}\\ Side view aligning the hip, knee, and ankle pitch joints using the laser level\\ {{dylanw:Hubo_Calibration_Stance_Front.JPG}}\\ Front view aligning the hip and ankle roll joints using the laser level\\ {{dylanw:Hubo_Calibration_Landmark.JPG}}\\ Use landmarks like holes to align the joints of the lower body\\ {{dylanw:Hubo_Calibration_Ruler.JPG}}\\ Use the metal ruler to check the yaw alignment of the lower body. The ruler will be flush with both limbs if the yaw is properly calibrated\\ Follow the steps of powering on the Jaemi Hubo in the [[drexel_jaemi_hubo#basic_operating_procedure|proceeding section]] up to [[drexel_jaemi_hubo#zeroing_jaemi_hubo_s_joints|zeroing the joints]]. Make sure that the robot is lifted off the ground before attempting to move any joints. {{dylanw:Calibration Lower Body GUI Window Highlight.png}}\\ Zero the joints of the lower body (click **Search** next to each joint of the lower body and waist, RHY, RHR, RHP, RKP, RAP, RAR, LHY, LHR, LHP, LKP, LAP, LAR, WST). Make sure the robot is off the ground when doing this. Lower the robot to the ground onto a flat, level plate (Hubo calibration plate). Use the three screws on the plate and the ball level to ensure that the plate is level with the ground. Check with laser level the alignment of the joints of the lower body. Use landmarks like joint bearings and axes to check the alignment. Make sure the level is as perpendicular to the joint surface as possible. If joints are not aligned, lift the robot and change the values in the boxes beneath the joint names and press **Go Offset**. The leftmost box represents the number of full rotations of the motor (4000 encoder ticks to one full rotation) while the rightmost box represents the number sub-rotations of the motor (below 4000 ticks). The rightmost box also controls the direction of rotation (e.g. **"1, -1000"** will move the motor 5000 ticks in the negative direction while **"1, 1000"** will move the motor 5000 ticks in the positive direction. {{dylanw:Calibration Lower Body GUI Window Go Offset Highlight.png}}\\ The offset values are absolute, meaning that they are referenced from the zeroed position of each joint coinciding with the joint's mechanical reference. Use a straight-edged metal ruler to check to see whether or not the legs are flush with one another. Also, check the distance between the legs to verify that both are parallel. {{dylanw:Calibration Lower Body GUI Window All Values Highlight.png}}\\ Once the proper offsets have been found, record the values of the offsets and click **Exit** in the z-phase dialog window. Click **CAN OFF** and **Exit** to exit the program. {{dylanw:Parameter_par.png}}\\ Open **parameter.par** under **projectname**\khr3win in a text editor. This file contains the motor parameters that are loaded onto the motor drivers when the robot initializes CAN communication. The data form a matrix whose row and column represented values are listed below. Unless mechanical changes are made to the robot in the form of replacing motors, harmonic drives or belts with **differing** components (e.g. smaller/larger harmonic drive, smaller/larger timing belt, encoder with a different number of ticks), do not change the any other values. To set the default home position, change **only** the values in columns 5 and 6 (rotation offset; sub-revolutions, direction). File contents: Column values: * Gear ratio of harmonic drive (e.g. 100 to 1, 160 to 1) * Driving gear (number of gear/belt teeth) * Driven gear (number of gear/belt teeth) * Ticks of encoder per revolution (e.g. 4000, 1024) * Rotation offset (full revolutions) **Edit to calibrate home position** * Rotation offset (sub-revolutions, direction) **Edit to calibrate home position** * Number of revolutions to search for zero * Motor direction Row values: * RHY (Right Hip Yaw) * RHR (Right Hip Roll) * RHP (Right Hip Pitch) * RKN (Right Knee Pitch) * RAP (Right Ankle Pitch) * RAR (Right Ankle Roll) * LHY (Left Hip Yaw) * LHR (Left Hip Roll) * LHP (Left Hip Pitch) * LKN (Left Knee Pitch) * LAP (Left Ankle Pitch) * LAR (Left Ankle Roll) * RSP (Right Shoulder Pitch) * RSR (Right Shoulder Roll) * RSY (Right Shoulder Yaw) * REB (Right Elbow Pitch) * RWY (Right Wrist Yaw) * RW1 (Right Wrist Coupled Pitch/Roll Motor #1) * RW2 (Right Wrist Coupled Pitch/Roll Motor #2) * LSP (Left Shoulder Pitch) * LSR (Left Shoulder Roll) * LSY (Left Shoulder Yaw) * LEB (Left Elbow Pitch) * LWY (Left Wrist Yaw) * LW1 (Left Wrist Coupled Pitch/Roll Motor #1) * LW2 (Left Wrist Coupled Pitch/Roll Motor #2) * WST (Waist Yaw) * NKY (Neck Yaw) * NK1 (Neck Coupled Pitch/Roll Motor #1) * NK2 (Neck Coupled Pitch/Roll Motor #2) ===== Basic Operating Procedure ===== ==== Setup ==== The procedure below details the steps needed to operate the Jaemi Hubo and execute basic built-in gestures and walking functionality. It is imperative to follow the instructions in this section exactly as there is no error checking in the Jaemi Hubo GUI. === Lift the Jaemi Hubo === Before powering the robot or attempting to move any joints, make sure that the robot is lifted off the ground at least 3" above the ground when the legs are fully extended. If a medical hoist is being used, make sure to spread apart the legs of the hoist using the lever at the rear. === Make sure all components are turned off === Check to verify that all switches on the power panel behind the Jaemi Hubo are facing down. === Connect the Main Power Supply === Plug in the power supply to an outlet and connect the five pin keyed barrel connector to the back of the Jaemi Hubo's power board. **(Optional) Install the Battery** Installing a battery is optional to powering the Jaemi Hubo. It is strongly recommended to connect the power supply to the robot when using a battery as many of the current batteries do not hold proper charges. === Turn on the 48V Supply === Turn on the main 48V supply switch on the power panel. === Turn on the Body Computer === Turn on both switches for the left and right body PCs. Currently, only the left body PC is installed. However, both switches must be activated to power the cooling fans which are required for the PCs to function normally. The PC will beep audibly upon booting. === Log into the Body Computer === Connect to the body PC using either a wired LAN connection or over the **HuNet** wireless network. The body PC will attempt to connect to **HuNet** if the network is detected by the wireless adapter. Both ports are set to static IPs. The IP for the wireless connection is 192.168.0.102. The IP for the wired connection 192.168.0.112. HuNet supports DHCP and can be connected to using default network settings. The wired LAN connection requires setting a static IP (e.g. IP: 192.168.0.113, Mask: 255.255.255.0, Default Gateway: 192.168.0.1). Open a remote desktop application. To use RDC under Windows, go to: Start -> run -> "mstsc.exe" (Windows XP or later)\\ Start -> Search -> "remote desktop connection" (Windows Vista or later) Log into the robot using the following credentials: **User:** hubo\\ **Login:** #@^#.. (SHIFT + 3263..)\\ Once logged in, wait for the desktop to load. ==== Running a khr3win Application ==== All Jaemi Hubo applications are created using a template of the original source code made in Visual Studio 6.0. The core elements of the code (RTX) interface with the low-level elements of the system that require precise timing like the motor controllers and sensors. The Windows portion of the code controls the GUI and interfaces with the code running on the RTX portion of the system. It is possible to modify the code on both the Windows side and RTX side of the program to implement custom functions. The procedure to build and run a template program is discussed below. === Run Visual Studio 6 === Upon loading the desktop, double-click on the Visual C++ 6.0 shortcut to launch Visual Studio 6.0. === Open the Program’s Workspace === All Hubo programs have an associated hubo2.dsw file with workspace parameters. Open the workspace file associated with the project that you're working with and wait for the project to load in Visual Studio. === Set Active Project Configuration as HUBO2 === Right-click on the project and select **Set as Active Project**. === Clean Active Project - HUBO2 === Right-click on the project and select **Clean**. === Build All - HUBO2- Win32 RTSS Release === Right-click on the project and select **Build**. === Set Active Project Configuration as khr3win === Right-click on the project and select **Set as Active Project**. === Clean Active Project - khr3win === Right-click on the project and select **Clean**. === Build All - khr3win === Right-click on the project and select **Build**. === Run the Hubo Program (khr3win.exe) === Click the red exclamation point button at the top of the toolbar to run the program. === Turn on the 12V Sensors and Motor Driver Switches === Switch **ON** the sensor switch and motor driver switch on the power panel behind the Jaemi Hubo. The motor drivers and sensors will turn on but the joints will still be pliable as the activation command has yet to be sent. === Move Jaemi Hubo Joints into Home Positions Manually === Move the joints as close to their homed position as possible to ensure proper homing. The legs and arms should be facing straight down and the torso should be flush with the pelvis. Keep each limb at least 1" apart from other limbs and the body. === Press CAN ON in the Main Menu === {{dylanw:CAN Message Dialog Box.png}}\\ Wait for the program to communicate with the motor drivers and sensor boards. If CAN communication is successful, the dialog box will return the following message. 0th JMC Board is ready for 10 msec Int. time. 1th JMC Board is ready for 10 msec Int. time. 2th JMC Board is ready for 10 msec Int. time. 3th JMC Board is ready for 10 msec Int. time. 4th JMC Board is ready for 10 msec Int. time. 5th JMC Board is ready for 10 msec Int. time. 6th JMC Board is ready for 10 msec Int. time. 7th JMC Board is ready for 10 msec Int. time. 8th JMC Board is ready for 10 msec Int. time. 9th JMC Board is ready for 10 msec Int. time. 10th JMC Board is ready for 10 msec Int. time. 11th JMC Board is ready for 10 msec Int. time. 0th EJMC Board is ready for 10 msec Int. time. 1th EJMC Board is ready for 10 msec Int. time. 2th EJMC Board is ready for 10 msec Int. time. 3th EJMC Board is ready for 10 msec Int. time. 4th EJMC Board is ready for 10 msec Int. time. 5th EJMC Board is ready for 10 msec Int. time. 0th Sensor Board is ready. 1th Sensor Board is ready. 2th Sensor Board is ready. 3th Sensor Board is ready. 4th Sensor Board is ready. 6th Sensor Board is ready. === Click OK on the Motor Controller/Sensor Check Screen === ==== Zeroing the Jaemi Hubo's Joints ==== Zeroing the joints of the Jaemi Hubo references the motion of the joint to a mechanical landmark (switch) on each joint. Before using the Jaemi Hubo, the joints must be properly [[drexel_jaemi_hubo#Calibration|calibrated]]. === Click ZPhase === {{dylanw:ZPhase Dialog Box.png}}\\ The ZPhase dialog window will open. === Home each joint === The ZPhase dialog window contains the controls to both home the Jaemi Hubo's joints and set joint offsets relative to the current offset. Click **Search** next to each joint or click **Auto Setup** at the bottom of the window. **Note:** If a joint fails during the auto setup routine, it must be reset by clicking **Search** next to the failed joint. === Click Exit in the ZPhase dialog box === ==== Zeroing the IMU, FT-Sensors ==== This next section details the steps needed to zero the IMU and force-torque sensors to enable the Jaemi Hubo to balance and walk. === Click "CAN OFF" in the Main Menu === === Click "Exit" in the Main Menu === === Switch OFF the Sensor switch === === Lower Hubo to the ground === === Wait 10 seconds === === Switch ON the Sensor switch === === Lift the Jaemi Hubo === === Run khr3win.exe === Click on the exclamation point icon provided that no code has been modified. === Enable CAN === === Click "ZMP Zero Set" in the Main Menu === === Click "FT Null" in the ZMP Zero Set Dialog === === Do NOT Close ZMP Zero Set Dialog and click "FT Show" in the Main Menu === === Click "F/T Null" in the FT Sensor Read dialog box === This will null the FT sensors again. This action must do this a minimum of one time. Make sure that the values in the left boxes of Mx, My, Fz for the left and right feet and the wrist are all between -4 and 4 before continuing. Each time **F/T Null** is pressed, the program will take the difference between the current value and zero and add that to the FT offset. === Click "Hide" in the FT Sensor Read dialog box === === Lower Hubo onto a perfectly level surface === === Click Tilt Show in the Main Menu === {{dylanw:Tilt Read Dialog Box.png}}\\ The **Tilt Read** dialog window will open. === Make sure the values are correct === The tilt of the torso should be between 70 to 100 for pitch and -10 to 10 for roll. === Click Start Compensation in the Tilt Read dialog box === Wait about 20 seconds for the tilt compensation to begin. === Click Hide in the Tilt Read dialog box === === Click Start in the ZMP Zero Set Dialog === {{dylanw:ZMP Zero Setting Dialog Box Start Compensation.png}}\\ Click the **Start** button in the dialog window to begin the ZMP homing procedure. This procedure requires around 5 to 10 minutes to settle on the proper values depending on the quality of the joint calibration. The desired values for the X-axis and Y-axiz ZMP are 10mm and 0mm (+/- 0.3mm) respectively. === Click "Set" in the ZMP Zero Set Dialog === {{dylanw:Calibration Set ZMP.png}}\\ Once the values of the ZMP are within an acceptable range, click **Set**. === Click "OK" in the pop up box with the text "Posture initialization is done" === The ZMP calibration is complete. === Click Exit in the ZMP Zero Set Dialog === The Jaemi Hubo is now ready to walk and perform gestures. ==== Walking and basic gestures ==== The following few steps must be take to complete the setup phase to run the Jaemi Hubo and enable waling and gestures. Further walking commands are covered in the [[drexel_jaemi_hubo#walking|walking section]] of the tutorial. === Click "Kirk Walking" in the Main Menu === === Click "Walk In Place" in the Kirk Walking Dialog box === The Jaemi Hubo will begin stepping in place. This routine sets flags within the program that will enable walking and other gestures to be performed later. === Click "Stop" in the Kirk Walking Dialog box === The Jaemi Hubo will stop moving and return to the default crouched position. This button must be pressed to conclude **all** walking commands. ===== Walking ===== Before attempting to run any walking routines, please make sure that the walking in place routine in the [[drexel_jaemi_hubo#walking_and_basic_gestures|preceding section]] has been run. Also, please make sure to allow sufficient slack in the hoist cables and power cord when walking or performing any gestures. In the Kirk walking dialog window, the buttons **Walk Ready** and **Home** set the posture of the Jaemi Hubo to the crouched walking position and the upright standing position, respectively. The Jaemi Hubo will be set to the crouched walking pose by default [[drexel_jaemi_hubo#Zeroing_the_IMU_FT-Sensors|during calibration]]. Please be sure that the Jaemi Hubo is in this position before attempting to run any walking routines. When a walking routine is running, all other buttons in the window will be disabled except for the **Stop** button. Routines will loop continuously unless prompted to terminate. Press the **Stop** button to end any routine currently running and wait until the robot is stationary before attempting to begin another routine. ==== Walking in Place ==== Walking in place is a necessary step in completing the initial setup to run the robot as described in the [[drexel_jaemi_hubo#Walking_and_basic_gestures|preceding section]]. Make sure that the robot is stationary before pressing **Walk in place**. Once pressed, the robot will continuously step in place. Press **Stop** to terminate the routine. ==== Walking Forward and Backward ==== The buttons **GO_FWD** and **GO_BWD** command the Jaemi Hubo to walk forward and walk backward, respectively. Make sure the robot is stationary before pressing either **GO_FWD** or **GO_BWD**. The robot will continuously move in the desired direction until the **Stop** button is pressed. The step length can be changed by changing the value in the **Step Length** text field. The default value is 150 mm. ==== Side-Stepping ==== The buttons **L_side** and **R_side** command the Jaemi Hubo to side-step to the left and right, respectively. Make sure the robot is stationary before pressing either **L_side** or **R_side**. The robot will continuously move in the desired direction until the **Stop** button is pressed. The side-step length can be changed by changing the value in the **Side Step Length** text field. The default value is 60 mm. ==== Turning ==== The buttons **CW** and **CCW** command the Jaemi Hubo to turn clockwise and counterclockwise, respectively. Make sure the robot is stationary before pressing either **CW** or **CCW**. The robot will continuously move in the desired direction until the **Stop** button is pressed. The turning angle can be changed by changing the value in the **Turning Angle** text field. The default value is 15 degrees. ===== Gestures ===== Gestures are a collection of upper body motions that can be performed through the **Gesture** dialog window. Click on **Gesture** in the Kirk walking dialog window to open the **Gesture** dialog window. The buttons in the **Upper Body Gesture** group perform a set of programmed gestures with the gesture description as the button name. For instance, pressing **Raise Right Arm** will raise and lower the Jaemi Hubo's right arm as a predefined routine. More complex motions can be performed by clicking on buttons like **Taichi**. These motions will conclude automatically and the robot will return to its default crouched position. ===== Special Functions ===== ==== Hand Shaking ==== ==== Active Stabilization ==== ==== Carrying Objects ====