티스토리 뷰
0. 개요

공인 IP는 전 세계에서 하나뿐인 IP주소.
사설 IP는 공유기 안의 주소.
사설IP를 가지고 있는 여러 장치를 "포트 포워딩"을 이용하여 연결한다.
teacher에 대해서 1024~65000 범위 내의 포트로 포트 포워딩.
1. 공유기 포트 포워드 설정
인터넷 창을 켜서 http://192.168.0.1 로 접속한다. 로그인, 관리도구로 들어간다.
비밀번호를 모르면 나와있는 디폴트값으로 먼저 시도, 안되면 아빠한테 물어봐야..

고급 설정 - NAT/라우터 관리 - 포트포워드 설정 탭에 들어간다.
아래와 같이 규칙을 작성하고 적용을 누르면

내부 IP주소가 잘못되었다고 한다.
ifconfig를 실행했을 때 나오는 주소였는데, 어떻게 해야할지 모르겠어서
현재 접속된 IP주소 박스를 체크하였다.

적용했더니 아래와 같이 적용되었다.

나갈 때 꼭 저장을 눌러주어야 한다.
2. /etc/hosts 파일 수정
/etc/hosts 파일을 열어서 아래를 추가한다.
192.168.0.12 는 내 PC의 IP주소임. 각자 자신의 컴퓨터의 IP주소를 입력하면 된다.
106.244.165.6 은 원격 공유기의 IP주소이다.
# remote network: Portable ISP routers
192.168.0.12 local
106.244.165.6 sevencore-E8410TM

teacher측 (=원격 서버)에서도 아래와 같이 /etc/hosts 파일을 열어 다음과 같이 수정해야 한다.
공유기_주소 컴퓨터_이름

3. ROS 환경변수 설정
~/.bashrc 파일을 열어서 아래와 같이 수정한다.
export ROS_MASTER_URI=http://106.244.165.6:11311
#export ROS_HOSTNAME=localhost

ROS_MASTER_URI : 공인 IP(=즉 공유기)의 IP주소를 입력해야 한다.
~/.bashrc파일을 열어서 아래의 내용으로 수정한다.
export ROS_MASTER_URI=roscore가 구동되는 장치(Xycar)의 IP주소:포트번호
export ROS_HOSTNAME=내 PC/노트북의 IP주소
내 PC/노트북의 IP주소는 아래 명령어로 알 수 있다.
ifconfig

나의 실습의 경우,
ROS_MASTER_URI=http://106.244.165.6:11311
으로 진행하였다.,
수정한 내용을 시스템에 반영하기 위해 아래 명령어 실행.
source ~/.bashrc

4. 실행 테스트
보내는 쪽에서는 아래와 같이 실행을 하고
rostopic pub /chatter std_msgs/String hello

받는 쪽에서는 아래와 같이 실행을 하면 된다.
rostopic echo /chatter
나는 실패..
아마도 IP주소 때문인 것 같다.
내 질문은 아니었지만,

나도 같이 이유일 수 있어 아래와 같이 설정을 변경하였다.

ifconfig명령어를 실행하였더니 아래와 같이 ip주소가 바뀌었다.

1번부터 다시 반복. 포트포워드의 규칙에서 내부 IP주소 192.168.0.24로 수정.
2번에서도 /etc/hosts 파일의 내 IP주소 192.168.0.24로 수정.
3번은 그대로.
그러나 여전히 실행이 안된다.

일단은 재부팅.
다시 실행해봤지만 여전히 안된다.
알고보니 아직 서버쪽에서 roscore 구동을 하지 않은 상태라고 한다.

내 IP주소 확인
네이버에 내 IP검색하면 된다.

아래 명령어로 호스트네임을 확인할 수 있다.
uname -n
그리고 아래 명령어로 hostname을 변경할 수 있다.
변경 후 화면이 깔끔해져서 맘에 든다.
hostnamectl set-hostname {바꾸고 싶은 hostname 명}

이 두개 정보(IP주소, 호스트네임)를 받아서 서버에서 저장해야 한다.
~/xycar_ws/src/msg_send/src 에 remote_student.py 파일을 아래와 같이 작성한다.
#!/usr/bin/env python
import rospy
from msg_send.msg import my_msg
from std_msgs.msg import String
done = False
first_name = 'Gil-Dong'
last_name = 'Hong'
def call_back(data):
msg = data.data
#print(first_name + ' ' + last_name)
#if (last_name+' '+first_name in msg):
# print(msg)
#else:
# print("waiting")
print(msg)
done = True
rospy.init_node('remote_student', anonymous=True)
pub=rospy.Publisher('msg_to_xycar', my_msg, queue_size=1)
rospy.Subscriber('msg_from_xycar', String, call_back)
rate = rospy.Rate(0.5)
msg = my_msg()
msg.first_name = first_name
msg.last_name = last_name
msg.age = 25
msg.score = 100
msg.id_number = 12345678
msg.phone_number = "010-7777-7777"
while not rospy.is_shutdown() and not done:
pub.publish(msg)
print("sending message...")
rate.sleep()

rosrun msg_send remote_student.py
실행하면 아래와 같은 결과가 뜬다.

'ROS' 카테고리의 다른 글
| Ubuntu16.04 ROS Kinetic - 통신4) 타임슬롯 문제 (0) | 2020.12.28 |
|---|---|
| Ubuntu16.04 ROS Kinetic - 통신3) 처리 지연 문제 (0) | 2020.12.28 |
| Ubuntu16.04 ROS Kinetic - 통신1) 노드간 동기화 문제 (0) | 2020.12.24 |
| Ubuntu16.04 ROS Kinetic - 커스텀메시지로 통신 (0) | 2020.12.23 |
| Ubuntu16.04 ROS Kinetic - turtlesim 8자 주행 답안 (0) | 2020.12.23 |
- Total
- Today
- Yesterday
- Ubuntu20.04
- Python
- HC-SR04
- 아두이노 IDE
- 윈도우 복구
- sensehat
- 우분투
- python3
- 윈도우
- VirtualBox
- 코드리뷰
- filesystem
- subscriber
- 8자주행
- Ubuntu16.04
- VMware
- 원격 통신
- ROS
- Mount
- Publisher
- set backspace
- 프로그래머스
- roslaunch
- vue/cli
- 포트인식문제
- C++
- 초음파센서
- 리눅스
- 백준알고리즘
- umount
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
