ROSをWindowsのWSL2にインストールするメモ
LinuxやROSのことを何も知らなかったのでいろいろつまづいたメモ。
簡単にまとめるとよく分からずにUbuntu 20を入れたらいろいろつまづいて、結局Ubuntu 18を入れて、最終的にはセキュリティソフトのESETのポート開放をして何とかなったという話。
基本的には以下のサイトをベースに進める。
1. WSL2のインストール
「【ROS/Unity/WSL】Windows上でmyCobotをROSとUnity上で動かす」に沿って、以下のサイトを参考にした。
2. ROSのインストール
こちらも「【ROS/Unity/WSL】Windows上でmyCobotをROSとUnity上で動かす」に沿って進めた。
つまづいたポイント
apt updateでTemporary failure resolving...というエラーが出た
上記のサイトをもとに以下を実行したところ解決した
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
もっとも Google DNS の利用はこういったトラブルシューティング時のみに留めておくのが良いとは思いますが
とのことらしい。
rosのインストールでE:Unable to locate package...というエラーがでた
「【ROS/Unity/WSL】Windows上でmyCobotをROSとUnity上で動かす」に沿ってsudo apt install -y ros-melodic-moveit
をしたところE:Unable to locate package...
というエラーが発生した。
いろいろ調べてみるとUbuntuのバージョンによってROSの種類が異なるようだ。
Ubuntuのバージョンを調べるには以下のコマンドを入力
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.4 LTS
Release: 20.04
Codename: focal
その結果Ubuntu 20だったのでros-melodicではなくros-noeticでないといけないと分かった。
ということで以下のコマンドでいけた。
$ sudo apt install -y ros-noetic-moveit
$ sudo apt install -y ros-noetic-ros-control ros-noetic-ros-controllers
$ sudo apt install -y ros-noetic-gazebo-ros
$ sudo apt install -y ros-noetic-jsk-rviz-plugins
### catkin buildしようとするとcatkin: command not foundというエラーがでた
「【ROS/Unity/WSL】Windows上でmyCobotをROSとUnity上で動かす」に沿って以下のコマンドを順に入力したら最後のcatkin build
で catkin: command not found
と言われた。
$ cd ~/catkin_ws/src
$ git clone https://github.com/Tiryoh/mycobot_ros
$ git clone -b fix_gazebo https://github.com/karaage0703/mycobot_moveit
$ catkin build
こちらのサイトを参考に進めた。
以下のコマンドを入力。
sudo apt install python3-osrf-pycommon python3-catkin-tools
再びcatkin build
すると
[build] Error: Unable to find source space `/home/miyano-yuji/catkin_ws/src/src`
と言われたので、cd ..
で階層を1上げて再びcatkin build
した。
なんかめっちゃ言われた。
----------------------------------------------------------------
Profile: default
Extending: None
Workspace: /home/miyano-yuji/catkin_ws
----------------------------------------------------------------
Build Space: [exists] /home/miyano-yuji/catkin_ws/build
Devel Space: [exists] /home/miyano-yuji/catkin_ws/devel
Install Space: [unused] /home/miyano-yuji/catkin_ws/install
Log Space: [missing] /home/miyano-yuji/catkin_ws/logs
Source Space: [exists] /home/miyano-yuji/catkin_ws/src
DESTDIR: [unused] None
----------------------------------------------------------------
Devel Space Layout: linked
Install Space Layout: None
----------------------------------------------------------------
Additional CMake Args: None
Additional Make Args: None
Additional catkin Make Args: None
Internal Make Job Server: True
Cache Job Environments: False
----------------------------------------------------------------
Whitelisted Packages: None
Blacklisted Packages: None
----------------------------------------------------------------
NOTE: Forcing CMake to run for each package.
----------------------------------------------------------------
----------------------------------------------------------------
WARNING: Your workspace is not extending any other result
space, but it is set to use a `linked` devel space layout. This
requires the `catkin` CMake package in your source space in
order to be built.
----------------------------------------------------------------
[build] Found '5' packages in 0.0 seconds.
[build] Updating package table.
Starting >>> catkin_tools_prebuild
_______________________________________________________________________________________________________________________
Errors << catkin_tools_prebuild:cmake /home/miyano-yuji/catkin_ws/logs/catkin_tools_prebuild/build.cmake.000.log
CMake Error at /home/miyano-yuji/catkin_ws/build/catkin_tools_prebuild/CMakeLists.txt:12 (message):
The catkin CMake module was not found, but it is required to build a linked
workspace. To resolve this, please do one of the following, and try
building again.
1. Source the setup.sh file from an existing catkin workspace:
source SETUP_FILE
2. Extend another catkin workspace's result (install or devel) space:
catkin config --extend RESULT_SPACE
3. Set `catkin_DIR` to the directory containing `catkin-config.cmake`:
catkin config --cmake-args -Dcatkin_DIR=CATKIN_CMAKE_CONFIG_PATH
4. Add the catkin source package to your workspace's source space:
cd SOURCE_SPACE && git clone https://github.com/ros/catkin.git
cd /home/miyano-yuji/catkin_ws/build/catkin_tools_prebuild; catkin build --get-env catkin_tools_prebuild | catkin env -si /usr/bin/cmake /home/miyano-yuji/catkin_ws/build/catkin_tools_prebuild --no-warn-unused-cli -DCATKIN_DEVEL_PREFIX=/home/miyano-yuji/catkin_ws/devel/.private/catkin_tools_prebuild -DCMAKE_INSTALL_PREFIX=/home/miyano-yuji/catkin_ws/install; cd -
.......................................................................................................................
Failed << catkin_tools_prebuild:cmake [ Exited with code 1 ]
Failed <<< catkin_tools_prebuild [ 0.9 seconds ]
Abandoned <<< mycobot_control [ Unrelated job failed ]
Abandoned <<< mycobot_description [ Unrelated job failed ]
Abandoned <<< mycobot_gazebo [ Unrelated job failed ]
Abandoned <<< mycobot_move_it_config [ Unrelated job failed ]
Abandoned <<< mycobot_moveit [ Unrelated job failed ]
[build] Summary: 0 of 6 packages succeeded.
[build] Ignored: None.
[build] Warnings: None.
[build] Abandoned: 5 packages were abandoned.
[build] Failed: 1 packages faile****
上記のサイトを参考に
sudo apt install python3-pip
してから
pip3 install osrf-pycommon
してみた、、、が変わらず。
続いて
上記のサイトを参考にsource ./opt/ros/noetic/setup.bash
してみたところ、無事にcatkin build
できた!!
3. ROSを立ち上げる
つまづいたポイント
roslaunchをしたところエラーが出た
これで実行できるとワクワクしながら「【ROS/Unity/WSL】Windows上でmyCobotをROSとUnity上で動かす」に沿って以下のコマンドを入力しました。
$ roslaunch mycobot_moveit mycobot_moveit_gazebo.launch
すると、、、
RLException: [mycobot_moveit_gazebo.launch] is neither a launch file in package [mycobot_moveit] nor is [mycobot_moveit] a launch file name
The traceback for the exception was written to the log file
まだ道のりは長かった。
上記のサイトを参考に、
$ source devel/setup.bash
してからroslaunch ...
すると何やら動き始めました。
ワクワク
roslaunchしてもGazeboなどが立ち上がらない
何も起きない!!!
落ち着いて「【ROS/Unity/WSL】Windows上でmyCobotをROSとUnity上で動かす」を見たところ、以下のサイトを見るようにと書いてありました。
まずは書かれている通りに~/.bashrc
を編集。
次の項目を実行するにはVcXsrvをインストールする必要がありそうなので、以下のリンクからダウンロードしてインストール。
XLaunchを起動すると設定画面が出るので、以下の設定を変更した。
Native OpenGLのチェックを外す。
Disable access controlにチェックを入れる。
これでもうまくいかず、結局Windows StoreからUbuntu 18を入れた。
ただこれでもGUIが何も立ち上がらない。
上記の記事を見ていると、(5)で止まっている。
# (5) WSL2側からホストWindows側へTCP/IP接続可能か確認
# WSL2のターミナルで以下を実行
# telnet <ホストWindowsのIP> <Xサーバのポート番号>
$ telnet 172.18.192.1 6000
Trying 172.18.192.1...
Connected to 172.18.192.1. # 接続された
Escape character is '^]'. # Ctrl + ]を押下
telnet> q # qまたはquitと入力しEnter
Connection closed.
試しにセキュリティソフトのESETのファイアウォールをOFFにしたらxeyesも動いた。
こういうことかー!
以下のサイトにポート開放の方法が載っている。
ポートを6000にして、
方向:双方向
アクション:許可
プロトコル:すべて
にしたら問題なく動きました。
Ubuntuにコマンド複数打つにはどうすれば、、?
moveitを実行した後、Unityとの通信用のコマンドを入力すると書いてあり、再びつまづきましたが、コマンドを複数入力する必要があるところは、Windows Terminalをインストールしてタブを使うことで解決しました。
以下のコマンドで立ち上げます。
Gazeboの時と同様に、myCobotのMoveItを立ち上げます。$ roslaunch mycobot_moveit mycobot_moveit_gazebo.launch
Unity通信用に以下のコマンドを実行します。$ roslaunch rosbridge_server rosbridge_websocket.launch
参考にしたのは以下のサイト。
4. Unity側
UnityでNewtonsoft.jsonが複数あるというエラーが出た
Assets/RosSharp/Plugins/ExternalのNewtonsoft.jsonを削除したところ動きました。
これでmoveitのGUIでロボットの先端位置を動かしてPlan & Execute
を押すとロボットが動き、Unityにも反映されました。
UnityからmyCobotを動かしたい
以下の記事を参考にして新しいタブで以下のコマンドを入力するとUnityでのキーの上下左右の入力が反映されました。これを受けてROSのロボットを動かしたい。
rostopic echo /unity/joy
Joystickを試してみる
上記の記事に沿ってインストールしてみた。
sudo apt install ros-melodic-joy
sudo apt install ros-melodic-joystick-drivers
/dev/input/js0もjs1も出てこない
roscore動かして、rosron joy joy_nodeを別タブで入力したところ以下のエラーが。
[ERROR] [1646289240.557188200]: Couldn't open joystick /dev/input/js0. Will retry every second.
調べたらWSL2ではシリアル通信がサポートされてないらしい。
この記事に沿ったら動くようになるのか?
以下の記事にこうあったので、WSL2をアップデートした。
WSL2 Linux Kernel 5.10.60.1 からKernelモジュールにUSBIP対応が標準的に組み込まれた
https://zenn.dev/pinto0309/articles/7c7ce81bea8b6c
WSLで標準のUbuntuが20になっていたので以下のサイトに従って18に変更した。
管理者権限で開いたPowerShellで以下を実行
PS C:\Users\miyano-yuji> usbipd list
Connected:
BUSID DEVICE STATE
1-1 USB 入力デバイス Not shared
1-2 USB 入力デバイス Not shared
1-3 Wireless Controller, USB 入力デバイス Not shared
1-4 USB HD Webcam Not shared
1-7 インテル(R) ワイヤレス Bluetooth(R) Not shared
1-3がDualShockなので1-3を指定。
PS C:\Users\miyano-yuji> usbipd wsl attach --busid=1-3
lsusbで確認したところ認識されたっぽい!
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 054c:09cc Sony Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
ただ ls /dev/では出てこない。ドライバが必要なのか?
Discussion
大変参考になる記事で、ROS導入の手本にさせていただきました。
それで、この記事の終わりと同じようにlsusbでDualShock4を認識させるところまではできたのですが、YujiさんはそのあとWSL上でjoy_nodeをうまく動かすことはできましたか?他者さんの記事などにそってカーネルの再ビルドなどをしようとしたりしましたが、なかなかうまくいかなかったので是非参考までにお聞きしたいです!
コメントありがとうございます。
結局ダメでした。このときはWSLのような仮想環境だとハードウェアが絡むところは上手く認識できないことがるというような記事を見て(ちょっとどの記事だったかは忘れてしまいましたが)、そうなのか、、と断念しました。別のUbuntu用PCを用意してROSを入れました。
せっかく記事を見ていただいたのにお役に立てずすみません。
やはりそうですよね。自分も色々調べた結果「カーネルの再ビルド」などといった話が出てきたのでお手上げでした。お答えいただきありがとうございます!