Skip to content
This repository has been archived by the owner on Jul 11, 2024. It is now read-only.

Updated arms::RELATIVE functionality | Implement movements based on vectors #103

Merged
merged 8 commits into from
Oct 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ EXCLUDE_COLD_LIBRARIES:=
IS_LIBRARY:=1

LIBNAME:=ARMS
VERSION:=3.1.2
VERSION:=3.2.0
# EXCLUDE_SRC_FROM_LIB= $(SRCDIR)/unpublishedfile.c
# this line excludes opcontrol.c and similar files
EXCLUDE_SRC_FROM_LIB+=$(foreach file, $(SRCDIR)/main,$(foreach cext,$(CEXTS),$(file).$(cext)) $(foreach cxxext,$(CXXEXTS),$(file).$(cxxext)))
Expand Down
16 changes: 16 additions & 0 deletions include/ARMS/chassis.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,22 @@ void turn(Point target, double max, double exit_error, MoveFlags = NONE);
void turn(Point target, double max, MoveFlags = NONE);
void turn(Point target, MoveFlags = NONE);

void moveVectorEnd(double magnitude, double angle, double max, double exit_error,
double lp, double ap, MoveFlags = NONE);
void moveVectorEnd(double magnitude, double angle, double max, double exit_error,
MoveFlags = NONE);
void moveVectorEnd(double magnitude, double angle, double max, MoveFlags = NONE);
void moveVectorEnd(double magnitude, double angle, MoveFlags = NONE);

void moveVectorPath(double magnitude, double angle, double max, double exit_error,
double lp, double ap, MoveFlags = NONE);
void moveVectorPath(double magnitude, double angle, double max, double exit_error,
MoveFlags = NONE);
void moveVectorPath(double magnitude, double angle, double max, MoveFlags = NONE);
void moveVectorPath(double magnitude, double angle, MoveFlags = NONE);



/**
* Assign a power to the left and right motors
*/
Expand Down
3 changes: 1 addition & 2 deletions include/ARMS/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

#include "ARMS/api.h"


namespace arms {

// Debug
Expand Down Expand Up @@ -69,4 +68,4 @@ inline void init() {

} // namespace arms

#endif
#endif
62 changes: 40 additions & 22 deletions include/ARMS/flags.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,92 +6,110 @@ namespace arms {
struct MoveFlags {

bool async;
bool relative;
bool true_relative;
bool thru;
bool reverse;
bool relative;

MoveFlags operator|(MoveFlags& o) {
MoveFlags ret;
ret.async = async || o.async;
ret.relative = relative || o.relative;
ret.true_relative = true_relative || o.true_relative;
ret.thru = thru || o.thru;
ret.reverse = reverse || o.reverse;
ret.relative = relative || o.relative;
return ret;
}

MoveFlags operator&(MoveFlags& o) {
MoveFlags ret;
ret.async = async && o.async;
ret.relative = relative && o.relative;
ret.true_relative = true_relative && o.true_relative;
ret.thru = thru && o.thru;
ret.reverse = reverse && o.reverse;
ret.relative = relative && o.relative;
return ret;
}

MoveFlags operator~() {
MoveFlags ret;
ret.async = !async;
ret.true_relative = !true_relative;
ret.thru = !thru;
ret.reverse = !reverse;
ret.relative = !relative;
return ret;
}

MoveFlags operator|(const MoveFlags& o) {
MoveFlags ret;
ret.async = async || o.async;
ret.relative = relative || o.relative;
ret.true_relative = true_relative || o.true_relative;
ret.thru = thru || o.thru;
ret.reverse = reverse || o.reverse;
ret.relative = relative || o.relative;
return ret;
}

MoveFlags operator&(const MoveFlags& o) {
MoveFlags ret;
ret.async = async && o.async;
ret.relative = relative && o.relative;
ret.thru = thru && o.thru;
ret.reverse = reverse && o.reverse;
return ret;
}

operator bool() {
return async || relative || thru || reverse;
return async || true_relative || thru || reverse || relative;
}
};

inline MoveFlags operator|(const MoveFlags& f, MoveFlags& o) {
MoveFlags ret;
ret.async = f.async || o.async;
ret.relative = f.relative || o.relative;
ret.true_relative = f.true_relative || o.true_relative;
ret.thru = f.thru || o.thru;
ret.reverse = f.reverse || o.reverse;
ret.relative = f.relative || o.relative;
return ret;
}

inline MoveFlags operator&(const MoveFlags& f, MoveFlags& o) {
MoveFlags ret;
ret.async = f.async && o.async;
ret.relative = f.relative && o.relative;
ret.true_relative = f.true_relative && o.true_relative;
ret.thru = f.thru && o.thru;
ret.reverse = f.reverse && o.reverse;
ret.relative = f.relative && o.relative;
return ret;
}

inline MoveFlags operator|(const MoveFlags& f, const MoveFlags& o) {
MoveFlags ret;
ret.async = f.async || o.async;
ret.relative = f.relative || o.relative;
ret.true_relative = f.true_relative || o.true_relative;
ret.thru = f.thru || o.thru;
ret.reverse = f.reverse || o.reverse;
ret.relative = f.relative || o.relative;
return ret;
}

inline MoveFlags operator&(const MoveFlags& f, const MoveFlags& o) {
MoveFlags ret;
ret.async = f.async && o.async;
ret.relative = f.relative && o.relative;
ret.true_relative = f.true_relative && o.true_relative;
ret.thru = f.thru && o.thru;
ret.reverse = f.reverse && o.reverse;
ret.relative = f.relative && o.relative;
return ret;
}

const MoveFlags NONE = {false, false, false, false};
const MoveFlags ASYNC = {true, false, false, false};
const MoveFlags RELATIVE = {false, true, false, false};
const MoveFlags THRU = {false, false, true, false};
const MoveFlags REVERSE = {false, false, false, true};
const MoveFlags NONE = {false, false, false, false, false};
const MoveFlags ASYNC = {true, false, false, false, false};
const MoveFlags TRUE_RELATIVE = {false, true, false, false, false};
const MoveFlags THRU = {false, false, true, false, false};
const MoveFlags REVERSE = {false, false, false, true, false};
const MoveFlags RELATIVE = {false, false, false, false, true};

const MoveFlags NOT_ASYNC = {false, true, true, true, true};
const MoveFlags NOT_TRUE_RELATIVE = {true, false, true, true, true};
const MoveFlags NOT_THRU = {true, true, false, true, true};
const MoveFlags NOT_REVERSE = {true, true, true, false, true};
const MoveFlags NOT_RELATIVE = {true, true, true, true, false};


} // namespace arms

Expand Down
21 changes: 21 additions & 0 deletions include/ARMS/odom.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,32 @@ double getMiddleEncoder();
*/
Point getPosition();

/**
* Return the desired robot position coordinates
*/
Point getDesiredPosition();


/**
* Set the desired robot position coordinates
*/
void setDesiredPosition(Point point);

/**
* Set the desired robot heading
*/
void setDesiredHeading(double angle);

/**
* Return the robot heading
*/
double getHeading(bool radians = false);

/**
* Return the desired robot heading
*/
double getDesiredHeading(bool radians = false);

/**
* Reset the robot position to a desired coordinate
*/
Expand Down
Loading
Loading