Агуулгын хүснэгт:

Суваг холих тухай ойлголт: 4 алхам (зурагтай)
Суваг холих тухай ойлголт: 4 алхам (зурагтай)

Видео: Суваг холих тухай ойлголт: 4 алхам (зурагтай)

Видео: Суваг холих тухай ойлголт: 4 алхам (зурагтай)
Видео: КАК НАСТРОИТЬ L4D2 2024, Долдугаар сарын
Anonim
Image
Image
Холих арга »Үгүй
Холих арга »Үгүй

Хэрэв та алсын удирдлагатай явах эд анги жолоодож байсан бол үүнийг мэдэхгүй байсан ч холих аргыг ашиглах магадлал өндөр байна. Тодруулбал, хэрэв та гулсалтын жолоодлого эсвэл дифференциал жолоодлоготой тээврийн хэрэгслийг удирдахын тулд ганцхан джойстик эсвэл чимхүүр ашигласан бол та холих аргыг ашигласан болно.

Холих нь явах эд ангийн хоёр талд хичнээн их хүч өгөх ёстойг тодорхойлохын тулд таны джойстик дээрх өгөгдлийг хэрхэн ашиглахыг хэлнэ.

Хэрэв та джойстыг онгойлговол ерөнхийдөө дотор нь хоёр потенциометрийг харах болно. Нэг нь Y тэнхлэгийн дагуу (дээш, доош) одоогийн байрлалаа хэмжих, нөгөө нь X тэнхлэгийн дагуу (хажуу тийш) байрлалаа хэмжих.

Надад энэ сэдвээр албан ёсны сургалт байхгүй ч гэсэн би өмнө нь код холих ёстой байсан бөгөөд саяхан би энэ сэдвийг жаахан гүнзгийрүүлэхийг хүссэн юм.

Нэгдүгээрт, ихэнх RC дамжуулагч нь олон мотор хянагчийн нэгэн адил холих чадвартай байдаг гэдгийг тэмдэглэхийг хүсч байна. Хэрэв та кодоо өөрөө холих шаардлагатай бол энэ мэдээлэл хамгийн ашигтай байх болно. Жишээлбэл, хэрэв та Arduino ашиглан RC хүлээн авагчийн хольцгүй өгөгдлийг уншиж байгаа бол, эсвэл тогооноос аналог өгөгдлийг джойстик дээр уншиж байгаа эсвэл гар утасны програм дээрх дижитал джойстикээс координат уншиж байгаа бол хэлээрэй.

Холих өөр өөр аргуудыг авч үзье.

Алхам 1: холих арга »Үгүй

Эхлээд хэрэв та холихыг огт ашиглахгүй бол юу болохыг харцгаая. Хэрэв та өгөгдлийг нэг тэнхлэгээс явах эд ангиудын нөгөө талд, нөгөө тэнхлэгийг нөгөө тал руу илгээвэл таны машин таны хүссэнээр хариу өгөхгүй болно.

Жишээлбэл, хэрэв та джойстикийг бүхэлд нь шууд урагшлуулбал Y тэнхлэг нь бүрэн тохируулагчтай, X тэнхлэг нь 0 байна. Тиймээс та шууд явахын оронд тойрог хэлбэрээр жолоодох болно.

Алхам 2: Аргын арга »Эргүүлэх

Аргын арга »Эргүүлэх
Аргын арга »Эргүүлэх

Нэгэн удаа хамт ажилладаг хүн надад дамжуулагчаа 45 градус эргүүлж, ядуу хүний холимогийг авах боломжтой гэж надад хэлсэн. Хэрэв та джойстик дахь хоёр потенциометрийн утгыг сүлжээнд x тэнхлэг гэж үзвэл (хоёр тэнхлэг нь -100 -аас +100 хүртэл), энэ нь маш утга учиртай, учир нь та хоёр тэнхлэг дээр +100 болно. джойстикийг дээш, баруун тийш түлхэх үед. Хэрэв энэ нь таны явах эд анги хоёр сувагтай шууд холбогдож байвал (таны роботын зүүн ба баруун талд) роботыг урагшлуулах болно.

