Мазмуну:
Video: Санариптик 3D карта үчүн негизги 3D сканери: 5 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:38
Бул долбоордо мен 3D сканерлөөнүн жана реконструкциялоонун негизги негиздерин сүрөттөйм жана түшүндүрөм, негизинен кичинекей жарым учак объектилерин сканерлөөгө колдонулат, жана алардын иштөө алыстан башкаруу учактарына орнотулушу мүмкүн болгон сканерлөө жана реконструкциялоо системаларына жайылтылышы мүмкүн. 3D модели. учак орнотулган учактарды алуучу жерлер
Акыркы идея - санариптик карта катары колдонуу үчүн кандайдыр бир жерди же аймакты, анын сырткы же ички 3D изин алуу (Прометей тасмасындагыдай)
1 кадам:
идеясы, 3d учкан бардык аймактын виртуалдык картасын санариптештирүү үчүн, алыстан башкарылуучу учакка 3d сканерлөө тутумун орнотуу, бирок бул үчүн биз лазердик триангуляция иштей баштадык. Лазердик триангуляция жолу менен сканерлөө же 3d реконструкциясы негизинен лазердик нурду призмадан өткөрүүдөн турат, ал лазер тилкесин жаратат, ал сканерленүүчү объектке чагылдырыла турган лазер тилкесин алат жана бул лазер проекциясы алынганда беттин бети Сканерленүүчү жерден сүрөттү кандайдыр бир камера менен тартуу керек жана бул лазер тилкесинин проекциялык бурчуна карата түзүлгөн бурчту билүү керек, анткени бул сүрөттөрдүн ар бири проекттелген лазер тилкелерин тартып алат. Объекттин бетинде алар сканерленүүчү объекттин өлчөмдүк мүнөздөмөлөрүн алуу үчүн алдын ала иштетилет жана объекттин ошол туурасынан кесилген сегментинде анын бетинин профилин алуу үчүн объектти үстүнөн тилке менен сканерлеп, андан кийин тартып алышат объекттин кийинки кесилишинин проекттелген тилкеси, бардык проекттелген тилкелерди бирге кошуу үчүн Обтонун бардык кесилиштеринен мурун биз анын бетинин үч өлчөмдүү сканерин алабыз
2-кадам:
Биз өзүбүздүн максатыбызды аныктап алгандыктан, кийинки кадамды чечүү үчүн алгач бутуңарды жерге бекем кармашыңар керек экенин билүү үчүн, биз базалык системанын туура иштешин ырастоо үчүн сызыктуу 3d сканердин эксперименталдык прототиби менен жерге кирдик. 3d сканери жана жогоруда көрсөтүлгөн сүрөттө көрүнүп тургандай, мен PC, OpenCV, Glut of OpenGL, веб -камера, лазер, лазер фермасынын генераторун (бул учурда айлануучу күзгү аркылуу) электрондук линиялык жылышуу системасын (темир жол менен жасалган) колдондум жана эски принтерден алынган система), мен сканерленүүчү объекттерди, жыгачты жана пластилинди жайгаштырган базадан жана компьютерде сүрөттө көрүнүп тургандай: мен OpenGLден Glut менен үчөөнү түзүп, көрсөтө алдым. сканерленген чыныгы объекттин негизинде чыгарылган өлчөмдүү модель (бул учурда оюнчук жөргөмүш)
Ошентип, иштөө принциби функционалдуу экени жана учуучу системага тиешелүү өзгөртүүлөр жана адаптациялар менен ал учуп бара жаткан аймактын 3d картасын сканерлеп жана кайра чыгарууга жөндөмдүү экени айдан ачык.
Бирок бул система учуп бараткан жерлердин тышкы бетинин 3D карталарын алууга гана кызмат кылат ???…
3 -кадам:
Үңкүрлөрдүн жана каналдардын ичин картага түшүрүү (Prometeus тасмасындагыдай) Бул 3D сканерлөө системасы үңкүр, имараттар, туннелдер ж.б чоң жана көңдөй объекттердин интерьеринин үч өлчөмдүү моделдерин реконструкциялоого кызмат кылат. так эле баяндалган жана негизинен төмөнкүлөрдөн турат:
- сканерленүүчү бетиндеги лазер тилкесинин ар бир проекциясынын сүрөтүн тартуу
- чыпкалап, сүрөттөн түсүн алып салуу
- түстү динамикалык сүрөт босогосу менен бинаризациялоо
- ар бир лазердик проекция кесилишинин тартылган профилин таануу үчүн четки детекторду колдонуңуз
- жана сегменттөөнү колдонуу менен виртуалдык 3D картада сканерленүүчү жана реконструкциялануучу объектинин ошол кесилишинин 3d көрсөтүлүшү үчүн тиешелүү чекти тандаңыз.
- анда бул кадамдар ар бир бөлүмдө үзгүлтүксүз проектирленген лазер тилкелеринин суб-таризинде тартылган ар бир сүрөт үчүн кайталанат.
кесилиштердин катмарынын катмарлары картага түшүрүлүүчү нерсенин кесилиштеринин көптөгөн сүрөттөлүштөрүнөн пайда болгон чекит булутун алганга чейин ырааттуу түрдө кошулат
4 -кадам:
Андан кийин үстүртөн лазер тилкелеринин проекцияларын сүрөт иштетүүчү программаларды тапшырам. жана иштелип чыккан үч өлчөмдүү карта моделиндеги бул шумдуктуу кайчылаш өкүлчүлүктөрдүн виртуалдык 3d реконструкциясы:
сүрөт иштетүү:
п
#кошуу #кошуу "cv.h" #include "highgui.h" #кошуу // #кошуу #кошуу #кошуу #кошуу
char f = 0; char name = {"0.jpg"}; int n = 0, s, x, y; CvScalar sp; FILE *NuPu;
void Writepoints () {char bufferx [33], buffery [33]; itoa (x, bufferx, 10); itoa (y, buffery, 10); fprintf (NuPu, bufferx); fprintf (NuPu, "\ t"); fprintf (NuPu, buffery); fprintf (NuPu, "\ n"); }
void noteblockInit () {NuPu = fopen ("NuPu.txt", "w"); fseek (NuPu, 0, 0); fprintf (NuPu, "NP:"); fprintf (NuPu, "\ n"); }
int main () {char argstr [128]; noteblockInit (); cout << "Teklea!…:" f; аты [0] = f; cout <
IplImage* img0 = cvLoadImage ("00.jpg", 0); if (f == '0') {for (y = 1; yheight-2; y ++) {for (x = 1; xwidth-2; x ++) {sp = cvGet2D (img0, y, x); if (sp.val [0]> 50) {Writepoints (); n ++;}}}} else {for (y = 1; yheight-2; y ++) {for (x = 1; xwidth-2; x ++) { sp = cvGet2D (img1, y, x); if (sp.val [0]> 50) {Writepoints (); n ++;}}}} char buffer [33]; itoa (n, буфер, 10); fprintf (NuPu, "Fin:"); fprintf (NuPu, буфер); fprintf (NuPu, "\ n"); fclose (NuPu);
cvWaitKey (0); //_execlp("calc.exe "," calc.exe ", аргстр, NULL); cvDestroyAllWindows (); cvReleaseImage (& сүрөт); cvReleaseImage (& img); cvReleaseImage (& img0); cvReleaseImage (& img1); cvReleaseImage (& img2); return 0; }
3D реконструкциясы:
#кошуу //////////////////ifdef _APPLE_ #кошуу #дагы #кошуу #кошуу #endif #кошуу #кошуу #кошуу #кошуу #кошуу #кошуу
#аныктоо violeta glColor3f (1, 0, 1) #define azul glColor3f (0, 0, 1) #define turkeza glColor3f (0, 1, 1) #define verde glColor3f (0, 1, 0) #define amarillo glColor3f (1, 1, 0) #define naranja glColor3f (1,.3, 0) #define rojo glColor3f (1, 0, 0) ат мейкиндигин колдонуу std; int s, Boton = 1, Pulbut = 1; float mx = 0, my = 0, mtx = 0, mty = 0, mtz = -5.0; const int Avance = 1; сап линиясы, Aux; char Caracter = 'H'; FILE *NuPu; int NP, h, w; float G = 0, n = 0, cx [5000], cy [5000], x, y, ax, ay, az; int font = (int) GLUT_BITMAP_8_BY_13; статикалык char энбелгиси [100]; char буфер [3]; GLfloat anguloCuboX = 0.0f; GLfloat anguloCuboY = 0.0f; GLfloat anguloEsfera = 0.0f; GLint анчо = 500; GLint alto = 500; int hazPerspectiva = 0; боштукту өзгөртүү (int туурасы, int бийиктиги) {glViewport (0, 0, туурасы, бийиктиги); glMatrixMode (GL_PROJECTION); glLoadIdentity (); if (hazPerspectiva) gluPerspective (23.0f, (GLfloat) туурасы/(GLfloat) бийиктиги, 1.0f, 20.0f); else glOrtho (-1, 1, -1, 1, -10, 10); glMatrixMode (GL_MODELVIEW); анчо = туурасы; alto = бийиктик; } void Kolorear (int K) {float Hip; x = (cx [s] -320)/480; y = (cy [s] -240)/640; Hip = sqrt (pow (x, 2)+pow (y, 2)); if ((Hip> = 0) && (Hip =.07) && (Hip =.14) && (Hip =.21) && (Hip =.28) && (Hip =.35) && (Hip =.42) && (Hip <=. 49)) {violeta;}} drawNuPu (void) {glColor3f (1, 1, 1); glBegin (GL_LINES); glVertex3f (.2, 0, 0); glVertex3f (-. 2, 0, 0); glVertex3f (0,.2, 0); glVertex3f (0, -.2, 0); glEnd (); rojo; glBegin (GL_POINTS); for (n = 0; n <10; n ++) {for (s = 0; s void setOrthographicProjection () {glMatrixMode (GL_PROJECTION); glPushMatrix (); glLoadIdentity (); gluOrtho2D (0, w, 0, h); glScalef (1, -1, 1); glTranslatef (0, -h, 0); glMatrixMode (GL_MODELVIEW);} void renderBitmapString (float x, float y, void *font, char *string) {char *c; glRasterPos2f (x, y); (c = string; *c! = '\ 0'; c ++) {glutBitmapCharacter (шрифт, *c);}} void display () {// mx = 468; itoa (mx, buffer, 10)); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // glLoadIdentity (); glColor3f (1.0, 1.0, 1.0); glRasterPos2f (-1,.9); // glutBitmapString (GL_T_TM) "GL_T_24"; s <3; s ++) {glutBitmapCharacter (GLUT_BITMAP_TIMES_ROMAN_24, буфер [s]);} glTranslatef (mty, -mtx, mtz); glRotatef (mx, 1.0f, 0.0f, 0.0f); glRotatef (менин, 0.0f, 1.0F, 0.0f); drawNuPu (); /*glColor3f (1.0, 1.0, 1.0); glRasterPos2f (.5,.5); // glutBitmapString (GLUT_BITMAP_TIMES_ROMAN_24, "Hello Text"); glutBitmapCARIT 'GLUT_);* / /*glColor3f (1. 0f, 1.0f, 1.0f); setOrthographicProjection (); glPushMatrix (); glLoadIdentity (); renderBitmapString (30, 15, (void *) шрифти, "GLUT үйрөткүчү ---_ ------ _@ 3D Tech"); */ glFlush (); glutSwapBuffers (); anguloCuboX+= 0.1f; anguloCuboY+= 0.1f; anguloEsfera+= 0.2f; } void init () {glClearColor (0, 0, 0, 0); glEnable (GL_DEPTH_TEST); анчо = 500; alto = 500; } void leer () {ifstream myfile ("A:/Respaldo sept 2016/D/Respaldos/Respaldo compu CICATA abril 2015/usb1/rekostruccion 3D en Especialidad CICATA/Software/Reconstruccion 3D/R3d_0 / bin/Debug/NuPu.txt"); if (myfile.is_open ()) {s = 0; while (getline (myfile, line)) {if ((line [0]! = 'N') && (line [0]! = 'F')) {Aux = line; сап [0] = 48; сап [1] = 48; сап [2] = 48; сап [3] = 48; cy [s] = atoi (line.c_str ()); Aux [4] = 48; Aux [5] = 48; Aux [6] = 48; // Жардамчы [7] = 48; cx [s] = atoi (Aux.c_str ()); s ++; }} myfile.close (); } else cout <1780) NP = 1700; cout <void idle () {display (); } жараксыз клавиатура (белгисиз char key, int x, int y) {switch (key) {case 'p': case 'P': hazPerspectiva = 1; кайра түзүү (анчо, альт); тыныгуу; case 'o': case 'O': hazPerspectiva = 0; кайра түзүү (анчо, альт); тыныгуу; case 27: // exit exit (0); тыныгуу; }} void raton (int button, int state, int x, int y) { / * GLUT_LEFT_BUTTON 0 GLUT_MIDDLE_BUTTON 1 GLUT_RIGHT_BUTTON 2 GLUT_DOWN 0 GLUT_UP 1 * / Boton = баскычы; Pulbut = мамлекет; // mx = y; дисплей (); } void ratmov (int x, int y) {if ((Boton == 0) & (Pulbut == 0)) {mx = y; my = x; } if ((Boton == 2) & (Pulbut == 0)) {mtx = (y/200) -1; mty = (x/200) -1; } if ((Boton == 1) & (Pulbut == 0)) {mtz =-(y/40) -5; } display (); } int main (int argc, char ** argv) { /*glutAddMenuEntry () glutAddSubMenu () glutAttachMenu () glutCreateMenu () glutSetMenu () glutStrokeCharacter () glutStrokeLength ()* / /*glReadPixels кадр буфери glGetPixelMapfv () көрсөтүлгөн пикселдик картаны кайтаруу glGetPixelMapuiv () көрсөтүлгөн пикселдик картаны кайтаруу glGetPointerv () Көрсөткүчтүн дарегин кайтарат.*/ Init (); leer (); glutInit (& argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); glutInitWindowPosition (50, 50); glutInitWindowSize (анчо, альт); glutCreateWindow ("Кубо 1"); ичинде(); glutDisplayFunc (дисплей); glutReshapeFunc (кайра түзүү); glutIdleFunc (бош); glutMouseFunc (raton); glutMotionFunc (ratmov); glutKeyboardFunc (клавиатура); glutMainLoop (); return 0; }
5 -кадам:
азырынча мен токтотушум керек! … бирок кийинки бөлүмдө мен аны малина pi 3 же jetson наноборумда, алыстан башкарылуучу учакта же үңкүрдүн ичин сканерлөө үчүн жөргөмүш роботто ишке ашырам деп убада берем.
Сунушталууда:
Соода карталары үчүн карт сканери: 13 кадам (сүрөттөр менен)
Соода карта машинасы үчүн карт сканери: Соода картасы машинасы үчүн карт сканери Өзгөртүүлөр журналын акыркы кадамда тапса болот. Негизги маалымат Мен долбоордун негизги мотивациясын Card Feeder Introдо түшүндүрдүм. Кыскача айтканда, мен жана балдарым көп соода карталарын чогултуп алдык
6 жашта Arduino үчүн Scratch менен негизги светофор түзүү: 3 кадам
6 жашта Arduino үчүн Scratch менен негизги светофор түзүү: Уулум менин Arduino долбоорлорума кызыгып жүргөн. Ал Snap Circuits менен бир аз ойноп, LEGO дагы кээ бир Scratch долбоорлорун кура баштады.Ардуино үчүн Scratch менен ойноо биз үчүн бир аз убакыт болду. Бул биздин биринчи долбоор. Об
БИЛДИРҮҮ ҮЧҮН ЖАСАЛМА ИНТЕЛЛЕКТИ МАРКУП ТИЛИ (АИМЛ) боюнча НЕГИЗГИ ТУРТИОН: 8 кадам
БИЛДИРМЕ МЕНЕН ЖАСАЛМА ИНТЕЛЛИГТТИ БЕРҮҮ ТИЛИ (AIML) боюнча НЕГИЗГИ ТҮРЛӨР: Жасалма интеллектти белгилөө тили (AIML) - бул программалоо тили, ал чатбот, вербот, пандоработ, супербот жана башка робот тарабынан колдонулат. Бул доктор Ричард Уоллес тарабынан иштелип чыккан жана â € ¦
Жаңы баштагандар үчүн 10 негизги Arduino долбоору! Эң аз дегенде 15 долбоорду бир такта менен жасаңыз !: 6 кадам
Жаңы баштагандар үчүн 10 негизги Arduino долбоору! Эң аз дегенде 15 долбоорду бир такта менен жасаңыз !: Arduino Project & Окутуу кеңеши; 10 негизги Arduino долбоорун камтыйт. Бардык баштапкы коддор, Gerber файлы жана башкалар. SMD жок! Баары үчүн оңой ширетүү. Оңой алынуучу жана алмаштырылуучу компоненттер. Сиз эң аз дегенде 15 проект жасай аласыз
НЕГИЗГИ ДАНГЛЕР +/- Өзүн өзү баалоо үчүн күзгү (кантип жасоо керек): 5 кадам
НЕГИЗГИ ДАНГЛЕР +/- Өзүн өзү баалоо үчүн күзгү (Кантип жасоо керек): Өз ачкычыңызды көп же аз ачкычка ээ кылыңыз. Аны кооздоп, функционалдуу кылыңыз. Жасоо абдан арзан, абдан жагымдуу натыйжалар