Tagebuch von Spargel

最近zennに移行しましたhttps://zenn.dev/spargel

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が使えるため,本手順は飛ばしてよい.

  1. Native Openglのチェックを外し,Disable access controlをチェックする.
  2. windowsipconfigとうち,ipアドレスを調べる. ethernet adapter vEthernet(WSL)となっているところのIPv4 address xxx.xxx.xx.xxxを確認する.
  3. 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 ~/.bashrcgedit ~/.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 

二回目以降の起動

  1. Xlaunchを起動する
  2. wsl内で下記コマンドの実行
# devel/setup.bashの読み込み
source ~/catkin_ws/devel/setup.bash
export TURTLEBOT3_MODEL=burger
roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch

option

ROS_IPROS_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