본문 바로가기
프로젝트정리, uArm관련/학생플젝

ros_Arm 구현

by 알 수 없는 사용자 2022. 1. 23.

 로봇 arm 기능 구현

프로젝트명 로봇 arm 제어 , 개인프로젝트
프로젝트 소개 및 구성
터미널창을 이용해 로봇ARM 제어

물류자동화시스템을 구현하기 위해서 핵심기능들을 구현하려고 로봇arm을 빌려 개인적으로 프로젝트를 진행했고, 로봇arm에서 가장 중점이 되는 기능들을 먼저 구현했습니다.
Arm과 컴퓨터 통신 방식은 _serial 통신(usb)을 이용 했고, 각 노드 별 통신은 ROS의 message토픽을 이용했습니다.
나중에 물류자동화 시스템을 구성하는 프로젝트를 할 때 유동적으로 사용 할 수 있게 각 노드별로 섹터를 나누어 동작하게 했습니다.


노드 구성도 . ( rqt_graph )  o : node , ㅁ : topic

1.
  pose_node :
사용자에게 data(좌표,그리퍼동작)를 받아 동작노드에 데이터를 publish합니다


2.
moveit_node :
data를 subscribe해 fk함수를 통해 좌표값을 로봇이 사용할 수 있게 가공해 publish 해줍니다


3.
  write_node :
각 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노드를 통해 키보드로 새로운 좌표값을 입력하는 것으로 구성

느낀점 개념들을 정리하면서 코드를 간략하게 만들어 내것으로 만든 후에 코드작성을 했습니다.
개념이 모호하고 이해하는데 시간이 오래 걸릴 거 같아 넘겼던 부분들 때문에 오히려 프로젝트를 하는데 크게 방해가 됬던 경우가 있었습니다. 

여기서 느낀점은 개념에 대한 이해도에 따라서 프로그램작성에서 크고 작은 차이가 났었는데, 이런 부분들이 하나하나 쌓이면 문제가 커지는 것 같습니다.
프로그램을 작성하는 데에 있어서 쓰라고 나온 라이브러리나 알아야하는 개념들은 분명히 짚고 넘어가서 내것으로 만들어야 한다고 느꼇습니다.

 

 

 

 

 

댓글