다양한 상황에서 노드 통신

BERT·2023년 4월 1일
0

ROS

목록 보기
6/23

노드간 동기화 문제 해결

xycar_ws
├ src
│  └ msg_send
│    ├ src 
│    │ ├ sender_serial.py
│    ├ └ receiver_serial.py
│    ├ launch
│    ├ └ sr_serial.launch
│    ├ CMakeList.txt
│    └ package.xml
├ build
└ devel

roscore
rosrun msg_send sender_serial.py
rosrun msg_send receiver_serial.py

Sender가 보낸 1이 없음

실질적인 통신구축에 지연시간 존재

get_num_connections()
Subscriber 연결 확인

1:N 통신

subscriberNum으로 subscriber가 수신될 동안 대기

while pub.get_num_connections() < subscriberNum:
    time.sleep(1)

데이터 크기에 따른 전송속도

xycar_ws
├ src
│  └ msg_send
│    ├ src 
│    │ ├ sender_speed.py
│    ├ └ receiver_speed.py
│    ├ launch
│    ├ └ sr_speed.launch
│    ├ CMakeList.txt
│    └ package.xml
├ build
└ devel

처리 지연 문제

xycar_ws
├ src
│  └ msg_send
│    ├ src 
│    │ ├ sender_overflow.py
│    ├ └ receiver_overflow.py
│    ├ launch
│    ├ └ sr_overflow.launch
│    ├ CMakeList.txt
│    └ package.xml
├ build
└ devel

rospy.Rate(N)의 N이 커졌을 때

queue_size를 늘리면 버퍼링 덕분에 손실없이 콜백 수행

타임 슬롯 문제

xycar_ws
├ src
│  └ msg_send
│    ├ src 
│    │ ├ sender_timeslot.py
│    ├ └ receiver_timeslot.py
│    ├ launch
│    ├ └ sr_timeslot.launch
│    ├ CMakeList.txt
│    └ package.xml
├ build
└ devel

job이 단위 타임 슬롯보다 커지는 경우

1초에 job 5번 수행

job의 양이 많아질수록 sleep time이 줄고 spend time이 커짐
job이 0.2초를 넘으면 sleep time이 0이 되고 total time이 1초를 넘어감

노드의 순차 실행

xycar_ws
├ src
│  └ msg_send
│    ├ src 
│    │ ├ first.py
│    │ ├ second.py
│    │ ├ third.py
│    │ ├ fourth.py
│    ├ └ receiver.py
│    ├ launch
│    ├ └ sr_order.launch
│    ├ CMakeList.txt
│    └ package.xml
├ build
└ devel

/receiver

start_ctl 토픽으로 1초에 간격으로 각 노드에 first:go second:go third:go fourth:go 송출
msg_to_receiver 토픽을 받을 대기 상태 유지
받으면 callback 호출 후 터미널에 출력

/first /second /third /fourth

while문에서 start_ctl 토픽이 입력되어 ctl_callback 호출 후 OK변수에 데이터 입력될 때까지 대기
입력받은 후 while문 탈출
msg_to_receiver 토픽에 this is name 메시지 담아 송출

0개의 댓글