Robotunuzu Blender’da Canlandırın


Servolarla dolu bir robot yaptınız ve şimdi yeni dans eden animatronik ayınızı programlayarak eğlenceli kısma geçiyorsunuz! Hayatındaki acı daha yeni başlıyor. Dans eden ayının kolunu kaldırması gerektiğine karar verdiğinizi hayal edin. Sadece bir servo konumu ayarlarsanız, motor olabildiğince hızlı döner. İhtiyacınız olan şey bir animasyon ve tercihen yumuşak bir ivme ile.

Sen abilir tüm matematiği kendiniz çalışın. Rakamlarla yarım saat uğraştıktan sonra ayı, kolunu tek kollu bir zombi gibi zarif bir şekilde kaldırıyor. Sonra ayının 34 servosu daha olduğunu fark ediyorsunuz.

kaide, taban, üst kol ve alt kol ve IK top ile endüstriyel robot tipi kol render

Neyse ki yukarıdakileri yapan herkes için Blender var. Her şey animasyonlar ve bilgisayar grafikleri için yumuşak hareket yaratmakla ilgilidir. Blender ile robot hareketi yapmak kolay olmasa da en azından tolere edilebilir. Biz yaptık örnek proje, 3 eksenli robot kol göstermek için. Hareketsiz bir kaide, döner taban, üst kol ve alt kola sahiptir. Önce Blender’da canlandıracağız ve ardından dosyayı küçük bir komut dosyasıyla servoları sürmek için kullanabileceğimiz bir şeye çevireceğiz.

Şimdi, Blender zor bir kullanıcı arayüzü ile ünlüdür. İyi haber şu ki, 2.9 revizyonu ile bir çok daha normal arayüz. Hala kesinlikle dır-dir 23 farklı düzenleyici ve kelimenin tam anlamıyla binlerce kontrol içeren büyük bir program, ancak robotumuzu hareket ettirmek için yalnızca küçük bir alt küme kullanacağız. Size Blender’ı burada öğretmeyeceğiz çünkü internette binlerce harika Blender öğreticisi var. Animasyona odaklanmak istiyorsunuz ve İnsancıl Arma serisi özellikle tavsiye edilir.

Bir robotu canlandırmanın ana adımları şunlardır:

  1. Robotunuza uygun bir ‘iskelet’ (armatür) yapın
  2. Armatürü robotunuz gibi hareket edecek ve canlandırmaya uygun olacak şekilde donatın
  3. Armatürü canlandırın
  4. Servo konumlarını robot kontrol programınıza aktarın
4 kemik armatür.  Kemikler, baş ve kuyrukta top bulunan oktahedronlardır.
Robot Armatür

Genellikle bilgisayar animasyonları bir armatürden ve ardından ona asılı gövde için ağdan oluşur. Bir robot için ağa ihtiyacımız yok, sadece armatüre ihtiyacımız var çünkü bir film yapmıyoruz. Yine de armatür yapmak donanım boyutuna uyması gerekir. CAD dosyalarını içe aktarın veya bir fotoğrafın üzerine inşa edin ya da sadece robotu ölçün.

robotun dinlenme pozu eksenler sıfırdayken robotun bulunduğu eklemlerin referans konumudur. Bizimki kolu yukarı doğru işaret ediyor.

düz yukarı dönük robot
Dinlenme Duruşu

Kemikler etrafında dönüyor kuyrukve kafa ‘oldukları yer’dir. Kaval kemiğinizin kuyruğu dizinizdir ve kaval kemiğinizin başı ayak bileğinizdir. Kemikler olabilir ebeveynler. Kaval kemiğiniz, uyluk kemiğinizin çocuğudur. Uyluk kemiğinizi (uyluk kemiği) hareket ettirirseniz, kaval kemiğiniz de onunla birlikte hareket eder.

Kemikler sadece belirli eksenlerde döner. Dizler sadece ileri geri sallanır, yan yana değil. Bileğinizi bükebilirsiniz, ancak tırnaklarınızı değil. Ayrıca hareket limitleri vardır. Muhtemelen dizlerinizi geriye doğru bükemezsiniz.

Menteşe bağlantıları yalnızca döner, ancak bazı kemikler ölçeklenebilir (yumuşak bir robot) veya ötelenebilir (bir CNC yönlendirici).

daha da karmaşıkları var kısıtlamalar. Bir binek otomobilin ön tekerlekleri birlikte hareket eder. Buharlı lokomotifin çubukları pimlerinde kalır. Köpek, tasmasının sınırına kadar serbestçe hareket edebilir.

Animatör, kemiği konumlandırarak poz vermek istemeyebilir. Bir karakterin gözlerini açılarını ayarlayarak canlandırmak garip olurdu. Karakterin her zaman baktığı ekstra bir hedef kemiğine sahip olmak ve gözleri hedefe bakmak için kısıtlamak çok daha iyi. Genellikle parmaklarımızı bir kerede kıvırırız ve bir parmaktaki tüm eklemleri aynı anda kıvırırız. Peki her şeyi aynı anda kontrol eden ekstra bir kemiğe ne dersiniz?

