Skocz do zawartości

Headcrab


Pomocna odpowiedź

jestem tego świadomy. jestem jednak niecierpliwy i chcę się uczyć języka naraz z robieniem projektu, jak widać na moją własną szkodę. co do tej zmiennej, naprawiłem to zmieniając jej zasięg, ale to było coś takiego

image.png.e8cf1954dbe51de20cc2d305f81d9ec8.pngimage.thumb.png.79c85bc8d174d5d31ae88ec79bc78b2f.png

także przygody z kodem są ciekawe i nie można narzekać na monotonność jak przy javie.

Link do komentarza
Share on other sites

z pointerem nie robiłem nic innego, a wina była taka że chciałem podać pointer jako argument funkcji (żeby zrobić jedną uniwersalną) no i nie wyszło to zrobiłem na sztywno bufor i wskaźnik pod uart1 i działą.

Link do komentarza
Share on other sites

Może trzeba było użyć wskaźnika? Np. takie coś:
 

void funkcja (char **pointer)
{
   wypisz_znak(**pointer);
   (*pointer)++;
}

Wybacz - ale operacje na wskaźnikach to nie tyle nauka języka, co abecadła.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

a to ja nie wiedziałem że można operować na wskaźniku wskaźnika, sprytne

to ja sobie kontynuuje zabawe z przerwaniami, i wieczorem znowu dam znać jak mi poszło

Link do komentarza
Share on other sites

Udało mi się pomyślnie odpalić watchdoga i przejść na przerwania, więc serial będzie działał nawet kiedy jedyny kod w pętli głównej to perfidny blink z delayem:

image.png.a9f668aa0ce7dcf1d67fc25a1a825c24.png

Kontynuuję pisanie kodu pod DFPlayera, mam nadzieję że jutro już skończę ten etap i przejdę do kolejnego modułu, prawdopodobnie  pca9685 i jakieś lepsze sprzężenie z komputerem. Chciałbym wykorzystać dane z oryginalnych animacji w grze (np. bezczynne poruszanie się, "sumo", czy podskok), chociaż za source sdk się nie brałem i nie mam kompletnego pojęcia z czym to się je. Najwyżej samemu je jakoś przepiszę, choć będzie to wyglądało dość sztywno. Zobaczymy. Przed snem jeszcze sobie poczytam dokładniej jak działa uart w stmie, bo chciałbym zobaczyć co się kryje za halem.

Link do komentarza
Share on other sites

moduł dfplayera ogarnąłem tak jak chciałem, więc idziemy zgodnie z planem. wszystko jest w osobnym pliku i przynajmniej mogłem się pobawić typem wyliczeniowym:

image.thumb.png.4723af4bd453be0c4a89bd4b1d9fdda2.png

o czym wcześniej nie wiedziałem, heh. odbieranie danych z modułu też jest, wszystkie typy błędów itd. łącznie z komunikatem wyjęcia/włożenia karty pamięci.

teraz w ramach małej odskoczni przekonwertowałem model headcraba z oryginalnej gry, łącznie z animacjami, do blendera, z nadzieją że uda mi się te animacje wykorzystać.

  • Lubię! 1
Link do komentarza
Share on other sites

Dwa kroki do przodu, jeden do tyłu. Udało się odpalić pca, udało się wysterować serwa, ba, udało się nawet animację z gry odtworzyć. Wszystko fajnie, tylko którymś razem jedno serwo tak weszło w rezonans (o czym zaraz) że przy okazji uszkodziło dwa inne serwa, i to te w korpusie (ale mi sie nie chce tego robierać), więc zamówiłem już MG90 żeby je wymienić. I to takie lepsze, bo od turnigy, przynajmniej w teorii. Ale po kolei:

Do PCA jest świetna dokumentacja, moduł się obsługuje dość łatwo po I2C z HALem. Udało się układ okiełznać szybko, no troszkę z pomocą kodu biblioteki od adafruit. Serwo jest sterowane sygnałem PWM (przynajmniej tak mówi większość źródeł; niektóre mówią, że to PPM, pulse position modulation) - u mnie działa z PWM, 50Hz, każde serwo też ma zdefiniowane swoje własne offsety żeby można było podać tylko i wyłącznie kąt.

