Title: set_polar() vs set_position() · Issue #16 · uArm-Developer/SwiftProForArduino · GitHub
Open Graph Title: set_polar() vs set_position() · Issue #16 · uArm-Developer/SwiftProForArduino
X Title: set_polar() vs set_position() · Issue #16 · uArm-Developer/SwiftProForArduino
Description: Wondering why the speed on these two functions are different. set_position has much quicker capabilities. The source for set_polar() shows: `static enum uarm_protocol_e uarm_cmd_g2201(char *payload){ //
Open Graph Description: Wondering why the speed on these two functions are different. set_position has much quicker capabilities. The source for set_polar() shows: `static enum uarm_protocol_e uarm_cmd_g2201(char *payload...
X Description: Wondering why the speed on these two functions are different. set_position has much quicker capabilities. The source for set_polar() shows: `static enum uarm_protocol_e uarm_cmd_g2201(char *payload...
Opengraph URL: https://github.com/uArm-Developer/SwiftProForArduino/issues/16
X: @github
Domain: patch-diff.githubusercontent.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"set_polar() vs set_position()","articleBody":"Wondering why the speed on these two functions are different. set_position has much quicker capabilities. The source for set_polar() shows: \r\n`static enum uarm_protocol_e uarm_cmd_g2201(char *payload){\t\t\t\t\t\t// \u003c! polar coord\r\n\tuint8_t rtn = 0;\r\n\tchar s_str[10], r_str[10], h_str[10], f_str[10];\r\n\tif( rtn = sscanf(payload, \"S%[0-9-+.]R%[0-9-+.]H%[0-9-+.]F%[0-9-+.]\", s_str, r_str, h_str, f_str) \u003c 4 ){\r\n\t\tDB_PRINT_STR( \"sscanf %d\\r\\n\", rtn );\r\n\t\treturn UARM_CMD_ERROR;\t\t\r\n\t}else{\r\n\t\tfloat length = 0, angle = 0, high = 0, speed = 0;\r\n\t\tfloat target[3] = {0};\r\n\t\tif( !read_float(s_str, NULL, \u0026length) ){ return false; }\r\n\t\tif( !read_float(r_str, NULL, \u0026angle) ){ return false; }\r\n\t\tif( !read_float(h_str, NULL, \u0026high) ){ return false; }\r\n\t\tif( !read_float(f_str, NULL, \u0026speed) ){ return false; }\r\n\r\n\t\tangle = (angle - 90.0) / RAD_TO_DEG;\t\r\n\t\ttarget[X_AXIS] = length * cos(angle); \r\n\t\ttarget[Y_AXIS] = length * sin(angle);\r\n\t\ttarget[Z_AXIS] = high; \t\t\r\n\r\n\t\treturn mc_line( 1, target, speed, false );\r\n\t}\r\n}\r\n\r\nand source for set_position()\r\n`static enum uarm_protocol_e uarm_cmd_g2204(char *payload){\t\t\t\t\t// \u003c! coord offset \r\n\tuint8_t rtn = 0;\r\n\tchar x_str[10], y_str[10], z_str[10], f_str[10];\r\n\tif( rtn = sscanf(payload, \"X%[0-9-+.]Y%[0-9-+.]Z%[0-9-+.]F%[0-9-+.]\", x_str, y_str, z_str, f_str ) \u003c 4 ){\r\n\t\tDB_PRINT_STR( \"sscanf %d\\r\\n\", rtn );\r\n\t\treturn UARM_CMD_ERROR;\r\n\t}else{\r\n\t\tfloat x = 0, y = 0, z = 0, speed = 0;\r\n\t\tfloat target[3];\r\n\t\tif( !read_float(x_str, NULL, \u0026x) ){ return false; }\r\n\t\tif( !read_float(y_str, NULL, \u0026y) ){ return false; }\r\n\t\tif( !read_float(z_str, NULL, \u0026z) ){ return false; }\r\n\t\tif( !read_float(f_str, NULL, \u0026speed) ){ return false; }\r\n\r\n\t\tstep_to_coord( uarm.target_step[X_AXIS], uarm.target_step[Y_AXIS], uarm.target_step[Z_AXIS], \r\n\t\t\t\t\t\t\t\t\t \u0026target[X_AXIS], \u0026target[Y_AXIS], \u0026target[Z_AXIS] );\r\n\t\tcoord_arm2effect( \u0026target[X_AXIS], \u0026target[Y_AXIS], \u0026target[Z_AXIS] );\r\n\t\ttarget[X_AXIS] += x;\r\n\t\ttarget[Y_AXIS] += y;\r\n\t\ttarget[Z_AXIS] += z;\r\n\r\n\t\treturn mc_line( 1 , target, speed, false );\r\n\t}\r\n}\r\n\r\nNot the greatest at this trig, but i diffed it and found that it ends up decrementing and incrementing on the other while calling these two calculation functions:\r\nvoid coord_arm2effect(float *x, float *y, float *z){\r\n\tfloat anglec;\r\n\r\n\tif( *x == 0 ){\r\n\t\tif(*y \u003e 0){\r\n\t\t\tanglec = 90 / RAD_TO_DEG;\r\n\t\t}else{\r\n\t\t\tanglec = -90 / RAD_TO_DEG;\r\n\t\t}\r\n\t}else if(*x \u003c 0){\r\n\t\tanglec = NAN;\t// \u003c! cann't arrive\r\n\t}else{\r\n\t\tanglec = atan(*y / *x);\r\n\t}\t\r\n\r\n\t*x += uarm.param.front_offset * cos(anglec); \r\n\t*y += uarm.param.front_offset * sin(anglec);\r\n\t*z -= uarm.param.high_offset;\t\r\n\r\n}\r\n\r\nvoid coord_effect2arm(float *x, float *y, float *z){\r\n\tfloat anglec;\r\n\r\n\tif( *x == 0 ){\r\n\t\tif(*y \u003e 0){\r\n\t\t\tanglec = 90 / RAD_TO_DEG;\r\n\t\t}else{\r\n\t\t\tanglec = -90 / RAD_TO_DEG;\r\n\t\t}\r\n\t}else if(*x \u003c 0){\r\n\t\tanglec = NAN;\t// \u003c! cann't arrive\r\n\t}else{\r\n\t\tanglec = atan(*y / *x);\r\n\t}\t\r\n\r\n\t*x -= uarm.param.front_offset * cos(anglec); \r\n\t*y -= uarm.param.front_offset * sin(anglec);\r\n\t*z += uarm.param.high_offset;\t\t\r\n}\r\n\r\n`\r\nAny help making set_polar just as fast as set_position?","author":{"url":"https://github.com/P3nguin-M","@type":"Person","name":"P3nguin-M"},"datePublished":"2020-10-09T18:20:10.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/16/SwiftProForArduino/issues/16"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:10da6be5-5239-f753-9de1-cd186f8de1a7 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | EC58:2D8AA0:936E63:C56D5F:6977E68F |
| html-safe-nonce | 442ebc544b22eacfade67f2e24f79f51e8765a35e79c1ca262e55e4f999f4cab |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFQzU4OjJEOEFBMDo5MzZFNjM6QzU2RDVGOjY5NzdFNjhGIiwidmlzaXRvcl9pZCI6IjQ0NTQwODg0NTMwMzc0ODM2NjMiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | ec93c3a6c3ca1f248ff39d69bf5654993c27e63f31828b0de0f042dd57917adf |
| hovercard-subject-tag | issue:718339043 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/uArm-Developer/SwiftProForArduino/16/issue_layout |
| twitter:image | https://opengraph.githubassets.com/33a5fe6e08082f883d859582434f44e7800207102d90ca17754d7eb23971591f/uArm-Developer/SwiftProForArduino/issues/16 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/33a5fe6e08082f883d859582434f44e7800207102d90ca17754d7eb23971591f/uArm-Developer/SwiftProForArduino/issues/16 |
| og:image:alt | Wondering why the speed on these two functions are different. set_position has much quicker capabilities. The source for set_polar() shows: `static enum uarm_protocol_e uarm_cmd_g2201(char *payload... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | P3nguin-M |
| hostname | github.com |
| expected-hostname | github.com |
| None | 870e7b4ef171b9ec3e0c7f1f5cb9c5a5c1d1899865e861b49008c3f435fc1c4e |
| turbo-cache-control | no-preview |
| go-import | github.com/uArm-Developer/SwiftProForArduino git https://github.com/uArm-Developer/SwiftProForArduino.git |
| octolytics-dimension-user_id | 6229790 |
| octolytics-dimension-user_login | uArm-Developer |
| octolytics-dimension-repository_id | 92379761 |
| octolytics-dimension-repository_nwo | uArm-Developer/SwiftProForArduino |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 92379761 |
| octolytics-dimension-repository_network_root_nwo | uArm-Developer/SwiftProForArduino |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | c3b778ddc3525ff438f1b4bb848d8fd3aaf2e0dd |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width