당신은 주제를 찾고 있습니까 “opengl 로봇 팔 – 그래픽스 5주차 3교시: 모델변환실습(3/4) 로봇-팔 그리기(팔-손-손가락). OpenGL“? 다음 카테고리의 웹사이트 https://you.tfvp.org 에서 귀하의 모든 질문에 답변해 드립니다: https://you.tfvp.org/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 Dr. Bean의 코딩교실 이(가) 작성한 기사에는 조회수 967회 및 좋아요 4개 개의 좋아요가 있습니다.
opengl 로봇 팔 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 그래픽스 5주차 3교시: 모델변환실습(3/4) 로봇-팔 그리기(팔-손-손가락). OpenGL – opengl 로봇 팔 주제에 대한 세부정보를 참조하세요
그래픽스 5주차 3교시: 모델변환실습(3/4) 로봇-팔 그리기(팔-손-손가락). OpenGL
opengl 로봇 팔 주제에 대한 자세한 내용은 여기를 참조하세요.
[OpenGL] 로봇 팔 만들기 – 네이버 블로그
[OpenGL] 로봇 팔 만들기 · 엄마 로봇과 두 아기 로봇을 모델링 · Base, lower arm, upper arm 이 각각 회전 · 엄마 로봇은 메뉴, 마우스, 키보드 등으로 …Source: m.blog.naver.com
Date Published: 10/15/2022
View: 5241
OpenGL – 로봇 팔 만들기
설명 로봇의 팔을 만들어서 회전하고 꺽을수 있다. 이번에도 마찬가지로 소스에 대한 설명은 주석을 참조하세요 또한 생략된 소스는 맨 앞의 글을 …
Source: yuns-helloworld.tistory.com
Date Published: 10/22/2022
View: 2254
OpenGL로 로봇 팔 그리기_191110
마우스 오른쪽 버튼을 누르면 팔이 아래로 위로 움직이고 1~5번 키를 누르면 손가락이 접었다 펴지는 코드이다. Graphics OpenGL로 로봇 팔 …
Source: se0r1-tae27.tistory.com
Date Published: 5/4/2022
View: 9591
opengl 로봇팔 – 다음블로그
opengl 로봇팔. 립. 2017. 10. 13. 21:26 댓글수0 공감수0. #include
Source: blog.daum.net
Date Published: 3/28/2022
View: 7163
사용을위한 고품질 opengl 로봇 팔 협력 업체-상품 ID – 알리바바
제품 및 공급 업체 정보 : 쇼핑. 공장에서 자동화와 효율성이 필요한 경우 Alibaba.com의 opengl 로봇 팔 협력 업체. 하나를 사용하여 손으로하지 않고 부품 및 기타 …
Source: korean.alibaba.com
Date Published: 6/4/2022
View: 4651
3D Printer 로봇팔 제작 – 7
로봇팔 제작 프로젝트 7번째 포스팅!!! … 이번 포스팅은 SW 에서 로봇 동작을 시뮬레이션하고, 실제로 로봇이 실제 위치 … OpenGL : 그래픽 표현.
Source: sjwd.tistory.com
Date Published: 6/17/2021
View: 8865
주제와 관련된 이미지 opengl 로봇 팔
주제와 관련된 더 많은 사진을 참조하십시오 그래픽스 5주차 3교시: 모델변환실습(3/4) 로봇-팔 그리기(팔-손-손가락). OpenGL. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
주제에 대한 기사 평가 opengl 로봇 팔
- Author: Dr. Bean의 코딩교실
- Views: 조회수 967회
- Likes: 좋아요 4개
- Date Published: 2020. 9. 28.
- Video Url link: https://www.youtube.com/watch?v=2SwC46U4-lQ
[OpenGL] 로봇 팔 만들기
REPORT
과제 번호 : #5
로봇 팔 만들기
추가 구현 사항
원상태로 돌아가는 애니메이션(시간차 동작), 마우스 클릭UI, 불가능한 각도를 벗어나지 않도록구현(90도 까지만 회전)
1. 소개
Robot Arm 기본 구현 사항: 엄마 로봇과 두 아기 로봇을 모델링 Base, lower arm, upper arm 이 각각 회전 엄마 로봇은 메뉴, 마우스, 키보드 등으로 콘트롤함. 엄마 로봇의 동작을 저장 후 아기로봇이 저장된 동작을 실행함. 세부 사항은 자유 각 실습시간 마다 단계적으로 구현 추가 기능 및 정교한 모델링에 대하여 추가 점수 부여
Base(Cylinder) 그리기
// 전역변수: 맨처음
GLUquadricObj *p; /* pointer to quadric object */
…
// Initialization: main 함수
p=gluNewQuadric(); /* allocate quadric object */
gluQuadricDrawStyle(p, GLU_LINE); /* render it as wireframe */
…
// Modeling: display 함수
gluCylinder(p, BASE_RADIUS, BASE_RADIUS, BASE_HEIGHT, 10, 5);
…
void gluCylinder( GLUquadric* quad, 곡면 객체
GLdouble base, 아랫면 지름
GLdouble top, 윗면 지름
GLdouble height, 높이
GLint slices, 쪽수
GLint stacks); 판수
위치 는 밑면에 원점이 있고 y 축 방향으로 서 있음.
와이어 프레임과 솔리드 렌더링
Wireframe, Solid Rendering 와이어 프레임: 드로잉 속도가 빠름 모델링할 때는 와이어프레임을 사용하고
가끔씩 솔리드 렌더링으로 외형 확인
void glPolygonMode(Glenum face, GLenum mode); Select polygon rasterization mode face: GL_FRONT, GL_BACK, GL_FRONT_AND_BACK mode: GL_POINT, GL_LINE, GL_FILL 예) glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
Modeling
원점 좌표 Base 회전각에 따라 좌표계 설정 Base 그리기 Lower arm 을 그리기 위해 좌표계 설정
(Base 윗면으로 이동, Lower arm 회전각으로 회전…) Lower arm 그리기 Upper arm 을 그리기 위해 좌표계 설정 Upper arm 그리기
* Stack op. 을 적절히 사용할 것.
2. 본문
각각의 matrix 모드(행렬 모드)에 대해서 matrices 스택(행렬 스택)이 존재한다. GL_MODELVIEW 모드에서는 스택의 깊이는 최소한 32이고, 다른 두개의 모드인 GL_PROJECTION 과 GL_TEXTURE 에서는 깊이는 최소한 2이다. 어떠한 모드에서의 최근의 matrix(행렬)은 그 모드에 관한 스택의 가장 위에 있는 행렬이다. glPushMatrix 함수는 현재의 행렬 스택을 하나 밑으로 밀어넣고, 최근의 행렬을 복제한다. 즉, glPushMatrix 함수를 호출하고 나면, 스택의 가장 위에 있는 행렬은 그것의 하나 아래에 있는 행렬과 같아진다. glPopMatrix 함수는 최근의 행렬을 스택의 하나 바로아래에 있는 행렬로 바꾸면서 행렬을 꺼낸다. 처음에 각각의 스택은 하나의 행렬인 identity matrix 를 포함한다.(대각선 성분이 1인 단위행렬을 말함.)
그려진 도형들이 순서에 맞게 겹쳐지지 않고 그려져야 하기 때문에 정해진 크기로 생성할 glScalef 함수와 위치를 지정할 glTranslatef 함수를 이용하여 위치에 맞게 그려줘야 한다.
실제로 gluCylinder를 통하여 도형을 그리면 원했던 모양과 다르게 보여 진다. 이를 원했던 모양으로 나타내기 위해 glRotatef를 이용하여 x 축으로 90도 만큼 회전 시켜 주면 원했던 모양으로 보여 진다. 다음으로 glutWireCube를 로 그리고 정해진 값으로 glScalef를 사용해 크기를 조절 해주고 glTranslatef함수를 사용하여 해당 위치에 맞게 조정하여 그려준다
추가 구현 기능에 대한 설명
①마우스클릭 후 드래그시 전체 물체를 rotate 함수를 이용하여 이동할 수 있게된다. 이것은 DisplayFunc 에 구현하였으며 X축과 Y축 두개의 변수를 이용하여 두개의 rotate 함수를 사용하였다.
②마우스 오른쪽 버튼을 누르고 있으면 원래 로봇의 처음 동작으로 가게된다. 이것은 애니메이션으로 구현하였으며 다시 돌아가는 동작이 세세하게 보이게 된다. 구현방법은 각도를 검사하여 각도가 0이 아닐시, 각도를 0으로 맞춰주기만 하면 된다.
③중심축을 조금 화려하게 꾸며보려고 실린더 안에 구를 넣어두었다. 이 구는 반지름이 0.4 이며 실린더 안에 들어있는 것처럼 그려보았다. 또한 실린더와 같이 push 하여 실린더를 움직일시 같이 움직이게 구현하였다.
®물체의 이동은 키보드로 구현하였으며 LEFT 및 RIGHT를 누를시 중심인 구, 실린더가 각 방향으로 돌아간다. 이때, 팔도 같이 돌아가게 구현하였다. 또한 UP,DOWN, PAGE_UP, PAGE_DOWN 을 누르게되면 아래팔, 위쪽팔이 움직이게된다.
®로봇의 팔은 90도 이하로는 꺽이지 않게 구현하였다. 그냥 놔두면 실린더도 관통하면서 꺽이기 때문이다. 좀 더 현실적인 로봇을 구현하고자 이렇게 설계하였다.
2.결론 및 고찰
소스코드
#include
#include
#include
#include
#include
#include
GLboolean left_click = false; //클릭하고있는지보기위해
GLboolean right_click = false;
GLdouble click_rotation_X=0,click_rotation_Y=0;
GLUquadricObj *p; //quadric 객체선언
static float Base; //베이스
static float Lower_Arm; //아래팔뚝
static float Upper_Arm; //팔
void base(void)
{
glPushMatrix(); //물체값들푸시
glColor3f(1, 0, 0);
glTranslatef(0, -1.0, 0); //현재좌표계를Y축으로-1.0만큼이동
glRotatef(-90, 1, 0, 0); //x축으로90도회전
glRotatef(Base, 0, 0, 1); //Base 값만큼z축으로회전
gluCylinder(p, 0.4, 0.4, 0.3, 8, 5); //실린더그림
glTranslatef(0, 0, -0.1); //현재좌표계를Y축으로-1.0만큼이동
glColor3f(0.3, 0.4, 0.5); //색깔바꾸기
glutWireSphere(0.4,20,20); //반지름0.4인구그리기
glPopMatrix(); //물체값들팝
}
void lower_arm(void)
{
glPushMatrix(); //물체값들푸시
glColor3f(0, 1, 1);
glRotatef(Base, 0, 1, 0); //Base 값만큼y축으로회전
glTranslatef(0, -0.7, 0); //현재좌표계를Y축으로-0.7만큼이동
glRotatef(Lower_Arm, 0, 0, 1); //Lower_Arm 값만큼z축으로회전
glTranslatef(0, 0.5, 0); //현재좌표계를Y축으로0.5만큼이동
glScalef(0.2, 1, 0.2); //1의정육면체를축소하여그리기
glutWireCube(1); //길이1인정육면체그리기
glPopMatrix(); //물체값들팝
}
void upper_arm(void)
{
glPushMatrix(); //물체값들푸시
glColor3f(0.5, 0.2, 0.3);
glRotatef(Base, 0, 1, 0); //Base 값만큼y축으로회전
glTranslatef(0, -0.7, 0); //현재좌표계를Y축으로-0.7만큼이동
glRotatef(Lower_Arm, 0, 0, 1); //Lower_Arm 값만큼z축으로회전
glTranslatef(0, 1.0, 0); //현재좌표계를Y축으로1.0만큼이동
glRotatef(Upper_Arm, 0, 0, 1); //Upper_Arm 값만큼z축으로회전
glTranslatef(0, 0.4, 0); //현재좌표계를Y축으로0.4만큼이동
glScalef(0.2, 0.8, 0.2); //1의정육면체를축소하여그리기
glutWireCube(1); //길이1인정육면체그리기
glPopMatrix(); //물체값들팝
}
void OnDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glLoadIdentity();
glRotatef(click_rotation_X,1,0,0); //click_rotation_X값만큼X축으로회전
glRotatef(click_rotation_Y,0,1,0); //click_rotation_Y값만큼Y축으로회전
gluLookAt(0.5, 0.5, 0.5, 0, 0, 0, 0, 1, 0);
//카메라시점설정
base();
lower_arm();
upper_arm();
glutSwapBuffers(); //버퍼교환
}
void Key_Function(int key, int x, int y)
{
switch(key)
{
case ‘q’ | ‘Q’:exit(0); break;
case VK_ESCAPE: gluDeleteQuadric(p);exit(0); break;
//생성된객체삭제후종료
case GLUT_KEY_RIGHT: //베이스판회전
Base += 2.0;
break;
case GLUT_KEY_LEFT: Base -= 2.0;break;
case GLUT_KEY_DOWN: //팔뚝회전
Lower_Arm -= 2.0;
break;
case GLUT_KEY_UP:Lower_Arm += 2.0;break;
case GLUT_KEY_PAGE_DOWN://손목회전
Upper_Arm -= 2.0;
break;
case GLUT_KEY_PAGE_UP:Upper_Arm += 2.0;break;
default:break;
}
glutPostRedisplay();
}
void timer(int value)
{
//오른쪽버튼클릭(유지)시팔이원상태로돌아감(모션)
if(right_click == true)
{
if(Lower_Arm < 0) Lower_Arm +=2; else if(Lower_Arm >0)
Lower_Arm -=2;
if(Upper_Arm < 0) Upper_Arm +=2; else if(Upper_Arm >0)
Upper_Arm -=2;
if(Base < 0) Base +=2; else if(Base >0)
Base -=2;
}
//팔이꺽을수없는각도위해값조절
if(Lower_Arm >= 90.0)
Lower_Arm = 90.0;
if(Lower_Arm <= -90.0) Lower_Arm = -90.0; if(Upper_Arm >= 90.0)
Upper_Arm = 90.0;
if(Upper_Arm <= -90.0) Upper_Arm = -90; glutTimerFunc(33, timer, 1); //타이머함수호출 glutPostRedisplay(); //다시그리기 } void init(void) { p = gluNewQuadric(); //객체할당(메모리생성) gluQuadricDrawStyle(p, GLU_LINE); //그리기스타일옵션 Base = 0;Lower_Arm = 0;Upper_Arm = 0; glClearColor(1.0f, 1.0f, 1.0f, 1.0f); glEnable(GL_DEPTH_TEST); //깊이정보에따라이미지를나눈다. } void OnReshape(int w, int h) //화면크기변경시Reshape { if(h == 0) h = 1; glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-2.0*(float)w / (float)h, 2.0*(float)w / (float)h, -2.0, 2.0, -10.0, 10.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void OnMouseClick(int button, int state, int xx, int yy) { //(왼쪽,오른쪽)마우스가눌러져있으면true if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { left_click = true; } else if(button == GLUT_LEFT_BUTTON && state == GLUT_UP) { left_click = false; } if(button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) { right_click = true; } else if(button == GLUT_RIGHT_BUTTON && state == GLUT_UP) { right_click = false; } glutPostRedisplay(); } void OnMouseMove(int x, int y) { //static선언하여값이변하지않게함 static int static_X=x, static_Y=y; if(left_click == true) { click_rotation_X = y - static_Y; click_rotation_Y = x - static_X; glutPostRedisplay(); } if(right_click == true) { static_X = x; static_Y = y; glutPostRedisplay(); } } void main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(600,600); glutCreateWindow("KAU 2006122050 TrustOne"); glutDisplayFunc(OnDisplay); glutReshapeFunc(OnReshape); glutMouseFunc(OnMouseClick); glutMotionFunc(OnMouseMove); glutPassiveMotionFunc(OnMouseMove); glutTimerFunc(33, timer, 1); glutSpecialFunc(Key_Function); init(); glutMainLoop(); } 결과화면 그림 1 확대한 화면 그림 2 원본 화면 그림 3 마우스로 이동한 화면 그림 4 축소한 화면 그림 5 마우스 이동화면 그림 6 축소 & 회전 그림 7 회전화면 그림 8 회전한 화면
로봇 팔 만들기
설명
로봇의 팔을 만들어서 회전하고 꺽을수 있다.
이번에도 마찬가지로 소스에 대한 설명은 주석을 참조하세요
또한 생략된 소스는 맨 앞의 글을 참조하세요
2017/09/12 – [SW/OpenGL] – OpenGL – 사각형 회전, 색바꾸기
로봇의 base
void base ( void ) { glPushMatrix (); //push { glColor3f ( 1 , 0 , 0 ); //red glTranslatef ( 0 , – 0.8 , 0 ); //y axis glRotatef (- 90 , 1 , 0 , 0 ); //x axis glRotatef ( Base_Angle , 0 , 0 , 1 ); //z axis gluCylinder ( p , 0.5 , 0.5 , 0.3 , 20 , 1 ); //draw cylinder } glPopMatrix (); //pop }
로봇의 lower
///
/// arm’s lower /// void lower_arm ( void ) { glPushMatrix (); //push { glColor3f ( 0 , 1 , 0 ); //green glRotatef ( Base_Angle , 0 , 1 , 0 ); //rotate with y axis glTranslatef ( 0 , – 0.7 , 0 ); //translate with axis glRotatef ( Lower_Arm_Angle , 0 , 0 , 1 ); //rotate with z axis glTranslatef ( 0 , 0.5 , 0 ); //translate with y axis glScalef ( 0.2 , 1 , 0.2 ); //scaling glutWireCube ( 1 ); //draw cube } glPopMatrix (); //pop }
로봇의 upper
///
/// arm’s upper /// void upper_arm ( void ) { glPushMatrix (); //push { glColor3f ( 0 , 0 , 1 ); // blue glRotatef ( Base_Angle , 0 , 1 , 0 ); //rotate y axis glTranslatef ( 0 , – 0.7 , 0 ); //translate y axis glRotatef ( Lower_Arm_Angle , 0 , 0 , 1 ); //rotate z axis glTranslatef ( 0 , 1.0 , 0 ); //translate y axis glRotatef ( Upper_Arm_Angle , 0 , 0 , 1 ); //rotate z axis glTranslatef ( 0 , 0.4 , 0 ); //translate y axis glScalef ( 0.2 , 0.8 , 0.2 ); //scaling glutWireCube ( 1 ); //draw cube } glPopMatrix (); //pop }
렌더링 함수
void RenderScene ( void ) { glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glMatrixMode ( GL_MODELVIEW ); glLoadIdentity (); gluLookAt ( 0.5 , 0.5 , 0.5 , 0 , 0 , 0 , 0 , 1 , 0 ); //setting camera viewpoint base (); //draw base lower_arm (); //draw lower part upper_arm (); //draw upper part glutSwapBuffers (); }
스페셜 키 이벤트 (화살표4개, home, end)
///
/// Special key event /// /// Special key. /// The x /// The y void specialkeys ( int key , int x , int y ) { switch ( key ) { case GLUT_KEY_UP : //up arrow Lower_Arm_Angle += 2 ; break ; case GLUT_KEY_DOWN : //down arrow Lower_Arm_Angle -= 2 ; break ; case GLUT_KEY_LEFT : //left arrow Base_Angle -= 2 ; break ; case GLUT_KEY_RIGHT : //right arrow Base_Angle += 2 ; break ; case GLUT_KEY_HOME : //home key Upper_Arm_Angle += 2 ; break ; case GLUT_KEY_END : //end key Upper_Arm_Angle -= 2 ; break ; default : break ; } }
메인함수
void main ( int argc , char * argv []) { glutInit (& argc , argv ); glutInitDisplayMode ( GLUT_DOUBLE | GLUT_RGB ); glutInitWindowSize ( 500 , 500 ); glutCreateWindow ( “Simple” ); glutDisplayFunc ( RenderScene ); glutReshapeFunc ( ChangeSize ); glutSpecialFunc ( specialkeys ); //Special key event glutMouseFunc ( mouseButton ); glutMotionFunc ( mouseMotion ); glutTimerFunc ( 1000 / 30 , timer , 1 ); glutKeyboardFunc ( keyboard ); init (); SetupRc (); glutMainLoop (); }
타이머 함수
void timer ( int value ) { if ( rot ) { theta += 2.0 ; if ( theta >= 360.0 ) theta -= 360.0 ; } else { theta -= 2.0 ; if ( theta <= 360.0 ) theta += 360.0 ; } glutTimerFunc ( 1000 / 30 , timer , 1 ); glutPostRedisplay (); } 결과
OpenGL로 로봇 팔 그리기
320×100
마우스 오른쪽 버튼을 누르면 팔이 아래로 위로 움직이고 1~5번 키를 누르면 손가락이 접었다 펴지는 코드이다.
Graphics OpenGL로 로봇 팔 그리기_191110
#include
GLUquadricObj* cyl; int elbow = 70; int fing1 = 0, fing2 = 0, fing3 = 0, fing4 = 0, fing5 = 0; int fingnum = 0; int state = 0; int Pstate = 0; void DrawShoulder(); void DrawElbow(); void DrawPalm(); void DrawFing1(); void DrawFing2(); void DrawFing3(); void DrawFing4(); void DrawFing5(); void MyDisplay() { glClearColor(0.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); DrawShoulder(); glutSwapBuffers(); } void DrawShoulder() { glTranslatef(-1.0, 1.5, -2.0); glRotatef(90.0, 1.0, 0.0, 0.0); glRotatef(-7.0, -1.0, -1.0, 0.0); cyl = gluNewQuadric(); gluQuadricDrawStyle(cyl, GLU_LINE); gluQuadricNormals(cyl, GLU_SMOOTH); glColor3f(1.0, 1.0, 1.0); gluCylinder(cyl, 0.2, 0.2, 1.5, 4.0, 1.0); DrawElbow(); } void DrawElbow() { glPushMatrix(); // Shoulder 좌표 push glTranslatef(-0.1, 0.0, 1.36); glRotatef(20, 1.0, 0.0, 0.0); glRotatef((GLfloat)elbow, 0.0, 1.0, 0.0); cyl = gluNewQuadric(); gluQuadricDrawStyle(cyl, GLU_LINE); gluQuadricNormals(cyl, GLU_SMOOTH); glColor3f(1.0, 1.0, 1.0); gluCylinder(cyl, 0.2, 0.2, 1.5, 4.0, 1.0); DrawPalm(); glPopMatrix(); // Elbow 좌표 pop } void DrawPalm() { glPushMatrix(); // 팔 좌표 push glTranslatef(0.0, 0.0, 1.65); glScalef(0.5, 0.2, 0.4); glutWireCube(1.0); glScalef(2.0, 1.0, 2.5); DrawFing1(); DrawFing2(); DrawFing3(); DrawFing4(); DrawFing5(); glPopMatrix(); // 손바닥 좌표 pop } void DrawFing1() { glPushMatrix(); // 손바닥 좌표 push glTranslatef(0.2, 0.0, 0.2); glRotatef(90.0, 0.0, 0.0, 1.0); cyl = gluNewQuadric(); gluQuadricDrawStyle(cyl, GLU_LINE); gluQuadricNormals(cyl, GLU_SMOOTH); glColor3f(1.0, 1.0, 1.0); gluCylinder(cyl, 0.05, 0.05, 0.2, 4.0, 1.0); glPushMatrix(); // 손가락1 좌표 push glTranslatef(0.1, 0.0, 0.18); glRotatef((GLfloat)fing1, 1.0, 0.0, 0.0); cyl = gluNewQuadric(); gluQuadricDrawStyle(cyl, GLU_LINE); gluQuadricNormals(cyl, GLU_SMOOTH); glColor3f(1.0, 1.0, 1.0); gluCylinder(cyl, 0.05, 0.05, 0.23, 4.0, 1.0); glPopMatrix(); // 손가락1-1 좌표 pop glPopMatrix(); // 손가락1 좌표 pop } void DrawFing2() { glPushMatrix(); // 손바닥 좌표 push glTranslatef(0.1, 0.0, 0.2); glRotatef(90.0, 0.0, 0.0, 1.0); cyl = gluNewQuadric(); gluQuadricDrawStyle(cyl, GLU_LINE); gluQuadricNormals(cyl, GLU_SMOOTH); glColor3f(1.0, 1.0, 1.0); gluCylinder(cyl, 0.05, 0.05, 0.2, 4.0, 1.0); glPushMatrix(); // 손가락2 좌표 push glTranslatef(0.0, 0.0, 0.18); glRotatef((GLfloat)fing2, 1.0, 0.0, 0.0); cyl = gluNewQuadric(); gluQuadricDrawStyle(cyl, GLU_LINE); gluQuadricNormals(cyl, GLU_SMOOTH); glColor3f(1.0, 1.0, 1.0); gluCylinder(cyl, 0.05, 0.05, 0.23, 4.0, 1.0); glPopMatrix(); // 손가락2-1 좌표 pop glPopMatrix(); // 손가락2 좌표 pop } void DrawFing3() { glPushMatrix(); // 손바닥 좌표 push glTranslatef(0.0, 0.0, 0.2); glRotatef(90.0, 0.0, 0.0, 1.0); cyl = gluNewQuadric(); gluQuadricDrawStyle(cyl, GLU_LINE); gluQuadricNormals(cyl, GLU_SMOOTH); glColor3f(1.0, 1.0, 1.0); gluCylinder(cyl, 0.05, 0.05, 0.2, 4.0, 1.0); glPushMatrix(); // 손가락3 좌표 push glTranslatef(0.0, 0.0, 0.18); glRotatef((GLfloat)fing3, 1.0, 0.0, 0.0); cyl = gluNewQuadric(); gluQuadricDrawStyle(cyl, GLU_LINE); gluQuadricNormals(cyl, GLU_SMOOTH); glColor3f(1.0, 1.0, 1.0); gluCylinder(cyl, 0.05, 0.05, 0.23, 4.0, 1.0); glPopMatrix(); // 손가락3-1 좌표 pop glPopMatrix(); // 손가락3 좌표 pop } void DrawFing4() { glPushMatrix(); // 손바닥 좌표 push glTranslatef(-0.1, 0.0, 0.2); glRotatef(90.0, 0.0, 0.0, 1.0); cyl = gluNewQuadric(); gluQuadricDrawStyle(cyl, GLU_LINE); gluQuadricNormals(cyl, GLU_SMOOTH); glColor3f(1.0, 1.0, 1.0); gluCylinder(cyl, 0.05, 0.05, 0.2, 4.0, 1.0); glPushMatrix(); // 손가락4 좌표 push glTranslatef(0.0, 0.0, 0.18); glRotatef((GLfloat)fing4, 1.0, 0.0, 0.0); cyl = gluNewQuadric(); gluQuadricDrawStyle(cyl, GLU_LINE); gluQuadricNormals(cyl, GLU_SMOOTH); glColor3f(1.0, 1.0, 1.0); gluCylinder(cyl, 0.05, 0.05, 0.23, 4.0, 1.0); glPopMatrix(); // 손가락4-1 좌표 pop glPopMatrix(); // 손가락4 좌표 pop } void DrawFing5() { glPushMatrix(); // 손바닥 좌표 push glTranslatef(-0.2, 0.0, 0.2); glRotatef(90.0, 0.0, 0.0, 1.0); cyl = gluNewQuadric(); gluQuadricDrawStyle(cyl, GLU_LINE); gluQuadricNormals(cyl, GLU_SMOOTH); glColor3f(1.0, 1.0, 1.0); gluCylinder(cyl, 0.05, 0.05, 0.2, 4.0, 1.0); glPushMatrix(); // 손가락5 좌표 push glTranslatef(0.0, 0.0, 0.18); glRotatef((GLfloat)fing5, 1.0, 0.0, 0.0); cyl = gluNewQuadric(); gluQuadricDrawStyle(cyl, GLU_LINE); gluQuadricNormals(cyl, GLU_SMOOTH); glColor3f(1.0, 1.0, 1.0); gluCylinder(cyl, 0.05, 0.05, 0.23, 4.0, 1.0); glPopMatrix(); // 손가락5-1 좌표 pop glPopMatrix(); // 손가락5 좌표 pop } void MyPTimer(int Value) { if (elbow == 20 && Pstate == 0) { elbow += 10; Pstate = 1; } if (elbow <= 90 && Pstate == 0) { elbow -= 10; } if (elbow <= 90 && Pstate == 1) { elbow += 10; } if (elbow == 90 && Pstate == 1) { Pstate = 2; } if (Pstate == 2) { return; } glutPostRedisplay(); glutTimerFunc(100, MyPTimer, 10); } void MyMouse(int button, int state, int x, int y) { if (button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) { Pstate = 0; glutTimerFunc(100, MyPTimer, 10); glutPostRedisplay(); } } void MyTimer(int Value) { if (fingnum == 1) { if (fing1 == 180) { state = 1; if (fing1 == 0) { return; } if (fing1 != 0) { fing1 -= 20; state = 1; glutPostRedisplay(); } } if (fing1 != 180 && state == 0) { fing1 += 20; glutPostRedisplay(); } if (fing1 != 0 && state == 1) { fing1 -= 20; glutPostRedisplay(); } } else if (fingnum == 2) { if (fing2 == 180) { state = 1; if (fing2 == 0) { return; } if (fing2 != 0) { fing2 -= 20; state = 1; glutPostRedisplay(); } } if (fing2 != 180 && state == 0) { fing2 += 20; glutPostRedisplay(); } if (fing2 != 0 && state == 1) { fing2 -= 20; glutPostRedisplay(); } } else if (fingnum == 3) { if (fing3 == 180) { state = 1; if (fing3 == 0) { return; } if (fing3 != 0) { fing3 -= 20; state = 1; glutPostRedisplay(); } } if (fing3 != 180 && state == 0) { fing3 += 20; glutPostRedisplay(); } if (fing3 != 0 && state == 1) { fing3 -= 20; glutPostRedisplay(); } } else if (fingnum == 4) { if (fing4 == 180) { state = 1; if (fing4 == 0) { return; } if (fing4 != 0) { fing4 -= 20; state = 1; glutPostRedisplay(); } } if (fing4 != 180 && state == 0) { fing4 += 20; glutPostRedisplay(); } if (fing4 != 0 && state == 1) { fing4 -= 20; glutPostRedisplay(); } } else { if (fing5 == 180) { state = 1; if (fing5 == 0) { return; } if (fing5 != 0) { fing5 -= 20; state = 1; glutPostRedisplay(); } } if (fing5 != 180 && state == 0) { fing5 += 20; glutPostRedisplay(); } if (fing5 != 0 && state == 1) { fing5 -= 20; glutPostRedisplay(); } } glutTimerFunc(200, MyTimer, 1); } void MyKeyboard(unsigned char key, int x, int y) { switch (key) { case '1': fingnum = 1; glutTimerFunc(100, MyTimer, 1); state = 0; break; case '2': fingnum = 2; glutTimerFunc(100, MyTimer, 1); state = 0; break; case '3': fingnum = 3; glutTimerFunc(100, MyTimer, 1); state = 0; break; case '4': fingnum = 4; glutTimerFunc(100, MyTimer, 1); state = 0; break; case '5': fingnum = 5; glutTimerFunc(100, MyTimer, 1); state = 0; break; } } void MyReshape(int nw, int nh) { glViewport(0, 0, (GLsizei)nw, (GLsizei)nh); GLfloat wf = (GLfloat)nw / (GLfloat)700; GLfloat hf = (GLfloat)nh / (GLfloat)700; glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-3.0 * wf, 3.0 * wf, -3.0 * hf, 3.0 * hf, -3.0, 3.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); glutInitWindowSize(700, 700); glutCreateWindow("Robot Arm"); glutDisplayFunc(MyDisplay); glutMouseFunc(MyMouse); glutKeyboardFunc(MyKeyboard); glutReshapeFunc(MyReshape); glutMainLoop(); return 0; } 반응형
사용을위한 고품질 opengl 로봇 팔 협력 업체-상품 ID : 60508624097-korean.alibaba.com
About products and suppliers:
쇼핑. 공장에서 자동화와 효율성이 필요한 경우 Alibaba.com의 opengl 로봇 팔 협력 업체. 하나를 사용하여 손으로하지 않고 부품 및 기타 작은 품목을 이동하고 분류하십시오. 자동차 제조업체와 식품 포장 공장에서 유용하게 사용할 수 있습니다. 시설 내의 opengl 로봇 팔 협력 업체. 생산 목표를 달성하면서 시간과 인건비를 절약 할 수 있도록 설정하십시오.
대부분. opengl 로봇 팔 협력 업체에는 알루미늄 및 기타 강하고 가벼운 합금으로 만든 부품이 있습니다. 또한 팔 끝에 진공 흡입 컵이있어 제품을 안전하게 잡을 수 있습니다. 일부 유형은 인공 지능 명령으로 프로그래밍 할 수 있으며 자동으로 실행되도록 남겨 둘 수 있습니다. 대규모 작업에서는이를 사용하여 생산성을 쉽게 높일 수 있습니다. 여러 모델이 4 개의 다른 방향 축으로 이동할 수 있습니다.
알리바바 닷컴에서 다양한 공급 업체를 찾아 보시면 찾을 수 있습니다. 나에게 딱 맞는 opengl 로봇 팔 협력 업체 색상과 로고는 필요에 따라 사용자 정의 할 수 있습니다. 특정 공급 업체는 시간과 비용을 절약 할 수 있도록 현장 설치를 허용합니다. 온라인 기술 지원 및 무료 예비 부품과 같은 기타 판매 후 서비스도 이용할 수 있습니다. 일부 공급 업체는 표준 주문을 구매하기 전에 모델을 테스트 할 수 있도록 샘플을 보낼 수 있습니다.
Get. Alibaba.com의 opengl 로봇 팔 협력 업체는 비용을 낮게 유지하면서 생산이 원활하게 진행되도록합니다. 적합한 스타일과 기능을 갖춘 모델을 찾으십시오. 여러 개를 찾아보십시오. opengl 로봇 팔 협력 업체 생산 플랜트와 예산에 적합한 주문을 맞춤 설정하세요.
3D Printer 로봇팔 제작 – 7
안녕하세요. 평생개발자 입니다.
로봇팔 제작 프로젝트 7번째 포스팅!!!
취미로 시작해서 점점 프로젝트가 커지고 있습니다. 재미가 있다가도 집에서 일하는 것 같고 직장 일과 묘하게 겹치면서 집에서도 근무하는 느낌입니다.
이번 포스팅은 SW 에서 로봇 동작을 시뮬레이션하고, 실제로 로봇이 실제 위치로 움직이는 것을 목표로 두고 있습니다.
3D 모델링
3D 렌더링
3D 렌더링과 동일한 로봇 하드웨어
로봇팔 제어 SW
로봇 시뮬레이션에 필요한 inverse kinematics, 충동 체크, Lader scan 등을 수행하기 위한 GUI
사용된 SW library
Eigen : 선형대수 계산
OpenGL : 그래픽 표현
MFC : 윈도우 프레임 GUI
로봇 DOF 각도 테스트 영상
robot inverse kinematics
키워드에 대한 정보 opengl 로봇 팔
다음은 Bing에서 opengl 로봇 팔 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 그래픽스 5주차 3교시: 모델변환실습(3/4) 로봇-팔 그리기(팔-손-손가락). OpenGL
- 동영상
- 공유
- 카메라폰
- 동영상폰
- 무료
- 올리기
그래픽스 #5주차 #3교시: #모델변환실습(3/4) #로봇-팔 #그리기(팔-손-손가락). # #OpenGL
YouTube에서 opengl 로봇 팔 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 그래픽스 5주차 3교시: 모델변환실습(3/4) 로봇-팔 그리기(팔-손-손가락). OpenGL | opengl 로봇 팔, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.