Dość poważnym problemem u mnie jednak jest zjawisko tzw. huntingu, czyli serwo "poluje" lub "szuka" zadanego kątu, nigdy nie osiągając go. A dzieje się tak, że jak noga ma się cała obrócić o kilkanaście stopni, to ta cała masa której została nadana energia kinetyczna powoduje że serwo ominęło zadany kąt. Noga wraca, znowu ma energię, znowu omija kąt, no to próbujemy jeszcze raz. No i tak się mi robi rezonans. Najlepiej uważam byłoby skalibrować każde serwo pod swoje zadanie, dać regulator pid, aaaale co ja mogę zrobić z najtańszymi sg90? pomysłów mam kilka, albo wywalić elektronike i samemu dać mostki H (najlepiej), dać serwa lepszej jakości (to się dowiemy pojutrze czy zadziała), google jeszcze sugeruje dać gumowe podkładki, żeby zwiększyć tarcie. Zobaczymy jak to wyjdzie. A i w ogóle chciałbym zrobić swoje własne serwo na silniku bezszczotkowym, tylko nie mam narzędzi by takie wykonać. 

Jeżeli chodzi o odtwarzanie animacji: udało mi się to zrobić, o dziwo trochę łatwiej niż się spodziewałem. I mogę to zrobić nawet na dwa sposoby. A zatem: same zasoby w grze możemy znaleźć otwierając odpowiedni plik .vtf. Stamtąd wygrzebałem wszystkie pliki związane z headcrabem + materiały:

image.thumb.png.b645f8b6b6deac4d2a97c4443dd76f09.png

Następnie wygooglowałem że do plików .mdl zawierających model jak pamiętam służy program Crowbar. Po skonfigurowaniu go pod grę HL2: Update, udało mi się pliki otworzyć:

image.thumb.png.92bd500e97ca58304b77d1bf4514b2a7.png

Jednak te pliki to są skompilowane i do wykorzystania w grze, a ja potrzebowałem plików źródłowych. Na szczęście Crowbar pozwala na dekompilacje plików, co zrobiłem, uzyskując te oto pliki (+ z niektórych ręcznie wyciągnąłem tekstury):

image.thumb.png.7316b1bc6ef861d242e6d6a22ca03322.png

Otwieram folder anims, a tam mnóstwo plików .smd. No to otwieram jeden z nich, z animacją bezczynności (idle), a tutaj takie ładne..

// Created by Crowbar 0.71
version 1
nodes
  0 "HCblack.body" -1
  1 "HCblack.torso" 0
  2 "HCblack.teeth" 1
  3 "HCblack.clavical_bone_L" 1
  4 "HCblack.arm_bone1_L" 3
  5 "HCblack.arm_bone2_L" 4
  6 "HCblack.clavical_bone_R" 1
  7 "HCblack.arm_bone1_R" 6
  8 "HCblack.arm_bone2_R" 7
  9 "HCblack.teeth_bone0_L" 1
  10 "HCblack.teeth_bone1_L" 9
  11 "HCblack.teeth_bone2_L" 10
  12 "HCblack.teeth_bone0_R" 1
  13 "HCblack.teeth_bone2_R" 12
  14 "HCblack.deform_Front" 0
  15 "HCblack.whole_L" 0
  16 "HCblack.deform_L" 0
  17 "HCblack.deform_Rear" 0
  18 "HCblack.hips" 0
  19 "HCblack.leg_bone1_L" 18
  20 "HCblack.leg_bone2_L" 19
  21 "HCblack.leg_bone1_R" 18
  22 "HCblack.leg_bone2_R" 21
  23 "HCblack.whole_R" 0
  24 "HCblack.deform_R" 0
end
skeleton
  time 0
    0 0.004785 0.012913 5.214227 1.640589 0.000000 -0.000026
    1 -0.002712 0.921547 2.543431 -0.698129 0.000000 0.000000
    2 0.078603 -2.056146 2.629477 0.628288 0.000000 0.000000
    3 4.068215 -2.249109 -0.218490 3.757556 -0.098647 0.187294
    4 3.090772 0.000000 0.000000 -1.187872 0.815473 -0.649002
    5 10.185578 0.000000 0.000000 0.000000 0.000000 2.231233
    6 -4.068215 -2.249109 -0.218490 -0.438769 -0.433174 -3.904940
    7 3.090772 0.000000 0.000000 0.878069 -0.900398 0.221031
    8 10.185578 0.000000 0.000000 0.000000 0.000000 2.114470
    9 4.473613 -1.054102 1.167997 1.571540 -0.095973 -1.568748
    10 2.843237 0.000000 0.000000 2.595958 -0.202972 -0.635700
  //itd

Wdg dokumentacji społeczności deweleporów valve, mam elegancko pokazane kości, ich połączenia, i klatki, oznaczone jako "time".  Następnie pod numer kości mamy 6 różnych liczb, są to odpowiednio położenie w XYZ, w unitach, i kąt XYZ, w radianach. Niby jak na tacy, ale kąty te nie są relatywne. Więc do każdego serwa dodałem swojego rodzaju offset, żeby było w odpowiednim miejscu. 

