{"id":639,"date":"2014-08-25T17:40:51","date_gmt":"2014-08-25T16:40:51","guid":{"rendered":"http:\/\/ofalcao.pt\/blog\/?p=639"},"modified":"2014-08-25T17:40:51","modified_gmt":"2014-08-25T16:40:51","slug":"ad4m4st0r-controlo-por-joystick","status":"publish","type":"post","link":"https:\/\/ofalcao.pt\/blog\/2014\/ad4m4st0r-controlo-por-joystick","title":{"rendered":"AD4M4ST0R &#8211; controlo por joystick"},"content":{"rendered":"<div class=\"seriesmeta\">This post is part 7 of 9 of \u00a0<a href=\"https:\/\/ofalcao.pt\/blog\/series\/ad4m4st0r-um-rover-lego\" class=\"series-122\" title=\"AD4M4ST0R - um rover LEGO\">AD4M4ST0R - um rover LEGO<\/a><\/div><p>Apenas uma breve explica\u00e7\u00e3o do modo como o rover \u00e9 controlado quando em modo &#8216;joystick&#8217;:<\/p>\n<p>\u00c9 utilizado apenas o joystick da direita, correspondente ao par de eixos 2 (horizontal) e 3 (vertical). A \u00abpot\u00eancia\u00bb aplicada aos motores vai ser proporcional ao movimento do joystick portanto aos valores lidos nos eixos e que podem variar entre -1.0 e +1.0 sendo que no caso do eixo vertical est\u00e3o invertidos (o sentido positivo \u00e9 para baixo). Assim:<\/p>\n<p style=\"text-align: center;\">(x,y) = (axis2, -axis3)<\/p>\n<p style=\"text-align: left;\">Defini uma zona morta ao redor da posi\u00e7\u00e3o central (10% portanto entre -10.0 e +10.0 para ambos os eixos) de modo a que pequenos toques no joytick sejam ignorados:<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/151.236.52.166\/blog\/wp-content\/uploads\/2014\/08\/Diagram21.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-642\" src=\"https:\/\/i0.wp.com\/151.236.52.166\/blog\/wp-content\/uploads\/2014\/08\/Diagram21.png?resize=202%2C207\" alt=\"Diagram2\" width=\"202\" height=\"207\" \/><\/a><\/p>\n<p>Al\u00e9m disso para evitar acelera\u00e7\u00f5es bruscas optei por dar mais import\u00e2ncia \u00e0s amplitudes menores que \u00e0s maiores (como numa torneira em que se tem que rodar cada vez mais a torneira para se aumentando o caudal de \u00e1gua). Isso consegue-se aplicando uma fun\u00e7\u00e3o logar\u00edtmica:<\/p>\n<p style=\"text-align: center;\">f(x,y) = log10(100x,100y)<\/p>\n<p>N\u00e3o existe log10(0) mas isso j\u00e1 est\u00e1 prevenido <em>a priori<\/em> porque o centro est\u00e1 inclu\u00eddo na zona morta. O menor valor fora da zona morta ser\u00e1 0.1 e o maior valor ser\u00e1 1.0 [primeiro quadrante apenas]. Ora<\/p>\n<ul>\n<li>log10(100 x 0.1) = 1<\/li>\n<li>log10(100 x 1.0) = 2<\/li>\n<\/ul>\n<p>Como os motores aceitam valores entre -100 e +100 basta aplicar um factor de escala de 50x para cobrir a gama toda. Mas no meu programa usei um factor de 25x apenas porque achei que o rover movia-se demasiado r\u00e1pido [estou a pensar definir um bot\u00e3o do gamepad para comutar entre 25x e 50x para movimentos de precis\u00e3o vs. corridas].<\/p>\n<p>As curvas ocorrem quando o valor de x \u00e9 n\u00e3o-nulo e nessas ocasi\u00f5es reduzo o motor correspondente em 33% do valor de x (se quisermos curvas mais apertadas basta aumentar este valor).<\/p>\n<p>O resto do c\u00f3digo \u00e9 apenas identifica\u00e7\u00e3o dos quadrantes de modo a acertar os sinais dados aos motores.<\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"seriesmeta\">This post is part 7  of 9 of \u00a0<a href=\"https:\/\/ofalcao.pt\/blog\/series\/ad4m4st0r-um-rover-lego\" class=\"series-122\" title=\"AD4M4ST0R - um rover LEGO\">AD4M4ST0R - um rover LEGO<\/a><\/div><p>Apenas uma breve explica\u00e7\u00e3o do modo como o rover \u00e9 controlado quando em modo &#8216;joystick&#8217;: \u00c9 utilizado apenas o joystick da direita, correspondente ao par de eixos 2 (horizontal) e 3 (vertical). A \u00abpot\u00eancia\u00bb aplicada aos motores vai ser proporcional ao movimento do joystick portanto aos valores lidos nos eixos e que podem variar entre &hellip; <a href=\"https:\/\/ofalcao.pt\/blog\/2014\/ad4m4st0r-controlo-por-joystick\" class=\"more-link\">Continuar a ler<span class=\"screen-reader-text\"> &#8220;AD4M4ST0R &#8211; controlo por joystick&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[13,18,19],"tags":[67],"series":[122],"class_list":["post-639","post","type-post","status-publish","format-standard","hentry","category-ev3dev","category-lego","category-lego-mindstorms","tag-joystick","series-ad4m4st0r-um-rover-lego"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p2Mhyv-aj","_links":{"self":[{"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/posts\/639","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/comments?post=639"}],"version-history":[{"count":0,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/posts\/639\/revisions"}],"wp:attachment":[{"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/media?parent=639"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/categories?post=639"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/tags?post=639"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/series?post=639"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}