For YRL Robot Arm

robotarm.h

Committer:
jah128
Date:
2017-03-03
Revision:
0:b14dfd8816da

File content as of revision 0:b14dfd8816da:

/* University of York Robotics Laboratory Robot Arm Controller Board
 * 
 * Robot Arm Controller 
 *
 * File: robotarm.h
 *
 * (C) Dept. Electronics & Computer Science, University of York
 * 
 * James Hilder, Alan Millard, Shuhei Miyashita, Homero Elizondo, Jon Timmis
 *
 * February 2017, Version 1.0
 */ 


#ifndef ROBOTARM_H
#define ROBOTARM_H

#define SOFTWARE_VERSION_CODE 0.21
#define LCD_ADDRESS 0x7C

// Remote control definitions:
// REMOTE_ENABLED = 1 to enable remote control polling
// REMOTE_POLL_RATE = poll rate in microseconds
// REMOTE_LINEAR_STEPS = 1 to use same step amount each step; 0 to use a exponentially increasing amount as button held
// REMOTE_START_SPEED = Size of step to use; suggest 2 for LINEAR_STEPS=0 or 10 for LINEAR_STEPS=1
// REMOTE_USE_CURRENT_POSITION = 0 will move based on the stored target position, 1 will read the current position and set target accordingly.  This may make certain settings combinations fail to move under cases of high-torque load and low step size
#define REMOTE_ENABLED 1
#define REMOTE_POLL_RATE 15627
#define REMOTE_LINEAR_STEPS 1
#define REMOTE_START_SPEED 10
#define REMOTE_USE_CURRENT_POSITION 0

#define HAS_BASE 1
#define HAS_SHOULDER 1
#define HAS_ELBOW 1
#define HAS_WRIST 0

#define INVERT_BASE 1
#define INVERT_SHOULDER 1
#define INVERT_ELBOW 0
#define INVERT_WRIST 0

// If USE_SOFT_LIMITS = 1, SERVOS WILL BE LIMITED TO RANGES THAT FOLLOW
#define USE_SOFT_LIMITS 1
#define BASE_LIMIT_LOW 100
#define BASE_LIMIT_HIGH 4000
#define SHOULDER_LIMIT_LOW 700
#define SHOULDER_LIMIT_HIGH 3400
#define ELBOW_LIMIT_LOW 380
#define ELBOW_LIMIT_HIGH 3720
#define USE_LIMIT_WARNING 1

#define BASE 10
#define SHOULDER 11
#define ELBOW 12
#define WRIST 13

#include "mbed.h"
#include "display.h"
#include "remote.h"
#include "servo.h"
#include "SerialHalfDuplex.h"

extern Display display;
extern Remote remote;
extern Serial pc;
extern Serial servo_data;
extern Servo servo;

extern char remote_on;
extern short target_base;
extern short target_shoulder;
extern short target_elbow;
extern short target_wrist;

/** Robotarm Class
 * The main class to define the robot arm
 *
 * Example code for main.cpp:
 * @code
 * #include "robotarm.h"
 * Robotarm arm;
 * int main(){
 *    arm.init();
 *    while(1) { //Do something!
 *    }
 * }
 * @endcode
 */
class Robotarm
{
public:
    /**
     * Main initialisation routine for the robot arm
     *
     * Set up the display, set up listener for remote control, set up servos
     */
    void init(void);
    
    /**
     * Test and initialise the servo motors
     */
    void init_servos(void);

    /**
     * Zero the servo motors (set to center position and activate)
     * @param time_delay: The time delay in seconds to wait before zeroing (0=no delay)
     */
    void zero_servos(float time_delay);
    
    /**
     * Called when servo initialisation fails; displays warning and halts program.
     */
    void fail_init(void);
    
    /**
     * Hardware test scans for all servos at different baud rates
     */
    void hardware_test(void); 

    /**
     * Initialise_servo is used to set the EPROM on a single servo so that its
     * ID and baud rate are correct; only to be used in initial configuration of the
     * arm, not in a normal program
     */
    void initialise_servo(int target_servo);
    
    private:
    
    void _zero_servos(void);
    void _zero_servos_display_update(void);
};
#endif // ROBOTARM_H

/*
 * Copyright 2017 University of York
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and limitations under the License.
 *
 */