Миний туршиж үзсэн холих анхны арга бол x ба y координатыг торны төв цэгийн эргэн тойронд 45 градус эргүүлэх явдал байв.

Энэ нь сайн ажилладаг, гэхдээ би 100% хүчээр урагшлах боломжгүй, учир нь та эргэх үед хөдөлгөөнийг сүлжээ доторх тойрог хэлбэрээр хязгаарладаг бөгөөд энэ нь та хэзээ ч баруун дээд буланд орж чадахгүй гэсэн үг юм.

Үүний үр дүнд сүлжээний буланг ашиглахгүй болно. Хэрэв та хөдөлгөөнөө хязгаарладаг джойстик/чимхүүр ашиглаж байгаа бол эдгээр хэсэгт хэзээ ч хүрч чадахгүй байгаа бол энэ нь асуудал биш юм, гэхдээ өөрөөр хэлбэл таны хөдөлгөөн бүрэн пропорциональ байхын тулд сүлжээний тэр хэсгийг ямар нэгэн зүйл хийхийг хүсэх болно.

Хэрэв та над шиг харааны чиглэлээр суралцаж байгаа бол энэхүү зааврын эхэнд байгаа видеог үзээд энэ ойлголтыг ойлгоход хялбар байх болно.

Зарим кодын жишээг авч үзье.

МИНИЙ КОДЫН ЖИШЭЭ ТУХАЙ ТАЙЛБАР: Таны төслийн байдлаас шалтгаалан joystick_x болон joystick_y -ийн утгыг хэрхэн олж авахыг би орхиж байна. Мөн би ± 100 -ийн зураглал/хязгаарлалтыг хийх болно, гэхдээ та ХОУХ -ны хувьд 1000-2000, аналог гаралтын хувьд 0 - 255 гэх мэтээр зураглах шаардлагатай байж магадгүй юм.

Arduino -ийн жишээ:

// математикаар эргүүлэх

давхар рад = -45*M_PI/180; int leftThrottle = joystick_x * cos (rad) - joystick_y * sin (rad); int rightThrottle = joystick_y * cos (rad) + joystick_x * sin (rad); // constrain leftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = хязгаарлах (rightThrottle, -100, 100);

JavaScript -ийн жишээ:

// математикийн rotatevar rad = -45*Math. PI/180; leftThrottle = joystick_x * Math.cos (rad) - joystick_y * Math.sin (rad); rightThrottle = joystick_y * Math.cos (rad) + joystick_x * Math.sin (rad); // constrainleftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100); // helper functionvar constrain = function (num, min, max) {return Math.min (Math.max (num, min), max); };

Алхам 3: Аргын арга »Энгийн

Аргын арга »Энгийн
Аргын арга »Энгийн

Дараа нь бид маш энгийн тэгшитгэлийг олж авсан бөгөөд үүнийг би Shawn Hymel -ийн шинжлэх ухааны SparkFun дахь адал явдалт видеонуудаас олж авсан бөгөөд тэр миний ажиллаж байсантай төстэй төсөл дээр ажиллаж байсан юм.

Энэхүү тэгшитгэл нь урагшлахдаа бүрэн хурдыг авах боломжийг олгодог боловч эргүүлэх аргын нэгэн адил сүлжээний булангийн хэсгүүдийг үл тоомсорлодог. Учир нь зарим тохиолдолд дээд тал нь 100, зарим тохиолдолд дээд тал нь 200 байдаг. Тиймээс та 100 -аас хойшхи аливаа зүйлийг үл тоомсорлохын тулд constrain функцийг ашиглана.

Дашрамд хэлэхэд би энэ энгийн зүйлийг доромжилсон гэж нэрлэхгүй … энгийн байдлын гоо үзэсгэлэн байдаг.

