여러 네트워크를 통한 ROS 네트워크 구축 메모

개요



최근 연구실에서 "모션 캡처로 로봇의 움직임을 추적하여 그 데이터와 로봇상의 LiDAR의 데이터를 바탕으로 실시간으로 로봇을 동작시킨다"가 필요했다. 여러 네트워크를 가로질러 ROS를 작동시킬 필요가 있었지만, 당연한 것인지, 단순히 아무도 하려고 하지 않는지, 조사해도 정확히 같은 일을 하려고 하는 예가 발견되지 않고 약간 고전 그래서 메모 해 둡니다. 또한 문장 중에 등장하는 ip 주소 등은 실물과 다릅니다.

조건


  • 로봇에는 PC1(Ubuntu 16.04LTS)이 탑재되어 있어, 이더넷의 포트가 1개(enp3s0) 있는 것 외에 wifi(wlp112s0)를 이용할 수 있다. 이더넷 측은 고정 IP 주소가 설정되어 있습니다 (192.168.0.100). 이 ip 주소는 변경하지 않습니다
  • 로봇에는 LiDAR이 1대 탑재되어 있으며, 로봇의 이더넷 포트에 LAN 케이블 1개로 접속되어 있다. ip 주소는 192.168.0.110이며이 ip 주소는 변경하지 않습니다
  • 모션 캡처는 이더넷 허브를 통해 PC2 (Ubuntu 16.04LTS)에 연결됩니다. PC2에는 ehternet 포트가 하나 (enp4s0) 있고 wifi (wlp114s0)도 사용할 수 있습니다. 이더넷 측은 고정 IP 주소가 설정되어 있습니다 (192.168.10.200). 이 ip 주소는 변경하지 않습니다
  • PC1과 PC2는 무선으로 직접 (시판의 wifi 액세스 포인트 등을 통하지 않고) 접속하고 싶다.

    그림으로 나타내면 이런 느낌이 듭니다.


    절차



    연결



    우선 PC1과 PC2를 wifi로 접속하기 위해 Ubuntu16.04의 액세스 포인트을 참고로 PC2를 액세스 포인트로 했다. PC1을 연결하면 새로운 네트워크 (10.42.0.0/24)가 만들어졌습니다.

    PC1의 wifi 측 ip 주소는 10.42.0.100으로 고정했습니다.
    이제 연결 자체를 만들었지만 각 네트워크 간의 핑은 아직 통과하지 못했습니다.

    이하, 여러 네트워크를 통한 통신을 수행하는 환경을 간편하게 작성 을 참고로, 설정을 진행해 갑니다.

    ip 포워딩



    두 PC에서 ethernet, wifi의 각각에 오는 패킷을 다른 쪽에 흘려 주었으면 하므로, ip 포워딩의 설정을 실시합니다.
    # iptableの設定を削除(共通.不要?)
    $ iptables -t nat -F
    $ iptables -F
    
    # 双方向のipフォワーディングを設定(PC1)
    $ iptables -A FORWARD -i enp3s0 -o wlp112s0 -j ACCEPT
    $ iptables -A FORWARD -o enp3s0 -i wlp112s0 -j ACCEPT
    
    # 双方向のipフォワーディングを設定(PC2)
    $ iptables -A FORWARD -i enp4s0 -o wlp114s0 -j ACCEPT
    $ iptables -A FORWARD -o enp4s0 -i wlp114s0 -j ACCEPT
    

    라우팅 테이블 설정



    두 PC에서 게이트웨이를 설정하여 다른 PC의 이더넷 네트워크에 액세스 할 수 있습니다.
    # PC1
    $ ip route add 192.168.10.0/24 via 10.42.0.1 dev wlp112s0
    # PC2
    $ ip route add 192.168.0.0/24 via 10.42.0.100 dev wlp114s0
    

    이제 상대 PC의 이더넷 네트워크에 액세스 할 수 있습니다.

    확인



    두 PC의 ROS_MASTER_URI를 PC2로 설정합니다.
    $ export ROS_MASTER_URI=http://192.168.10.200:11311
    

    ROS_IP도 설정합니다.
    # PC1
    $ export ROS_IP=192.168.0.100
    # PC2
    $ export ROS_IP=192.168.10.200
    

    PC2에서 roscore를 기동해, rostopic pub/echo등으로 소통을 확인할 수 있으면, 성공입니다.

    비고



    이번에는 Ubuntu의 액세스 포인트화를 GUI로 실시했습니다만, 이 방법이라고 IEEE802.11g로의 접속이 되고 있는 것 같고, 조금 속도에 불안이 있습니다(PointCloud의 교환에도 붙어 있는 모습.tf도 수상한). 어쩌면 통신 속도에 기인하는 것은 아닐지도 모릅니다만, create_ap를 사용하면 IEEE802.11ac를 사용할 수 있는 것 같기 때문에, 어쨌든 시도해 보겠습니다.
  • 좋은 웹페이지 즐겨찾기