Tüm bu ekstra kontrol kemiklerine ve kısıtlamalara sahip bir armatür, bir armatür olarak adlandırılır. teçhizat. Blender, bunun gibi teçhizatlar inşa etmek için güçlü araçlara sahiptir.

Örneğimizin ilk kemiği, kaide, robotun kaidesini, zemine cıvatalı kısmı temsil eder. kemikler mümkün – mesele bu, onları canlandırabilirsiniz. Ancak bu kemik asla hareket etmiyor, bu yüzden her şeyi kilitledik – konumu, dönüşü ve ölçeği.

Tüm eksenleri gösteren ancak Y dönüşü kilitli olan Blender arayüzü n anahtar özellikleri

Taban, kaide üzerinde döner, bu nedenle temel kemik bir çocuktur kaide kemik. temel‘in başı, üst kol için pivot konumundadır. Taban üzerinde döner temel kemiğin Y ekseni. Bu sadece hareket, bu yüzden diğer tüm eksenleri kilitledik.

Diğer kemikler hemen hemen aynı. üst kol bir çocuğu temel, başı dirsekte. alt kol dirsekten bileğe kadar uzanır. Bu eklemler yerel Z boyunca dönecek şekilde yönlendirilmiştir.

Armatür şimdi çalışıyor. (poz modu) seçin. temel ve çevirin (Y dönüşü) ve kol kemikleri de döner. Pozisyon denemesini bozarsanız, kilidi açılmış eksenleri geri alın veya sıfıra ayarlayın.

Örnek robotumuz, robotun hareket ettiğini görebilmeniz için kemiklerle birlikte hareket eden basit bir ağa sahiptir.

Ancak robotu donanımın yapamayacağı pozisyonlara yerleştirmek hala mümkün. Örnek donanım robot tabanımızın merkezin her iki yanında yalnızca 90 derece dönebildiğini varsayalım. ile animatörün imkansız hareketler yapmasını engelleyebiliriz. kemik kısıtlamaları. bir ekledik döndürme kısıtlamasını sınırla her kemiğe.

Etkileşim

Bu harika, ama şimdi robot ayımızın bir hediye almasını istiyoruz. Robot dış dünya ile nasıl etkileşime girecek? Çözüm şudur ters kinematik (IK). IK, omuz ve dirsek eklemlerinin nerede olduğunu değil, bileği nerede istediğimizi söylememize izin verir. Böylece sahneye IK adlı bir top ekledik ve topa ulaşmaya çalışmak için alt kola bir IK kısıtlaması ekledik.

Takip ediyorsanız, örnek zaman çizelgesini kare 120’ye taşıyın, böylece IK açık olur ve animasyonlarımızı bozmazsınız.

Robot bileği şimdi IK topunu ‘yalıyor’. Nesne modunda, topu seçin ve (g tuşu) ‘yakalamak’ için. Topu hareket ettirmek için sürükleyin. Robot düzgünce takip eder ve eklemler kendilerini gerekeni yapmaya hazırlar. Çok daha uygun.

IK kısıtlamasında dolaşmak istiyorsanız, evi alt kol. Poz modunda, sağdaki nesne özellikleri düzenleyicisinde alt kol ve kemik kısıtlamaları sekmesini seçin. IK kısıtlaması burada yaşıyor.

Harika bir Blender parçası, neredeyse her şeyin canlandırılabilmesidir. Çoğu değerin sağ tarafında küçük beyaz bir nokta bulunur. Tıklamak onu bir elmasa çevirir ve değeri canlandırır. Bunu kısıtlamanın ‘gücü’ olan “Etki” için yaptık.

Animasyon Zamanı

Artık canlandırmaya hazırız. Çoğu robot için 10 FPS iyidir – bunu Render Properties’de ayarlayın. Tüm animasyonları birbiri ardına zaman çizelgesine koyuyoruz ve istediğimiz dilimi alıyoruz, bu yüzden belki ‘ayı kıkırdaması’ kare 50’den 70’e.

IK topunun hareketini gösteren blender eğrileri düzenleyicisi
IK top hareketi. Siyah noktalar ana karelerdir.

Geriye sayı yazarak ayı kolunu hareket ettirirken her kareyi yapmak zorundaydık. Neyse ki şimdi gerekli değil. İstediğimiz davranışı elde etmek için robotu yalnızca yeterli çerçeve üzerinde pozlamamız gerekiyor. Bunlar ana kareler. Blender aradaki kareleri yapar.

Varsayılan olarak Blender, giriş ve çıkış kolaylığı ekler, böylece servolar sorunsuz bir şekilde hızlanır. Eğrileri görmek istiyorsanız IK topunu seçebilir ve ‘Grafik Düzenleyici’yi kontrol edebilirsiniz.

arada fark var poz vermek ve ana kare yapmak. poz robot animasyonu değiştirmez. sadece ana kare yapmak (ben anahtarı) bu animasyonu değiştirir.

50’den 75’e kadar olan karelerde robot bir şeyi alır ve hareket ettirir. Animasyon yapmanın dört kez sadece ‘topu hareket ettir, ana kare yap’ olduğuna dikkat edin. Tüm animasyonu yapmak iki dakikadan az sürdü. Gerçek robotu asla canlandırmadık – ters kinematik bizim için onunla ilgilendi.

