Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Smoothie by
Diff: modules/robot/Robot.h
- Revision:
- 2:1df0b61d3b5a
- Parent:
- 0:31e91bb0ef3c
--- a/modules/robot/Robot.h Sat Mar 01 02:37:29 2014 +0000
+++ b/modules/robot/Robot.h Fri Feb 28 18:52:52 2014 -0800
@@ -1,8 +1,8 @@
-/*
+/*
This file is part of Smoothie (http://smoothieware.org/). The motion control part is heavily based on Grbl (https://github.com/simen/grbl).
Smoothie is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
Smoothie is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- You should have received a copy of the GNU General Public License along with Smoothie. If not, see <http://www.gnu.org/licenses/>.
+ You should have received a copy of the GNU General Public License along with Smoothie. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef ROBOT_H
@@ -11,19 +11,7 @@
#include <string>
using std::string;
#include "libs/Module.h"
-#include "libs/Kernel.h"
-#include "../communication/utils/Gcode.h"
-#include "arm_solutions/BaseSolution.h"
-#include "Planner.h"
-
-#define default_seek_rate_checksum 6633
-#define default_feed_rate_checksum 47357
-#define mm_per_line_segment_checksum 30176
-#define mm_per_arc_segment_checksum 15470
-#define arc_correction_checksum 5074
-#define x_axis_max_speed_checksum 64935
-#define y_axis_max_speed_checksum 3752
-#define z_axis_max_speed_checksum 7849
+#include "RobotPublicAccess.h"
#define NEXT_ACTION_DEFAULT 0
#define NEXT_ACTION_DWELL 1
@@ -46,47 +34,78 @@
#define SPINDLE_DIRECTION_CW 0
#define SPINDLE_DIRECTION_CCW 1
-#define M_PI 3.14159
-
+class Gcode;
+class BaseSolution;
+class StepperMotor;
class Robot : public Module {
public:
Robot();
- virtual void on_module_loaded();
- virtual void on_config_reload(void* argument);
- virtual void on_gcode_received(void* argument);
- void execute_gcode(Gcode* gcode);
- void append_milestone( double target[], double feed_rate);
- void append_line( Gcode* gcode, double target[], double feed_rate);
- //void append_arc(double theta_start, double angular_travel, double radius, double depth, double rate);
- void append_arc( Gcode* gcode, double target[], double offset[], double radius, bool is_clockwise );
+ void on_module_loaded();
+ void on_config_reload(void* argument);
+ void on_gcode_received(void* argument);
+ void on_get_public_data(void* argument);
+ void on_set_public_data(void* argument);
+
+ void reset_axis_position(float position, int axis);
+ void get_axis_position(float position[]);
+ float to_millimeters(float value);
+ float from_millimeters(float value);
+
+ BaseSolution* arm_solution; // Selected Arm solution ( millimeters to step calculation )
+ bool absolute_mode; // true for absolute mode ( default ), false for relative mode
+
+ private:
+ void distance_in_gcode_is_known(Gcode* gcode);
+ void append_milestone( float target[], float rate_mm_s);
+ void append_line( Gcode* gcode, float target[], float rate_mm_s);
+ //void append_arc(float theta_start, float angular_travel, float radius, float depth, float rate);
+ void append_arc( Gcode* gcode, float target[], float offset[], float radius, bool is_clockwise );
- void compute_arc(Gcode* gcode, double offset[], double target[]);
- double to_millimeters(double value);
- double theta(double x, double y);
+ void compute_arc(Gcode* gcode, float offset[], float target[]);
+
+ float theta(float x, float y);
void select_plane(uint8_t axis_0, uint8_t axis_1, uint8_t axis_2);
- double current_position[3]; // Current position, in millimeters
- double last_milestone[3]; // Last position, in millimeters
- bool inch_mode; // true for inch mode, false for millimeter mode ( default )
- bool absolute_mode; // true for absolute mode ( default ), false for relative mode
- int8_t motion_mode; // Motion mode for the current received Gcode
- double seek_rate; // Current rate for seeking moves ( mm/s )
- double feed_rate; // Current rate for feeding moves ( mm/s )
+ float last_milestone[3]; // Last position, in millimeters
+ bool inch_mode; // true for inch mode, false for millimeter mode ( default )
+ int8_t motion_mode; // Motion mode for the current received Gcode
+ float seek_rate; // Current rate for seeking moves ( mm/s )
+ float feed_rate; // Current rate for feeding moves ( mm/s )
uint8_t plane_axis_0, plane_axis_1, plane_axis_2; // Current plane ( XY, XZ, YZ )
- BaseSolution* arm_solution; // Selected Arm solution ( millimeters to step calculation )
- double mm_per_line_segment; // Setting : Used to split lines into segments
- double mm_per_arc_segment; // Setting : Used to split arcs into segmentrs
-
+ float mm_per_line_segment; // Setting : Used to split lines into segments
+ float mm_per_arc_segment; // Setting : Used to split arcs into segmentrs
+ float delta_segments_per_second; // Setting : Used to split lines into segments for delta based on speed
+
// Number of arc generation iterations by small angle approximation before exact arc trajectory
// correction. This parameter maybe decreased if there are issues with the accuracy of the arc
// generations. In general, the default value is more than enough for the intended CNC applications
// of grbl, and should be on the order or greater than the size of the buffer to help with the
// computational efficiency of generating arcs.
int arc_correction; // Setting : how often to rectify arc computation
- double max_speeds[3]; // Setting : max allowable speed in mm/m for each axis
+ float max_speeds[3]; // Setting : max allowable speed in mm/m for each axis
+ // Used by Stepper
+ public:
+ StepperMotor* alpha_stepper_motor;
+ StepperMotor* beta_stepper_motor;
+ StepperMotor* gamma_stepper_motor;
+
+ std::vector<StepperMotor*> actuators;
+
+ float seconds_per_minute; // for realtime speed change
};
+// Convert from inches to millimeters ( our internal storage unit ) if needed
+inline float Robot::to_millimeters( float value ){
+ return this->inch_mode ? value * 25.4 : value;
+}
+inline float Robot::from_millimeters( float value){
+ return this->inch_mode ? value/25.4 : value;
+}
+inline void Robot::get_axis_position(float position[]){
+ memcpy(position, this->last_milestone, sizeof(float)*3 );
+}
+
#endif
