Ros2 and Ros1 bridge

Jufeng Wu, 25 October 2019


今天要寫的是ROS2和ROS1之間的bridge
也就是把ROS2的訊號跟ROS1互相對傳

作法很簡單,然而要注意一件事情,default的bridge只接受ros2的基礎資料傳送
詳細可以看這裡

這是啥意思?範里裡面的打開talker.cpp我們可以看到他include的是#include "std_msgs/msg/string.hpp"
這一個msg就是在ros2的基礎資料裡面
如果要送自定義(custom)的msg,必須要在額外build bridge,詳細可以看這裡

じゃ、始めましょう!

  1. 首先先開啟第一個terminal,然後下
    . /opt/ros/melodic/setup.bash
    roscore
    

    這樣ros1的主要的server就打開了

  2. 接下來,開第二個terminal,然後下
    . /opt/ros/melodic/setup.bash
    . /opt/ros/dashing/setup.bash
    export ROS_MASTER_URI=http://localhost:11311
    ros2 run ros1_bridge dynamic_bridge __log_disable_rosout:=true
    

    這樣,ros2和ros1的bridge就打開了
    那位啥要加上 __log_disable_rosout:=true,因為目前我測試的docker中的bridge在log紀錄上,好像有一些問題,所以可以加這一個先避開
    但是我在桌機上測試又OK?這真是怪阿?看來又可以去寫問題了

  3. 然後,開啟第三個terminal,然後下
    . /opt/ros/melodic/setup.bash
    rosrun rospy_tutorials listener
    

    這樣,ros1就開始聽ros2的東西了

  4. 最後,開啟第四個terminal,然後下
    ``` . /opt/ros/dashing/setup.bash

``` 這時候就會看到ros2傳東西給ros1聽

以上

有一些國外的網站寫到,建議我們玩ros2
然而因為ros2的東西還不完整,所以建議當下除了ros2之外要再加上和ros1的bridge跟ros1一起cowork
所以bridge很重要!