최근 편집
최근 토론
게시판 메인
도구
투표
무작위 문서
스킨 설정
파일 올리기
기타 도구
216.73.216.153
IP
사용자 도구
사용자 설정
로그인
회원 가입
최근 편집
최근 토론
돌아가기
삭제
이동
파일 올리기
연구실(bwlee42)/251107
(편집) (2)
(편집 필터 규칙)
235,inf
==Python Genesis 활용== 나름 최근?에 나온 물리 엔진이라고 해서 사용해봤다. 사용법을 익혀나가는 단계인데, 꾸준히 공부하면 더 많은 것을 해볼 수 있지 않을까.. 겨우 RTX 2050 달린 그램에서 시뮬레이션 돌리려니까 좀 빡세긴 하다. 해상도라던지 이런 건 좀 타협할 필요가 있어보인다. ~~젠슨 황이 글카 26만장 중 1장만이라도 나한테 줬으면 좋겠다.~~ 최대 60프레임 기준, 유체 실험은 겨우 14~15 프레임 정도 나오고, 로봇 팔 오브젝트 하나만 있는 경우에도 30~57프레임 정도 수준이다. 많이 불안정하긴 하다. 멀티테스킹도 못한다.~~똥컴~~ 아래는 간단한 실행 사진이다. [[파일:CYR.png]] 실행 시간이 길어질 수록 쓰로틀링 때문인지 프레임 수가 점점 더 떨어진다(...) 아래는 실행한 코드이다. 홈페이지에서 긁어온 간단한 예제이다. 파이썬 버전, Pytorch 버전, 글카 드라이버 버전 등 신경써야 할 게 많다. 가상환경에서 실행하는 것을 권장한다.~~그냥 하지 마라~~ {{{#!syntax python import numpy as np import genesis as gs ########################## init ########################## gs.init(backend=gs.cuda) ########################## create a scene ########################## scene = gs.Scene( viewer_options = gs.options.ViewerOptions( camera_pos = (0, -3.5, 2.5), camera_lookat = (0.0, 0.0, 0.5), camera_fov = 30, res = (960, 640), max_FPS = 60, ), sim_options = gs.options.SimOptions( dt = 0.01, ), show_viewer = True, ) ########################## entities ########################## plane = scene.add_entity( gs.morphs.Plane(), ) franka = scene.add_entity( gs.morphs.MJCF( file = 'xml/franka_emika_panda/panda.xml', ), ) ########################## build ########################## scene.build() jnt_names = [ 'joint1', 'joint2', 'joint3', 'joint4', 'joint5', 'joint6', 'joint7', 'finger_joint1', 'finger_joint2', ] dofs_idx = [franka.get_joint(name).dof_idx_local for name in jnt_names] ############ Optional: set control gains ############ # set positional gains franka.set_dofs_kp( kp = np.array([4500, 4500, 3500, 3500, 2000, 2000, 2000, 100, 100]), dofs_idx_local = dofs_idx, ) # set velocity gains franka.set_dofs_kv( kv = np.array([450, 450, 350, 350, 200, 200, 200, 10, 10]), dofs_idx_local = dofs_idx, ) # set force range for safety franka.set_dofs_force_range( lower = np.array([-87, -87, -87, -87, -12, -12, -12, -100, -100]), upper = np.array([ 87, 87, 87, 87, 12, 12, 12, 100, 100]), dofs_idx_local = dofs_idx, ) # Hard reset for i in range(150): if i < 50: franka.set_dofs_position(np.array([1, 1, 0, 0, 0, 0, 0, 0.04, 0.04]), dofs_idx) elif i < 100: franka.set_dofs_position(np.array([-1, 0.8, 1, -2, 1, 0.5, -0.5, 0.04, 0.04]), dofs_idx) else: franka.set_dofs_position(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0]), dofs_idx) scene.step() # PD control for i in range(1250): if i == 0: franka.control_dofs_position( np.array([1, 1, 0, 0, 0, 0, 0, 0.04, 0.04]), dofs_idx, ) elif i == 250: franka.control_dofs_position( np.array([-1, 0.8, 1, -2, 1, 0.5, -0.5, 0.04, 0.04]), dofs_idx, ) elif i == 500: franka.control_dofs_position( np.array([0, 0, 0, 0, 0, 0, 0, 0, 0]), dofs_idx, ) elif i == 750: # control first dof with velocity, and the rest with position franka.control_dofs_position( np.array([0, 0, 0, 0, 0, 0, 0, 0, 0])[1:], dofs_idx[1:], ) franka.control_dofs_velocity( np.array([1.0, 0, 0, 0, 0, 0, 0, 0, 0])[:1], dofs_idx[:1], ) elif i == 1000: franka.control_dofs_force( np.array([0, 0, 0, 0, 0, 0, 0, 0, 0]), dofs_idx, ) # This is the control force computed based on the given control command # If using force control, it's the same as the given control command print('control force:', franka.get_dofs_control_force(dofs_idx)) # This is the actual force experienced by the dof print('internal force:', franka.get_dofs_force(dofs_idx)) scene.step() }}}
(임시 저장)
(임시 저장 불러오기)
기본값
모나코 에디터
normal
namumark
namumark_beta
macromark
markdown
custom
raw
(추가)
==Python Genesis 활용== 나름 최근?에 나온 물리 엔진이라고 해서 사용해봤다. 사용법을 익혀나가는 단계인데, 꾸준히 공부하면 더 많은 것을 해볼 수 있지 않을까.. 겨우 RTX 2050 달린 그램에서 시뮬레이션 돌리려니까 좀 빡세긴 하다. 해상도라던지 이런 건 좀 타협할 필요가 있어보인다. ~~젠슨 황이 글카 26만장 중 1장만이라도 나한테 줬으면 좋겠다.~~ 최대 60프레임 기준, 유체 실험은 겨우 14~15 프레임 정도 나오고, 로봇 팔 오브젝트 하나만 있는 경우에도 30~57프레임 정도 수준이다. 많이 불안정하긴 하다. 멀티테스킹도 못한다.~~똥컴~~ 아래는 간단한 실행 사진이다. [[파일:CYR.png]] 실행 시간이 길어질 수록 쓰로틀링 때문인지 프레임 수가 점점 더 떨어진다(...) 아래는 실행한 코드이다. 홈페이지에서 긁어온 간단한 예제이다. 파이썬 버전, Pytorch 버전, 글카 드라이버 버전 등 신경써야 할 게 많다. 가상환경에서 실행하는 것을 권장한다.~~그냥 하지 마라~~ {{{#!syntax python import numpy as np import genesis as gs ########################## init ########################## gs.init(backend=gs.cuda) ########################## create a scene ########################## scene = gs.Scene( viewer_options = gs.options.ViewerOptions( camera_pos = (0, -3.5, 2.5), camera_lookat = (0.0, 0.0, 0.5), camera_fov = 30, res = (960, 640), max_FPS = 60, ), sim_options = gs.options.SimOptions( dt = 0.01, ), show_viewer = True, ) ########################## entities ########################## plane = scene.add_entity( gs.morphs.Plane(), ) franka = scene.add_entity( gs.morphs.MJCF( file = 'xml/franka_emika_panda/panda.xml', ), ) ########################## build ########################## scene.build() jnt_names = [ 'joint1', 'joint2', 'joint3', 'joint4', 'joint5', 'joint6', 'joint7', 'finger_joint1', 'finger_joint2', ] dofs_idx = [franka.get_joint(name).dof_idx_local for name in jnt_names] ############ Optional: set control gains ############ # set positional gains franka.set_dofs_kp( kp = np.array([4500, 4500, 3500, 3500, 2000, 2000, 2000, 100, 100]), dofs_idx_local = dofs_idx, ) # set velocity gains franka.set_dofs_kv( kv = np.array([450, 450, 350, 350, 200, 200, 200, 10, 10]), dofs_idx_local = dofs_idx, ) # set force range for safety franka.set_dofs_force_range( lower = np.array([-87, -87, -87, -87, -12, -12, -12, -100, -100]), upper = np.array([ 87, 87, 87, 87, 12, 12, 12, 100, 100]), dofs_idx_local = dofs_idx, ) # Hard reset for i in range(150): if i < 50: franka.set_dofs_position(np.array([1, 1, 0, 0, 0, 0, 0, 0.04, 0.04]), dofs_idx) elif i < 100: franka.set_dofs_position(np.array([-1, 0.8, 1, -2, 1, 0.5, -0.5, 0.04, 0.04]), dofs_idx) else: franka.set_dofs_position(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0]), dofs_idx) scene.step() # PD control for i in range(1250): if i == 0: franka.control_dofs_position( np.array([1, 1, 0, 0, 0, 0, 0, 0.04, 0.04]), dofs_idx, ) elif i == 250: franka.control_dofs_position( np.array([-1, 0.8, 1, -2, 1, 0.5, -0.5, 0.04, 0.04]), dofs_idx, ) elif i == 500: franka.control_dofs_position( np.array([0, 0, 0, 0, 0, 0, 0, 0, 0]), dofs_idx, ) elif i == 750: # control first dof with velocity, and the rest with position franka.control_dofs_position( np.array([0, 0, 0, 0, 0, 0, 0, 0, 0])[1:], dofs_idx[1:], ) franka.control_dofs_velocity( np.array([1.0, 0, 0, 0, 0, 0, 0, 0, 0])[:1], dofs_idx[:1], ) elif i == 1000: franka.control_dofs_force( np.array([0, 0, 0, 0, 0, 0, 0, 0, 0]), dofs_idx, ) # This is the control force computed based on the given control command # If using force control, it's the same as the given control command print('control force:', franka.get_dofs_control_force(dofs_idx)) # This is the actual force experienced by the dof print('internal force:', franka.get_dofs_force(dofs_idx)) scene.step() }}}
비로그인 상태이므로 문서 편집 및 게시판 글 작성 시 IP가 그대로 노출 됩니다.
전송
미리보기