Arduino -ийн жишээ:

int leftThrottle = joystick_y + joystick_x;

int rightThrottle = joystick_y - joystick_x; // constrain leftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = хязгаарлах (rightThrottle, -100, 100);

JavaScript -ийн жишээ:

var leftChannel = joystick_y + joystick_x;

var rightChannel = joystick_y - joystick_x; // leftChannel = constrain (leftChannel, -100, 100); rightChannel = хязгаарлах (rightChannel, -100, 100); // helper functionvar constrain = function (num, min, max) {return Math.min (Math.max (num, min), max); };

Алхам 4: Аргын арга »Пропорциональ

Аргын арга »Пропорциональ
Аргын арга »Пропорциональ

Хоёр ертөнцийн тэгшитгэлийг хамгийн сайнаар бүтээнэ гэж найдаж байна. Энд байгаа санаа бол бүх чиглэлд диагоналиар ч гэсэн пропорциональ байх явдал юм, гэхдээ та илүү хол зайд явж байгаа боловч босоо чиглэлд хөдөлж буй зайтай ижил зайтай байна.

Миний жишээн дээр та бүх чиглэлд -200 -аас +200 хүртэлх масштабтай болно. Би үүнийг ± 100 болгож харуулсан, учир нь энэ нь суваг тус бүрийн хүч чадлын эзлэх хувийг илэрхийлдэг боловч та үүнийг ашиглаж байгаа бүх зүйлтэйгээ харьцуулахыг хүсэх болно. таны мотор хянагчийн хайрцаг. Жишээлбэл, хэрэв та PWM дохио илгээж байгаа бол үүнийг 1000-2000 хүртэл, эсвэл аналог дохио илгээж байгаа бол үүнийг 0-255 болгож, чиглэлийг логик гэх мэтээр тохируулж болно.

Arduino -ийн жишээ:

int leftThrottle = joystick_y + joystick_x;

int rightThrottle = joystick_y - joystick_x; // зарим тохиолдолд хамгийн ихдээ 100, зарим тохиолдолд 200 байна // ялгааг харгалзан үзээд хамгийн их утга нь үргэлж 200int diff = abs (abs (joystick_y) - abs (joystick_x)); leftThrottle = leftThrottle <0? leftThrottle - ялгаатай: leftThrottle + diff; rightThrottle = rightTrottle <0? rightThrottle - ялгаатай: rightThrottle + diff; // Газрын зураг нь ± 200 -аас ± 100 хүртэл эсвэл өөр өөр мужид зүү оруулдагThrottle = газрын зураг (зүүнХоол, 0, 200, -100, 100); // constrainleftThrottle = хязгаарлах (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100);

JavaScript -ийн жишээ:

var leftThrottle = joystick_y + joystick_x; var rightThrottle = joystick_y - joystick_x; // зарим тохиолдолд хамгийн ихдээ 100, зарим тохиолдолд 200, // ялгааг харгалзан үзье, ингэснээр хамгийн их утга нь үргэлж 200var байх ёстой = Math.abs (Math.abs (joystick_y) - Math.abs (joystick_x)); leftThrottle = leftTrothtle <0? leftThrottle - ялгаатай: leftThrottle + diff; rightThrottle = rightTrottle <0? rightThrottle -ялгаа: rightThrottle + diff; -100, 100); // зүүн хязгаарыг хязгаарлах хамгийн их (тоо, мин), хамгийн их); }; var map = функц (num, inMin, inMax, outMin, outMax) {var p, inSpan, outSpan, газрын зураг; inMin = inMin + inMax; num = num + inMax; inMax = inMax + inMax; inSpan = Math.abs (inMax-inMin); p = (num/inSpan)*100; outMin = outMin + outMax; outMax = outMax + outMax; outSpan = Math.abs (outMax - outMin); газрын зураг = outSpan*(p/100) - (outMax/2); буцаах зураг;};

Зөвлөмж болгож буй: