Language
ROS에서 여러 노드들이 ros 메세지를 주고받기 위한 master의 위치를 지정하기 위해 ROS_MASTER_URI 를 설정하여야합니다. 보통 roscore가 실행되는 PC의 IP 주소라고 이해하면 됩니다. 자세한 내용은 다음 ROS wiki항목을 찾아보세요.
먼저 내 PC와 로봇에 할당된 IP주소를 확인하기 위해 ifconfig 명령을 입력합니다.
아래 내용중에 192.168.1.## 부분이 라우터에서 할당된 IP주소입니다.
HOSTPC:~$ ifconfig eno2: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 ether ##:##:##:##:##:## txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 367409 bytes 41452570 (41.4 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 367409 bytes 41452570 (41.4 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 wlo1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.25 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::d087:42:7297:6176 prefixlen 64 scopeid 0x20<link> ether ##:##:##:##:##:## txqueuelen 1000 (Ethernet) RX packets 700080 bytes 633470367 (633.4 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 269370 bytes 80942881 (80.9 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
로봇과 PC 모두 bashrc 파일에 들어가주세요~
해당 파일 맨 아래에 (nano 에디터의 경우 alt+/ 단축키 활용) 아래 이미지의 export 문구를 추가합니다.
또는 터미널에 다음을 입력합니다.
$ echo "export ROS_MASTER_URI=http://192.168.1.25:11311">>~/.bashrc $ echo "export ROS_HOSTNAME=192.168.1.25">>~/.bashrc
수정 된 bashrc 양 쪽 모두 source 해줍니다.
[내 PC] roscore를 실행합니다.
hostpc:~$ roscore
[로봇 w/ssh] sudo chmod 666 /dev/tty* 명령으로 권한을 설정해줍니다.
r1mini:~$ sudo chmod 666 /dev/tty*
omo_r1mini_node에서 지원하는 메세지와 서비스 목록은 다음 링크를 참조하시기 바랍니다.
[로봇 w/ssh] omo_r1mini_bringup.launch 파일을 실행합니다.
r1mini:~$ roslaunch omo_r1mini_bringup omo_r1mini_bringup.launch
[로봇 w/ssh] 이 후, 로봇을 실행하는 터미널에서 이런 결과가 출력 되어야 합니다.
아래는 여기까지 진행한 후 현재 터미널 상황이구요.
[내 PC] 다른 터미널을 하나 더 만들어줍니다.
[내 PC] rostopic list 명령으로 현재 publish/subscribe되는 메세지를 확인합니다.. (v는 발행 토픽과 구독 토픽을 정리하여 보여주는 옵션)
$ rostopic list -v
ROS의 service 기능을 사용하여 로봇에 특정한 명령을 내리거나 로봇의 상태를 요청할 수 있습니다. R1mini에서는 다음과 같은 서비스를 제공합니다.
rosservice list로 서비스 되는 명령들을 확인합니다.
$ rosservice list
R1mini의 RGB led 색상을 바꾸는 명령입니다.
$ rosservice call /set_led_color "red: 250 > green: 50 > blue: 50"
set_led_color 대신 save_led_color 명령을 보내면 색상 값이 eeprom에 저장되어 다시 부팅해도 동일한 색을 유지합니다.
$ rosservice call /save_led_color "red: 250 > green: 50 > blue: 50"
battery 상태를 확인하는 명령입니다.
$ rosservice call /battery_status "{}"
r1mini에 내장된 부저를 켜고 끄는 명령입니다.주의: 이 명령은 2021-12-1 배포된 펌웨어 V2.3부터 적용되었습니다. 펌웨어 업데이트 방법은 다음 문서를 참조하세요.catkin_ws/src/omo_r1mini 에서 git pull 명령으로 업데이트하시기 바랍니다.
$ rosservice call /set_buzzer "set: true" $ rosservice call /set_buzzer "set: false"
[로봇 w/ssh] omo_r1mini_bringup.launch를 실행합니다.
[내 PC] roslaunch omo_r1mini_teleop omo_r1mini_teleop_key.launch를 실행합니다.
hostpc:~$ roslaunch omo_r1mini_teleop omo_r1mini_teleop_key.launch
[내 PC] teleop을 실행한 터미널을 활성화 해두면 키보드로 로봇을 움직일 수 있습니다.
수행 데이터를 확인하게 해주는 odom이라는 토픽이 있습니다.
명령을 준 부분과 수행하는 부분의 데이터 값 얼추 비슷한 것을 확인할 수 있습니다.
(2021/11/18 버전 이후부터 적용됩니다.)
omo_r1mini_teleop_joy.launch 를 실행하면 xbox 타입의 조이스틱으로 로봇을 조종할 수 있습니다.
패키지 설치를 위해 다음을 입력합니다.
hostpc:~$ sudo apt-get install ros-melodic-joy
이 패키지를 실행하기 위해서는 joy_node가 정상적으로 동작해야 합니다.터미널에 아래와 같이 입력하여 joy_node를 실행합니다.
$ roscore $ rosrun joy joy_node [ WARN] [1637499930.032725636]: Couldn't set gain on joystick force feedback: Bad file descriptor [ INFO] [1637499930.035251970]: Opened joystick: /dev/input/js0. deadzone_: 0.050000.
이제 joy 토픽을 읽어서 조이스틱 입력이 제대로 받아지는지 확인합니다.
$ rostopic echo joy header: seq: 224 stamp: secs: 1637499947 nsecs: 376515561 frame_id: "/dev/input/js0" axes: [-0.0, -0.0, -0.0, -0.0, 0.0, 0.0] buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ---
모든 입력이 정상적이라면 cntrl+c 키를 눌러 joy_node를 중지하고 r1mini_bringup과 teleop_joy.launch를 실행합니다.
omo_r1mini_teleop 패키지의 omo_r1mini_teleop_key.py 노드는 joy message를 subscribe하고 스틱입력과 버튼에 따라 /cmd_vel 메세지를 만들어 publish합니다.
r1mini:~$ roslaunch omo_r1mini_bringup omo_r1mini_bringup.launch hostpc:~$ roslaunch omo_r1mini_teleop omo1mini_teleop_joy.launch
이제 조이스틱 조작을 통해 r1mini 로봇을 조종할 수 있습니다.아래 그림은 조이스틱 명령으로 조작할 수 있는 항목을 표현한 것입니다.
조이스틱이 동작하지 않습니까?
/dev/input/js0 를 찾을 수 없는 경우 알맞는 joystick 드라이버가 설치되지 않은것일 수 있습니다.다음과 같이 입력하여 /dev/input에 어떠한 장치가 추가되었는지 확인해보세요.
$ ls /dev/input/
다음과 같은 목록이 나타나는지 확인합니다.
by-id event11 event16 event20 event25 event3 event6 mice by-path event12 event17 event21 event26 event30 event7 mouse0 event0 event13 event18 event22 event27 event31 event8 mouse1 event1 event14 event19 event23 event28 event4 event9 mouse2 event10 event15 event2 event24 event29 event5 js0
만약 js0 등이 나타나지 않으면 xboxdrv를 설치해봅니다.
$ sudo apt-get install xboxdrv
그리고나서 해당 서비스를 실행합니다.
$ sudo systemctl enable xboxdrv.service $ sudo systemctl start xboxdrv.service
캘리브레이션이 잘못된 경우 jstest-gtk 를 설치하여 조정할 수 있습니다.다음과 같이 입력하여 패키지를 설치합니다.
$ sudo apt install jstest-gtk
윈도우 키를 입력하고 jstest를 실행하면 다음과 같은 화면이 나타납니다.
Properties를 선택하면 캘리브레이션 화면으로 이동합니다.다음 화면에서 스틱 입력과 버튼을 캘리브레이션할 수 있습니다.