로봇 arm 기능 구현
프로젝트명 | 로봇 arm 제어 , 개인프로젝트 |
프로젝트 소개 및 구성 | 터미널창을 이용해 로봇ARM 제어 물류자동화시스템을 구현하기 위해서 핵심기능들을 구현하려고 로봇arm을 빌려 개인적으로 프로젝트를 진행했고, 로봇arm에서 가장 중점이 되는 기능들을 먼저 구현했습니다. Arm과 컴퓨터 통신 방식은 _serial 통신(usb)을 이용 했고, 각 노드 별 통신은 ROS의 message토픽을 이용했습니다. 나중에 물류자동화 시스템을 구성하는 프로젝트를 할 때 유동적으로 사용 할 수 있게 각 노드별로 섹터를 나누어 동작하게 했습니다. 노드 구성도 . ( rqt_graph ) o : node , ㅁ : topic ![]() 1. ![]() 사용자에게 data(좌표,그리퍼동작)를 받아 동작노드에 데이터를 publish합니다 2. ![]() data를 subscribe해 fk함수를 통해 좌표값을 로봇이 사용할 수 있게 가공해 publish 해줍니다 3. ![]() 각 data들을 전부 subscribe해 _serial통신을 통해 로봇에게 보냅니다. UI 는 CLI화면을 통해 특정 좌표와 그리퍼동작 유무를 보내면 동작하게끔 코드를 작성했습니다. 디렉토리 구성 .(수정본 : 패키지생성 + 토픽추가) "*_1" 파일들은 사용 안합니다. ![]() ![]() |
사용방법 | 1. 프로그램 실행 순서 1_1. 드라이버 권한 666 후 , 1_2. roscore 켜주고 1_3. rosrun으로 iwh_arm 패키지에 있는 pose_node , moveit_node , write_node 을 켜준다. { 1_2과 1_3대신 roslaunch 로 켜도 무방합니다. (pose_node , moveit_node , write_node) } ![]() 2. 프로그램 실행후 화면 ![]() 3. 동작방법 "pose_node" 창에서 j1~3좌표 랑 pump동작유무 입력 예시 1) 초기상태 ![]() 예시 2) 90,90,0,1 ( j1, j2, j3, pump_on/off ) 입력시 상태 ![]() 4. 사용방법 동영상 파일 https://youtu.be/3fJJLDvaHN0 |
사용 언어 및 기술 | 소스코드 : C++ launch 파일 코드 : xml shell 코드 수정 : bash 통신 : ROS, UART통신 사용 OS : Linux Ubuntu 16.04 |
사용 장비 | uArm swiftPro![]() |
담당 업무 | 하드웨어설치 조립 , OS설치 , 환경설정 , 프로그램 코딩 |
인 원 ( 퍼센트 ) | 1인(100%) |
기간 | 2022/1/13~2022/1/19 |
시연 영상 및 사진 | 로봇 동작영상(로봇동작영상) https://youtu.be/op85O0ktwAk 로봇 동작영상(컴퓨터화면) https://youtu.be/RTcVo32lmqo |
소스코드 | https://github.com/wonhyeok1994/uArm_git_wonhyuk/tree/master/catkin_ws_for_uArm |
프로젝트하면서 공부한 부분 |
1 ROS 에 대한 내부 구성 및 동작을 좀 더 알게되었습니다. 메세지 전송 구조를 확실히 이해하는데 도움이 되었습니다. -. message 토픽을 service토픽처럼 사용 (코드 이미지) 장점 : ros 통신할 때 편의성 증대 프로젝트노트 : https://wonhyeok1994.tistory.com/9?category=1037019 2 robot_state_publisher 노드와 tf2패키지를 사용 robot_state_publisher노드 : 1. Parameter서버에 있는 param("robot_description")을 참조해 타겟urdf를 인식 2. joint_angle[0~9] 정보가 들어간 joint_state를 subcribe해 -> 로봇state를 tf2패키지에 publish 3 tf2 패키지 : 1. 시간순서에 따른 좌표 프레임을 추적. (실시간 갱신) 2. robot_state_publisher 에서 State_data를 tf2로 보내면 tf2를 사용하는 시스템의 모든 구성 요소에서 사용이 가능합니다. ( ex) 로봇 링크의 3D포즈_data를 tf2에서 가져와 rviz에 띄울 수 있음 ) 3. 이 패키지는 library와 ROS노드로 사용 할 수 있음 4 UART Serial 직렬통신의 특성 상 read/write를 동시에 할 수 없어 로봇에게 보낼 좌표값을 담당하는 writing 노드와 로봇의 현재 좌표값을 가져오는 reading노드를 구분함 1. 현재 위치를 모니터링하기 위해 상시 reading node를 수행 2. writing노드를 통해 키보드로 새로운 좌표값을 입력하는 것으로 구성 |
느낀점 | 개념들을 정리하면서 코드를 간략하게 만들어 내것으로 만든 후에 코드작성을 했습니다. 개념이 모호하고 이해하는데 시간이 오래 걸릴 거 같아 넘겼던 부분들 때문에 오히려 프로젝트를 하는데 크게 방해가 됬던 경우가 있었습니다. 여기서 느낀점은 개념에 대한 이해도에 따라서 프로그램작성에서 크고 작은 차이가 났었는데, 이런 부분들이 하나하나 쌓이면 문제가 커지는 것 같습니다. 프로그램을 작성하는 데에 있어서 쓰라고 나온 라이브러리나 알아야하는 개념들은 분명히 짚고 넘어가서 내것으로 만들어야 한다고 느꼇습니다. |
'프로젝트정리, uArm관련 > 학생플젝' 카테고리의 다른 글
자동화 물류 시스템 (0) | 2022.02.04 |
---|---|
mds2450보드를 이용한 그래프게임 (임베디드) (0) | 2022.01.23 |
댓글