ROS1の最新バージョンとROS2の最新バージョン、ros1_bridgeブリッジを試したいので、
MacbookProにUbuntu 18.04、ROS1 Melodic、ROS2 Dashingをインストールして見ました。
(VMではなく、直接MacbookProにインストールする理由は、パフォーマンスが速い)
Ubuntu16.04にROS2 Crystalをインストールは、こちら
ROSとOSの対応関係
UbuntuとROS1対応関係
Ubuntuバージョン | ROSバージョン | サポート期限 |
---|---|---|
14.04 | Indigo Igloo | 2019年5月 |
16.04 | Kinetic Kame | 2021年5月 |
18.04 | Melodic Morenia | 2023年5月 |
UbuntuとROS2対応関係
ROS2バージョン | リリース時期 | サポート期限 | サポートOSバージョン |
---|---|---|---|
Ardent Apalone | 2017/12 | 2018/12 | Ubuntu 16.04,Mac OS X 10.12 ,Windows 10 |
Bouncy Bolson | 2018/07 | 2019/07 | Ubuntu 18.04,Ubuntu 16.04 ,Mac OS X 10.12,Windows 10 |
Crystal Clemmys | 2018/12 | 2019/12 | Ubuntu 18.04,Ubuntu 16.04 ,Mac OS X 10.12,Windows 10 |
Dashing Diademata | 2019/05 | 2021/05 | Ubuntu 18.04,Mac OS X 10.12,Windows 10,Debian Stretch,OpenEmbedded Thud,webOS OSE |
#MacBookProにUbuntu 18.04をインストール
MacBookPro仕様
MacBook Pro 13 inch "Core i5" 2.6GHz Retina (Mid 2014)
Built-in Display | 13.3 |
---|---|
Processor Type | Core i5 (I5-4278U) |
Processor Speed | 2.6GHz |
Apple Model Number | A1502 (EMC 2875) |
Architecture | 64-Bit |
Model Identifier | MacBookPro11,1 |
Apple Subfamily | Retina Mid 2014 |
Standard RAM | 8GB |
Video Card | Iris 5100 |
UbuntuのイメージをUSBスティックに書き込む
- Ubuntu 18.04のデスクトップ版のイメージをダウンロード
- Etcherなどを使って、USBにその.isoファイルを書き込む
Ubuntuのインストール
- Ubuntu用パーティションを作成
- rEFIndをインストールしてMacOSとUbuntuデュアルブートできるように準備
- MacBookにUSBを挿した状態でoptionを押しながらMacBookを起動
- rEFIndの起動選択画面でUSBを選択
- Ubuntuの「Install Ubuntu」メニューよりインストール
Ubuntu「インストールの種類」画面の設定
- 「インストールの種類」画面で「それ以外」を選択
- Ubuntu用のパーティションを選択して「ext4」で初期化、マウントポイントを「/」に設定
- ブートローダインストールデバイスにUbuntu用パーティションを選択
- インストール開始
Ubuntuインストールの確認
該当ModelのMacBookProを再起動すると、
既にWiFi, Keyboard, Audio, Bluetooth, トラックパッドが正常に使用できます^-^。
*最新ModelのMacBook ProにUbuntuインストール場合の注意点
MacBook Pro "Core i5" 2.3 13-Inch
(Mid-2017 Retina Display, Two Thunderbolt 3 Ports)
(Apple Model Number: A1708 EMC 3164)
(Model Identifier: MacBookPro14,1)
の機種にUbuntu 16.04インストールには、
Keyboard & Touchpadは使用できない状態ですが(USBのmouseとKeyboard使用可能)、
インストール完了後、下記パッチを適用すると使えます。
https://github.com/Dunedan/mbp-2016-linux
https://github.com/cb22/macbook12-spi-driver
但し、Audio使用できない、USBのBluetoothを挿してBluetooth経由でAudioを使用する方法もあります。
Ubuntu 18.04にROS Melodicをインストール
PPAの追加
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
$ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
$ sudo apt update
ROSのインストール(melodic)
sudo apt install ros-melodic-desktop-full
Dependencies for building packages
sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
初期設定
$ sudo rosdep init
$ rosdep update
環境変数を追加
$ echo "source /opt/ros/melodic/setup.bash" >> .bashrc
ワークスペースの作成
$ source ~/.bashrc
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/
$ catkin_init_workspace src
$ echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
$ catkin_make && source ~/catkin_ws/devel/setup.bash
Ubuntu 18.04にROS2 Dashingをインストール
ROS1 起動環境のコメントアウト
.bashrcで設定したROS1の起動スクリプトをコメントアウトします。
# source /opt/ros/kinetic/setup.bash
# source ~/catkin_ws/devel/setup.bash
変更したスクリプトを適用します。
$ source ~/.bashrc
PPAの追加
$ sudo apt update && sudo apt install curl gnupg2 lsb-release
$ curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
$ sudo sh -c 'echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'
$ sudo apt update
ROSのインストール(Dashing)
$ sudo apt install ros-dashing-desktop
colcon build インストール
$ sudo apt install python3-colcon-common-extensions
ROS 2 command自動補完のインストール
$ sudo apt install python3-argcomplete
環境変数を追加
$ echo "source /opt/ros/dashing/setup.bash" >> ~/.bashrc
ワークスペースの作成
$ source ~/.bashrc
$ mkdir -p ~/ros2_ws/src
$ cd ~/ros2_ws
$ colcon build
$ echo "source install/local_setup.bash && source install/setup.bash" >> ~/.bashrc
動作テスト
1つ目のターミナルで1秒ごとにメッセージがpublish(送信)されます。
$ ros2 run demo_nodes_cpp talker
[INFO] [talker]: Publishing: 'Hello World: 1'
[INFO] [talker]: Publishing: 'Hello World: 2'
[INFO] [talker]: Publishing: 'Hello World: 3'
2つ目のターミナルで1秒ごとにメッセージがsubscribe(受信)されます。
$ ros2 run demo_nodes_cpp listener
[INFO] [listener]: I heard: [Hello World: 1]
[INFO] [listener]: I heard: [Hello World: 2]
[INFO] [listener]: I heard: [Hello World: 3]
ROS 1とROS 2のメッセージ通信
ROS 1とROS 2の通信プロトコルは全く違うので、直接繋がることはできません。
しかしROS 1にあってROS 2にないフィーチャーはまだたくさんあります。
ROS 1とROS 2は一緒に利用することが望ましいです。
この問題を解決するためにROS 2がros1_bridgeというプロトコル通訳用(「ブリッジ」)のパッケージを提供します。
ROS1 bridgeのインストール
$ sudo apt update
$ sudo apt install ros-dashing-ros1-bridge
ROS1 bridge 動作テスト
ROS 1を起動
Shell A (ROS 1 only):
$ source /opt/ros/melodic/setup.bash
$ roscore
ros1_bridgeを起動
Shell B (ROS 1 + ROS 2):
$ source /opt/ros/melodic/setup.bash
$ source /opt/ros/dashing/setup.bash
$ export ROS_MASTER_URI=http://localhost:11311
$ ros2 run ros1_bridge dynamic_bridge
[Shell D]を実行すると、下記メッセージが出る
created 1to2 bridge for topic '/chatter' with ROS 1 type 'std_msgs/String' and ROS 2 type 'std_msgs/msg/String'
created 2to1 bridge for topic '/rosout' with ROS 2 type 'rcl_interfaces/msg/Log' and ROS 1 type 'rosgraph_msgs/Log'
[INFO] [ros_bridge]: Passing message from ROS 1 std_msgs/String to ROS 2 std_msgs/msg/String (showing msg only once per type)
[INFO] [ros_bridge]: Passing message from ROS 2 rcl_interfaces/msg/Log to ROS 1 rosgraph_msgs/Log (showing msg only once per type)
removed 1to2 bridge for topic '/chatter'
removed 2to1 bridge for topic '/rosout'
ROS 1 talkerを起動
Shell C:
$ source /opt/ros/melodic/setup.bash
$ rosrun rospy_tutorials talker
[INFO] [1569430196.302879]: hello world 1569430196.3
[INFO] [1569430196.403099]: hello world 1569430196.4
[INFO] [1569430196.503039]: hello world 1569430196.5
ROS 2 listenerを起動
Shell D:
$ source /opt/ros/dashing/setup.bash
$ ros2 run demo_nodes_cpp listener
[INFO] [listener]: I heard: [hello world 1569430217.2]
[INFO] [listener]: I heard: [hello world 1569430217.3]
[INFO] [listener]: I heard: [hello world 1569430217.4]