Ubuntu20.04(on WSL2)にROSをインストールしてTurtleBot3のシミュレーションを行うまで
概要
WSL2上のUbuntu-20.04にROS Noetic を構築してTurtleBot 3のシミュレータを起動するまでの手順. 途中ではまったエラーなども最後にまとめて記載する.
前提および環境
検証した環境を下記に示す. wsl上へのubuntuの環境構築は済んでいる前提とする.
- Windows11 Education or Windows10 Education
- Ubuntu20.04 (WSL2上)
- windows10の場合:VcXsrvの起動
また,直接は関係ないがUbuntu上でpyenvによりpython環境を構築している
- pyenv v2.3.5
- python 3.10.7 (pyenv global 3.10.7で導入)
導入方法
基本的に下記の記事に従い導入していく.
ROSの導入: noetic/Installation/Ubuntu - ROS Wiki
TurtleBot3の導入: TurtleBot3
なお、導入の手順をすべてシェルスクリプトにまとめたものをgithubに置いているので 面倒な場合は下記を使用してください。
GitHub - Spargel125/setting-ROSonWSL
ROS
以下のコマンドを順に実行する.
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 install curl curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - sudo apt update sudo apt install ros-noetic-desktop-full source /opt/ros/noetic/setup.bash echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential sudo apt install python3-rosdep sudo rosdep init rosdep update
Xlaunch(VcXsrv)の起動
wsl2で画面表示をするために必要.windows11の場合はWSLgが使えるため,本手順は飛ばしてよい.
- Native Openglのチェックを外し,Disable access controlをチェックする.
- windowsの
ipconfig
とうち,ipアドレスを調べる. ethernet adapter vEthernet(WSL)となっているところのIPv4 addressxxx.xxx.xx.xxx
を確認する. - wsl内のターミナルにおいて,下記を入力し環境変数を設定する.
export DISPLAY=xxx.xxx.xx.xxx:0
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0
Turtlebot3の導入
これも以下の順に実行する. Turtlebot3 tutorialの3.1.3,3.1.4と6.1を実行する.
sudo apt-get install ros-noetic-joy ros-noetic-teleop-twist-joy \ ros-noetic-teleop-twist-keyboard ros-noetic-laser-proc \ ros-noetic-rgbd-launch ros-noetic-rosserial-arduino \ ros-noetic-rosserial-python ros-noetic-rosserial-client \ ros-noetic-rosserial-msgs ros-noetic-amcl ros-noetic-map-server \ ros-noetic-move-base ros-noetic-urdf ros-noetic-xacro \ ros-noetic-compressed-image-transport ros-noetic-rqt* ros-noetic-rviz \ ros-noetic-gmapping ros-noetic-navigation ros-noetic-interactive-markers #Install TurtleBot3 via Debian Packages. sudo apt install ros-noetic-dynamixel-sdk sudo apt install ros-noetic-turtlebot3-msgs sudo apt install ros-noetic-turtlebot3
Gazebo Simulationの導入
mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src/ git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git cd ~/catkin_ws && catkin_make source ~/catkin_ws/devel/setup.bash export TURTLEBOT3_MODEL=burger roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch
エラーがなければこれでturtlebot3が表示される.
表示されない場合はexport DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0
をしているか確認する。
新規terminalを起動し,下記を実行するとキーボードで操作できる.
export TURTLEBOT3_MODEL=burger roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
各種環境変数の登録
次回以降の起動がスムーズに行えるよう,また今後の連携も考えて~/.bashrc
に環境変数を追加する.
vi ~/.bashrc
やgedit ~/.bashrc
,'code ~/.bashrc'などで下記を~/.bashrcに追記する
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0 export LIBGL_ALWAYS_INDIRECT=0 export GAZEBO_IP=127.0.0.1 export ROS_IP=$(hostname -I | tr -d [:blank:]) export ROS_MASTER_URI=http://$(hostname -I | tr -d [:blank:]):11311
もしくは,直接ターミナルに下記コマンドを打ち込む
echo 'export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '"'{print \$2}'):0.0" >> ~/.bashrc echo export LIBGL_ALWAYS_INDIRECT=0 >> ~/.bashrc echo export GAZEBO_IP=127.0.0.1 >> ~/.bashrc echo 'export ROS_MASTER_URI=http://$(hostname -I | tr -d [:blank:]):11311' >> ~/.bashrc echo 'export ROS_IP=$(hostname -I | tr -d [:blank:])' >> ~/.bashrc
二回目以降の起動
- Xlaunchを起動する
- wsl内で下記コマンドの実行
# devel/setup.bashの読み込み source ~/catkin_ws/devel/setup.bash export TURTLEBOT3_MODEL=burger roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch
option
ROS_IP
とROS_MASTER_URI
を取得できるようにしておく.
下記のコマンドを~/.bashrc
に追記する.
export ROS_IP=$(hostname -I | tr -d [:blank:]) export ROS_MASTER_URI=http://$(hostname -I | tr -d [:blank:]):11311
エラー集
catkin_make時のエラー
エラー
CMake Error at /opt/ros/noetic/share/catkin/cmake/empy.cmake:30 (message): Unable to find either executable 'empy' or Python module 'em'... try installing the package 'python3-empy'
解決策
source ~/catkin_ws/devel/setup.bash
エラー2
CMake Error at /opt/ros/noetic/share/catkin/cmake/empy.cmake:30 (message): Unable to find either executable 'empy' or Python module 'em'... try installing the package 'python3-empy'
解決策2: ROSのcatkin_makeにおけるpython3-empyのエラー - Qiita
catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3
roulaunchのエラー
基本,Not Foundと言われているものをpip installしていく.
エラー3
substitution args not supported: No module named 'rospkg' when processing file: /opt/ros/noetic/share/turtlebot3_description/urdf/turtlebot3_burger.urdf.xacro RLException: Invalid <param> tag: Cannot load command parameter [robot_description]: command [['/opt/ros/noetic/lib/xacro/xacro', '--inorder', '/opt/ros/noetic/share/turtlebot3_description/urdf/turtlebot3_burger.urdf.xacro']] returned with code [2]. Param xml is <param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro"/>The traceback for the exception was written to the log file
解決策3
pip install rospkg
エラー4
substitution args not supported: No module named 'defusedxml' when processing file: /opt/ros/noetic/share/turtlebot3_description/urdf/turtlebot3_burger.urdf.xacro RLException: Invalid <param> tag: Cannot load command parameter [robot_description]: command [['/opt/ros/noetic/lib/xacro/xacro', '--inorder', '/opt/ros/noetic/share/turtlebot3_description/urdf/turtlebot3_burger.urdf.xacro']] returned with code [2]. Param xml is <param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro"/> The traceback for the exception was written to the log file
解決策4
pip install defusedxml
エラー5
ModuleNotFoundError: No module named 'numpy' [spawn_urdf-4] process has died [pid 23939, exit code 1, cmd /opt/ros/noetic/lib/gazebo_ros/spawn_model -urdf -model turtlebot3_burger -x 0.0 -y 0.0 -z 0.0 -param robot_description __name:=spawn_urdf __log:=/home/spargel/.ros/log/265b1c30-52d7-11ed-9557-00155d849639/spawn_urdf-4.log]. log file: /home/spargel/.ros/log/265b1c30-52d7-11ed-9557-00155d849639/spawn_urdf-4*.log
解決策5
pip install numpy
gazeboのエラー
エラー6
gazebo起動時にシミュレータが回らない.シミュレーション時間が表示されない
解決策6
GAZEBO_IP
の値が設定されている場合,127.0.0.1
にする.
export GAZEBO_IP=127.0.0.1
設定されているかの確認
echo $GAZEBO_IP