diff --git a/groundStation/scripts/parameter.sh b/groundStation/scripts/parameter.sh new file mode 100755 index 0000000000000000000000000000000000000000..316aa17b36c078cc95b268902af85242bcfea632 --- /dev/null +++ b/groundStation/scripts/parameter.sh @@ -0,0 +1,36 @@ +cd .. +./setparam "y pos pid" "kp" 0.015 +./setparam "y pos pid" "ki" 0.005 +./setparam "y pos pid" "kd" 0.03 + +./setparam "x pos pid" "kp" -0.015 +./setparam "x pos pid" "ki" -0.005 +./setparam "x pos pid" "kd" -0.03 + +./setparam "altitude pid" "kp" 9804 +./setparam "altitude pid" "ki" 817 +./setparam "altitude pid" "kd" 7353 + +./setparam "pitch pid" "kp" 4.29 +./setparam "pitch pid" "ki" 0 +./setparam "pitch pid" "kd" 0 + +./setparam "roll pid" "kp" 4.29 +./setparam "roll pid" "ki" 0 +./setparam "roll pid" "kd" 0 + +./setparam "yaw pid" "kp" 2.6 +./setparam "yaw pid" "ki" 0 +./setparam "yaw pid" "kd" 0 + +./setparam "pitch rate pid" "kp" 1138.5 +./setparam "pitch rate pid" "ki" 0 +./setparam "pitch rate pid" "kd" 0 + +./setparam "roll rate pid" "kp" 1138.5 +./setparam "roll rate pid" "ki" 0 +./setparam "roll rate pid" "kd" 0 + +./setparam "yaw rate pid" "kp" 29700 +./setparam "yaw rate pid" "ki" 0 +./setparam "yaw rate pid" "kd" 0 diff --git a/groundStation/scripts/parameters.txt b/groundStation/scripts/parameters.txt deleted file mode 100644 index b59828a078dd77e18f25cc6b2a37763804fa76b5..0000000000000000000000000000000000000000 --- a/groundStation/scripts/parameters.txt +++ /dev/null @@ -1,27 +0,0 @@ -lat p -0.015 -lat i -0.005 -lat d -0.03 -long p 0.015 -long i 0.005 -long d 0.03 -height p 9804.0 -height i 817.0 -height d 7353.0 -pitch p 15.0 -pitch i 0.0 -pitch d 0.2 -roll p 15.0 -roll i 0.0 -roll d 0.2 -yaw p 2.6 -yaw i 0.0 -yaw d 0.0 -pitchv p 4600.0 -pitchv i 0.0 -pitchv d 550 -rollv p 4600.0 -rollv i 0.0 -rollv d 550 -yawv p 435480 -yawv i 0.0 -yawv d 0.0 diff --git a/groundStation/src/backend/backend.c b/groundStation/src/backend/backend.c index 8260372f6f16a07800e81a735cbd83a308dd6a9f..633d3c850280c1a7a9bd57d2962b0b6538ab7756 100644 --- a/groundStation/src/backend/backend.c +++ b/groundStation/src/backend/backend.c @@ -862,8 +862,12 @@ static void quad_recv() { static void handleResponse(struct metadata *m, uint8_t * data) { - ssize_t result; + ssize_t result = 0; char *buffer = malloc(sizeof(*buffer) * 128); + if (!buffer) { + warnx("failed immediatly"); + return; + } switch (m->msg_type) { case RESPPARAM_ID: @@ -876,20 +880,23 @@ static void handleResponse(struct metadata *m, uint8_t * data) result = DecodeResponseOutput(buffer, 128, m, data); break; case RESPNODES_ID: - result = DecodeResponseGetNodes(buffer, 128, m, data); + result = DecodeResponseGetNodes(&buffer, 128, m, data); break; case RESPADDNODE_ID: result = DecodeResponseAddNode(buffer, 128, m, data); break; default: - result = -1; + result = -2; break; } - if (result < 0) { + if (result == -2) { warnx("DecodeResponse error"); free(buffer); return; + } else if (result < 0) { + warnx("DecodeResponse error"); + return; } // printf("msg to client = '%s'\n", buffer); diff --git a/groundStation/src/backend/nodes.c b/groundStation/src/backend/nodes.c index 0b387f065ebff348b5e2a787d491278276bfbf4e..ec428f2dea92db1b9254053c140a0ad53b9a62b7 100644 --- a/groundStation/src/backend/nodes.c +++ b/groundStation/src/backend/nodes.c @@ -77,8 +77,10 @@ static int resizeMsg(char **msg_ptr, int *curr_max, int check_val) { /* resize the msg if necessary */ if (*curr_max < check_val) { *curr_max = *curr_max * 4; + char *old_ptr = *msg_ptr; *msg_ptr = realloc(*msg_ptr, sizeof(**msg_ptr) * *curr_max); if (!msg_ptr) { + *msg_ptr = old_ptr; return -1; } } @@ -89,7 +91,7 @@ static int resizeMsg(char **msg_ptr, int *curr_max, int check_val) { * Returns bytes written to msg, -1 on failure. */ int DecodeResponseGetNodes( - char * msg, /* Out */ + char ** msg, /* Out */ size_t max_len, /* msg buffer max size */ const struct metadata *m, /* In */ const uint8_t * data) /* In */ @@ -104,8 +106,8 @@ int DecodeResponseGetNodes( uint16_t num_nodes = BytesTo16(data[RESP_GN_NUM_NODES_L], data[RESP_GN_NUM_NODES_H]); - if (resizeMsg(&msg, (int *)&max_len, (m->data_len *2)) == -1) { - return -1; + if (resizeMsg(msg, (int *)&max_len, (m->data_len *2)) == -1) { + return -2; } int16_t val; @@ -113,29 +115,28 @@ int DecodeResponseGetNodes( size_t i; int msg_len = 0, msg_offset = 0, data_offset = RESP_GN_MIN_DATA_SIZE; - sprintf(msg, "getnodes %hu %n", num_nodes, &msg_offset); + sprintf(*msg, "getnodes %hu %n", num_nodes, &msg_offset); msg_len += msg_offset; - for(i = 0; i < num_nodes * 3; ++i) { if (i < num_nodes * 2) { val = BytesTo16(data[data_offset], data[data_offset+1]); data_offset += 2; - sprintf(&msg[msg_len], "%" PRId16 " %n", val, &msg_offset); + sprintf(&(*msg)[msg_len], "%" PRId16 " %n", val, &msg_offset); } else { strncpy(name, (char *) (data + data_offset), 512); data_offset += strlen(name) + 1; - sprintf(&msg[msg_len], "'%s' %n", name, &msg_offset); + sprintf(&(*msg)[msg_len], "'%s' %n", name, &msg_offset); } msg_len += msg_offset; - if (resizeMsg(&msg, (int *)&max_len, msg_len + (msg_offset *2)) == -1) { - return -1; + if (resizeMsg(msg, (int *)&max_len, msg_len + (msg_offset *2)) == -1) { + return -2; } } - strcat(&msg[msg_len], "\n"); - return strlen(msg); + strcat(&(*msg)[msg_len], "\n"); + return strlen(*msg); } enum ResponseAddnodeData { diff --git a/groundStation/src/backend/nodes.h b/groundStation/src/backend/nodes.h index 18f57c9a35419e483253da94b3e69e2d7c657fec..3ffc1bc7084a2c15c521d14ac83ac516b48e1c3c 100644 --- a/groundStation/src/backend/nodes.h +++ b/groundStation/src/backend/nodes.h @@ -29,7 +29,7 @@ ssize_t EncodeAddNode( * Returns bytes written to msg, -1 on failure. */ int DecodeResponseGetNodes( - char * msg, /* Out */ + char ** msg, /* Out */ size_t max_len, /* msg buffer max size */ const struct metadata *m, /* In */ const uint8_t * data); /* In */ diff --git a/groundStation/src/cli/cli.c b/groundStation/src/cli/cli.c index 876a6bb2410472f70dcfd4f391116428a6aac714..139534a4742e4b68b388cd9240d001c257c7fb77 100644 --- a/groundStation/src/cli/cli.c +++ b/groundStation/src/cli/cli.c @@ -3,6 +3,7 @@ #include <err.h> #include <libgen.h> #include <getopt.h> +#include <stdlib.h> #include "cli.h" @@ -15,6 +16,7 @@ int main(int argc, char **argv) struct backend_conn *conn; int needCliHelp = 0, needCommandHelp = 0; + setenv("POSIXLY_CORRECT", "1",1); // Determine if the cli was called using a symlink command = basename(argv[0]); for(i = 0; i < MAX_COMMANDS; ++i) { @@ -159,8 +161,6 @@ int convert_to_id(struct backend_conn * conn, char **argv, struct convert_data * int search_1 = 0, search_2 = 0; const struct graph_node_type * node_definition; - - if (!isNumber(argv[1])) { search_1 = 1; } else { diff --git a/groundStation/src/cli/cli_nodes.c b/groundStation/src/cli/cli_nodes.c index 3f1d1673e7985cd73f58642f8cd5d76683f70abd..64f910bbfff1811721ee5a8091560101b284d3d1 100644 --- a/groundStation/src/cli/cli_nodes.c +++ b/groundStation/src/cli/cli_nodes.c @@ -42,10 +42,10 @@ int cli_getnodes(struct backend_conn * conn, int argc, char ** argv) { printf("--------------------------------------------------------------------------------------------------------------\n"); printf("The following %lu Nodes have been found:\n", num_nodes); printf("--------------------------------------------------------------------------------------------------------------\n"); - printf("\tBLOCK\t\tTYPE\t\tNAME\t\tINPUTS\t\tPARAMS\t\tOUTPUTS\n"); + printf(" BLOCK\tTYPE\tNAME\t\tINPUTS\t\tPARAMS\t\tOUTPUTS\n"); printf("--------------------------------------------------------------------------------------------------------------\n"); for(i = 0; i < num_nodes; ++i) { - printf("\t%3d\t\t%3d\t\t%s\t", node_data[i].block, node_data[i].type, node_data[i].name); + printf(" %3d\t%3d\t%s\t", node_data[i].block, node_data[i].type, node_data[i].name); const struct graph_node_type * node_definition = blockDefs[node_data[i].type]; printf(" {");