본문 바로가기

기계공학부 시절의 기록/ROS일기47

while문 반복 주기 확인하기 ROS를 통해 로봇팔의 경로를 text파일로 저장하는 함수를 while문안에서 실행하였다. 이 때 얼마의 주기로 기록되는지를 파악하여야 할 일이 있었다. while문 들어가기 직전과 직후의 시간을 각각 구하여 차이를 구할 수 있었다. https://hijuworld.tistory.com/1 C, C++ 프로그램 실행 시간 측정 프로그래밍을 하다보면 딜레이가 발생하거나해서 어느 부분이 느린지 알아내야 하는 경우가 생길 수 있습니다. 또는 알고리즘을 공부하다보면 내가 구현한 알고리즘의 속도를 알고싶을 때가 hijuworld.tistory.com 블로그에서는 1clock이 1ms라고 나와있었는데 나의 경우 0.001 ms로 나타났다. 2021. 11. 18.
결과데이터 그래프화하기 텍스트 파일로 저장된 경로데이터를 그래프로 나타내기 위해서 파이썬을 활용할 수 있다. https://techreviewtips.blogspot.com/2017/11/04-05.html subplot에서 범례 추가하기 https://stackoverflow.com/questions/59346731/no-handles-with-labels-found-to-put-in-legend 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 import matplotlib.pyplot as plt import numpy as np data = np.loadtxt('make_gra.. 2021. 11. 17.
vector error : out of range robot의 trajectory값이 저장된 txt파일에서 각 열의 데이터를 vector로 저장하고 해당 벡터를 main()에서 while구문으로 불러와 controller에 해당 joint값을 넘겨주는 코드를 만들고 있다. 해당 에러는 vector에서의 값을 순서대로 joint로 할당할 때, 해당 vector의 마지막 원소를 넘었거나, txt파일이 비어있어 joint로 넘겨줄 데이터가 없을 때 발생하였다. 본 에러가 발생하는 이유는 벡터에서 특정 값을 호출할 때, 호출된 벡터가 끝났거나 비어 있어 호출할 수 있는 값이 없기 때문이다. (참고글) if 구문과 vector.size()함수를 활용해 벡터의 size보다 더 큰 수로 벡터를 호출하면 함수를 return시키는 방법으로 해결할 수 있었다. 2021. 11. 13.
캘리브레이션(Calibartion) 기능 추가 지난 글에서 myo를 착용한 팔의 움직임을 추종하는 작업을 완료하였다. 또, 주먹을 쥠에 따라 그리퍼가 닫히고 손가락을 모두 폄에 따라 그리퍼가 열리는 기능도 추가하였다. Myo로 OpenManipulator 동작시키기 성공!!! 구동영상 최대한 단순하게 코드를 작성하였다. myo_raw/myo_ori 토픽에서 생성되는 데이터를 봤을 때, (https://needs-searcher.tistory.com/196?category=885778참고) 먼저 로봇컨트롤러에서 모든 모터각 = 0으로.. needs-searcher.tistory.com 한 가지 문제점은 센서를 착용할 때마다 센서가 인식하는 roll=pitch=yaw=0의 초기위치가 다르다는 점이다. myo를 다시 착용했을 때 똑같이 정면으로 팔을 뻗어.. 2021. 11. 3.
Myo로 OpenManipulator 동작시키기 성공!!! 구동영상 최대한 단순하게 코드를 작성하였다. myo_raw/myo_ori 토픽에서 생성되는 데이터를 봤을 때, (https://needs-searcher.tistory.com/196?category=885778참고) 먼저 로봇컨트롤러에서 모든 모터각 = 0으로 초기자세를 잡은 뒤 myo에서 생성되는 roll, pitch, yaw값을 그대로 모터각으로 전달하면 쉽게 구현할 수 있겠다고 생각하였다. 하지만 센서장착 후 팔을 정면으로 뻗었을 때, 장착할 때마다 roll, pitch, yaw값이 조금씩 다르다는 단점이 있다. (대부분의 경우 정면으로 팔을 뻗었을 때 roll = pitch = yaw = 0가 된다.) 그래서 1. teleop노드를 실행했을 때, 즉시 로봇이 초기자세(모든 모터각 = 0)를 잡게 .. 2021. 10. 28.
또다시 포트연결문제 발생 : ttyACM0 -> ttyACM1 문제원인 myo 센서 블루투스 usb동글과 OpenManipulator의 컨트롤러가 같은 포트(/dev/ttyACM0)에 연결시도를 함에 따라 모두 연결실패메시지 발생. 해결방법 다행히 내가 사용하는 노트북에 두개의 usb포트가 존재한다. OpenManipulator컨트롤러의 연결 포트를 /dev/ttyACM1으로 변경. 변경방법 총 2개의 파일에 포트명지정 구문이 존재하며 터미널창에서 포트명지정이 수행된다. 따라서 이 3가지에 대해 포트명을 수정하면 된다. 또, OpenCR을 arduino프로그램으로 펌웨어 업데이트가 가능한데 이 때 포트 선택을 /dev/ttyACM1으로 수행한다. 즉, 총 4가지를 수행하여야 한다. 1. open_manipulator_controller.cpp 파일에서 포트명 수정 .. 2021. 10. 27.
Myo센서에서 Orientation의 의미 코드상에서는 roll, pitch, yaw값을 의미한다고 되어있다. 축의 회전값? 회전된 값을 어떻게 나타낸 것일까. 더 자세히 실험을 통해 어떤 데이터인지 확인해보았다. 그 결과 특정 위치에서의 myo 기준축(roll = 0, pitch = 0, yaw = 0)으로 두고 회전각을 나타내었다. 또, 이 기준축은 센서를 새롭게 킬 때마다 조금씩 달라짐을 확인하였다. 따라서 똑같은 동작을 하고 있더라도 myo를 킬 때마다 myo에서 보내는 orientation값은 달라진다. [팔 정면방향으로 뻗음] x = y = z = 0 [오른쪽으로] x (roll값)가증가 [왼쪽으로] x(roll값) 감소 [아래쪽으로] y(pitch값) 증가 이를 바탕으로 myo의 어떤 움직임에 myo_ori값이 어떻게 변하는지 정리하.. 2021. 10. 27.
명령어모음 및 1차 수정코드(open_manipulator_teleop_keyboard) 백업 차원으로 현재까지 수정한 코드를 백업하고 노드실행에 필요한 명령어들을 기록해 편리하게 이용하기 위해서 수정진행중인 코드와 필요한 명령어들을 기록하였다. 그리고 아직 수정된 코드들은 동작하지 않는다. 이에 대해서는 앞으로 찾아보고 수정해 나가야 한다. 이에 대해 앞으로 포스팅할 것이다. 수정된 코드 실행 후 내용 추가) 포트명을 수정하고 모든 노드들을 실행시켰을 때, 뭔가 팔의 움직임에 따라 로봇팔의 움직임도 변화함을 확인하였다. 하지만 좀 랜덤한 방향으로 움직인다. 그리고 open_manipulator_teleop_keyboard 터미널에서 1 or 2 숫자키를 눌렀을 때만 로봇팔이 동작하였다. 코드를 더욱 정교하게 수정하여야 한다. 명령어들 1. myo launch roslaunch ros_myo.. 2021. 10. 27.
open_manipulator_teleop.cpp 코드수정을 위한 코드공부(ros::spin, 클래스 접근지정, vector, 포인터) 어제 myo센서에서 생성되는 토픽을 오픈매니퓰레이터의 teleop노드에서 subscribe하도록 코드를 만들었다. teleop노드가 헤더파일과 cpp파일로 나뉘어있고 나는 c++언어를 잘 모르기에 어려움이 있었다. 다하고보니 별거 없었다. myo데이터 수신하는 subscriber open_manipulator_teleop.cpp에 만들기 https://needs-searcher.tistory.com/192?category=885778 myo로 publish, teleop로 subscribe 확인 도움이 된 글 https://cafe.naver.com/openrt/18408 ros에서 pub되는 msg가 배열인데 이거 통째로 어떻게 sub받나요??? 질문양식[개발환경] (옵션)1) 운영체제 :우분투 16,.. 2021. 10. 27.
myo와 teleop 사이의 Topic 통신 확인 도움이 된 글 https://cafe.naver.com/openrt/18408 ros에서 pub되는 msg가 배열인데 이거 통째로 어떻게 sub받나요??? 질문양식[개발환경] (옵션)1) 운영체제 :우분투 16, 로스 키네틱2) 보드이름 : 3) 컴파일러 : C++4) 버전정보 : 5) 참고강좌 : [현재상황] (필수)1) 목적... cafe.naver.com 1. 어떤 데이터를 통신하는지 다시 확인 2. 해당토픽이 어떤 형식의 데이터를 쓰는지 확인 3. cpp 파일에서 1) subscriber 구현함수아래에 myo_ori데이터 받을 sub 만들 코드 추가 myo_imu_sub_ = node_handle_.subscribe("토픽명", 큐사이즈, &클래스명::콜백함수명, this); 2) 콜백함수 구현 .. 2021. 10. 25.
이기종간 ROS통신(matlab과 ROS 연결) 노트북 = 우분투PC 데스크탑 = 윈도우PC 연구실에 있는 나의 메인 PC(window10 환경)의 matlab에서 myo emg 데이터를 실시간으로 읽고 저장하여 이를 통해 동작 학습을 하는 과정을 연구실 선배에게 배웠다. 이를 현재 진행 중인 프로젝트의 중심인 ROS시스템 구성으로 가져오는 것이 이제 나의 역할이다. matlab을 윈도우PC에서 돌리고 이를 우분투PC에 ROS통신방법으로 통신하는 방법과 아예 matlab을 우분투PC에서 설치해 진행하는 방법으로 나누어 생각하였다. 오늘 진행해 본 것은 matlab과 ROS간의 통신이다. 결과적으로 다른 PC간의 통신, 하나의 PC안에서 matlab과 ROS간의 통신이 모두 가능함을 확인하였다. 우분투 PC에서의 matlab과 ROS간의 통신이 가능함은.. 2021. 10. 14.
matlab install in Ubuntu 18.04 & communication with ROS 1. openmanipulator teleop key 코드 수정 : 진행 중 2. matlab 상에서 구현된 동작 분류기를 ROS에서 활용방법 찾기 https://robotbef.tistory.com/113 ROS는 우분투에서 구동. 매트랩도 우분투에서 구동해야할듯. (Today)** 우분투에서 매트랩 설치필요 3. myo_raw에서 matlab으로 데이터 전송하기 myo_raw에서 생성하는 토픽, matlab에서 subscribe 시키기 우분투에서 matlab설치 매트랩 홈페이지에서 계정확인을 하고 압축된 설치파일을 다운로드 한다. [압축파일 다운로드] # unzip -X -K matlab_R20xxx_glnxa64.zip -d matlab_20xxx_installer 이후 블로그(https://lik.. 2021. 10. 13.