90’dan 105’e kadar robot, üzerine bir şey koyarken yakındaki bir masadan kaçınır. Pratikte bunları gerçek robotta çalıştırmamız ve yarım düzine kez ince ayar yapmamız gerekecekti. Bunu yazılım desteği olmadan yapmak bir kabus olur.

Animasyondan Robota

Animasyonumuzu robot kontrol programımıza taşımaya hazırız. Bunun için güzel bir hile var. Bilgisayar animasyon dosyaları için fiili standart, ‘BioVision Hiyerarşik’ biçimidir (bvh). Blender bunu dışa aktarabilir, ancak eklentiyi etkinleştirmeniz ve armatürü seçmeniz gerekebilir. İşte bir örnek.

HIERARCHY
ROOT pedestal
{
        OFFSET 0.000000 0.000000 -1.000000
        CHANNELS 6 Xposition Yposition Zposition Xrotation Yrotation Zrotation
        JOINT base
        {
                OFFSET 0.000000 0.000000 1.000000
                CHANNELS 3 Xrotation Yrotation Zrotation
                JOINT upperarm
                {
                        OFFSET 0.000000 0.000000 0.500000
                        CHANNELS 3 Xrotation Yrotation Zrotation
                        JOINT lowerarm
                        {
                                OFFSET 0.000000 0.000000 3.100000
                                CHANNELS 3 Xrotation Yrotation Zrotation
                                End Site
                                {
                                        OFFSET 0.000000 0.000000 3.100000
                                }
                        }
                }
        }
}
MOTION
Frames: 251
Frame Time: 0.100000
0.000000 0.000000 -1.000000 -0.000000 0.000000 -0.000000 -0.000000 0.000000 -0.000000 -0.000000 0.000000 -0.000000 -0.000000 0.000000 -0.000000 
0.000000 0.000000 -1.000000 -0.000000 0.000000 -0.000000 -0.000000 0.000000 -0.000000 -0.000000 0.000000 -0.000000 -0.000000 0.000000 -0.000000 
0.000000 0.000000 -1.000000 -0.000000 0.000000 -0.000000 -0.000000 0.000000 -0.000000 -0.000000 0.000000 -0.000000 -0.000000 0.000000 -0.000000 
... lots of lines of this ...

Bu ayrıştırmak için hoş görünmese de, bir hack var. Üst kısım (iskelet) bizi ilgilendirmiyor. Sadece alttan hareket verilerinin çerçevelerini istiyoruz.

‘Frame Time’dan sonraki satırın satır numarasını bulun, dosyamız için 29’dur ve tail -n +29 ./robotarm.bvh | sed --expression='s/ $//g' | sed --expression='s/ /,/g' >robotarm.csv her kare için eklem açılarının bir CSV dosyasını almak için.

Bu sayılardan hangisi hangi servodur? Ve bu sayıları servoya gönderilen sayılarla nasıl eşleştiririz?

Her serbest ekseni (taban, üst kol, alt kol) sınırlarına kadar sırayla çalıştıran bir animasyon (1-6. kareler) ekledik. Hangi kanalların bu sırayla değiştiği için CSV dosyasına bakarsak, kanal 8’in taban, 10’un üst kol ve 13’ün alt kol olduğunu görürüz. Donanım üzerindeki limitlerde servo pozisyonunu biliyorsanız, birini diğerine eşleyebilirsiniz.

Gerçek sayılar derece cinsinden Blender eklem konumlarıdır, bu nedenle geriye kalan tek şey servoları her karede bir kez ayarlamaktır ve animasyonunuz gerçekte oynatılacaktır.

Animasyonları arka arkaya oynatıyorsanız, ikinci animasyonun robotun bıraktığı yerden başlaması gerektiğini unutmayın. Ve bir servo pozisyonu istediğiniz için onu alamayabileceğinizi unutmayın. Robotunuzun yavaş hareket ettiğini biliyorsanız, hızlı hareket istemek konum kontrolünü kaybeder. Blender bilmiyor.

Son olarak, ‘robot’un bir robot olması gerekmediğini belirtelim. Komut dosyası animasyonu gerektiren her şey bu şekilde ele alınabilir.

Tabii ki, akıllı bir robot asistanı yapmak için gereken tek şey bu değil. Gerçek zamanlı kontrol, anında hareketi ayarlama, hazır animasyonlar arasında yumuşak hareketler yapma, animasyonların içeri ve dışarı hareketlerini yumuşatma ve animasyonları karıştırma gibi, görme ve kavrama gibi başka görevler de vardır. Ancak Blender ve basit bir dışa aktarma rutini başlamanıza yardımcı olabilir.

Robot yapmanın eğlencesinin yarısı onlarla oynamaktır. Umarız Blender’ı incelemeniz için size ilham vermişizdir ve belki de bu süreçte bazı animatroniklere ilham vermişizdir.


Kaynak : https://hackaday.com/2022/05/11/animate-your-robot-in-blender/

Yorum yapın