Takie pliki nawet mogę już wrzucić do blendera, i tutaj wykonałem surowy render animacji "idle":

Do sterowania robotem napisałem programik w Processingu i z racji tego że komendy już wcześniej zaimplementowałem, efekty uzyskałem dość szybko. Jak mówiłem, filmiku z działania nie zdążyłem nagrać, mam tylko nagrane zjawisko huntingu:

więc teraz jak nie mam co robić, przemodeluję nieco korpus (np. dodam w końcu gniazdo na wyłącznik), ogarnę czujniki położenia wbudowane w płytkę discovery.

image.png

Link do komentarza
Share on other sites

żyję :v

i robot też (!)

wziąłem sobie małą przerwę i zrobiłem jakąś konstrukcje na malince, oraz targnąłem się na forbotowy kurs fpga. zaczynam tego żałować. 
Co do robota: wymieniłem serwa, polutowałem wszystko co trzeba było (nawet elegancko konektory zacisnąłem, a co) i na jednej nodze przykleiłem tensometry do testów. zrobiłem oddzielną bibliotekę do przetworników przy okazji, no i próbuję teraz zmusić kraba do chodzenia. 

Myślę że najpierw poczytam o tym jak to zostało w innych konstrukcjach zaimplementowane, trochę się zagłębię w teorii i spróbuję coś wykminić.

Link do komentarza
Share on other sites

10 godzin temu, Leoneq napisał:

forbotowy kurs fpga

FPGA jest fajne 🙂 tylko VHDL to tragedia moim zdaniem i preferuję Veriloga, ale co kto woli...

 

Problem jest taki, że w logice synchronicznej na wejściu i wyjściu muszą być rejestry, oraz upilnowanie zegarów np. do RAM'u 😉 (polecenia muszą być wykonywane w innych cyklach zegara - model FSM)

Link do komentarza
Share on other sites

zauważyłem już, i na stronie producenta płytki (numato) są bardzo fajne kursy po angielsku. szkoda tylko, że wszędzie używają tego przestarzałego ide, które u mnie nie działa w wersji x86, zarówno jak x86-64. a na pobieranie wersji pod windowsa 10 nie mogę sobie pozwolić :c

także z tym tematem sobie odpuszczam na lepsze czasy. headcrab próbuje też swoich najlepszych sił w tańczeniu. 

hunting jest zredukowany ale dalej występuje. myślę że jest to spowodowane za dużymi luzami, spróbuję wrzucić tam jakieś gumowe o-ringi i zobaczyć czy to wytłumi te konwulsje.

 

tutaj także zauważyłem jedną rzecz, że w innych konstrukcjach ludzie się posługują jakby nie patrzeć troszkę bardziej zaawansowaną matematyką niż "ustaw serwo a na 50 stopni" - pomyślałem że i ja mógłbym tak zrobić, np. sterować punktem (końcem nogi) w sferycznym układzie współrzędnych. albo zwykłym, nie wiem jeszcze, muszę to przemyśleć. tak czy siak - na razie headcrab będzie kolejną konstrukcją z drukarki która nie robi nic więcej niż się jej każe, czyli no jeździdełko zdalnie sterowane. planuję potem wymienić stm na maline z kamerą i jakieś ai dopisać. kwestia sterowania tymi całymi serwami jest do przemyślenia.

Link do komentarza
Share on other sites

Ja bym nie zamieniał stm-a na rpi, ale pozostawił go i niech sobie gada z rpi po serialu. Stm będzie bardzo grzecznie sterować serwami, a rpi może mu podawać proste polecenia (np. idź, przysiądź, wstań itd). Mam taką rozgrzebaną konstrukcję (rpi pico i rpi zero w), pico obsługuje krokowce i serwa oraz komunikację ze sterownikiem rc, zero można w ogóle wyłączyć (na razie obsługuje kamerę i tts, w planie jest nieco więcej). Na razie się sprawdza...

Link do komentarza
Share on other sites

prawdopodobnie tak będzie, bo na stmie są czujniki, których nie ma na malinie. z kolei nie ma już miejsca na doczepienie innej maliny niż zero, trzeba będzie coś wykombinować. 

Link do komentarza
Share on other sites

przesyłanie obrazu po wifi może być troszkę powolne, jakby się zredukowało klatki i rozdzielczość to może ALE
wtedy czyni to robota uzależnionym od stacji głównej, więc w terenie sobie już nie poradzi 😕
fajnie by było zrobić własnego shielda do maliny z własnym stmem i czujkami, ale to jak już obie platformy poznam dobrze. na razie chcę zrobić tak żeby sztywno chodził po płaskim, a potem się bawić w resztę.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.