WHILLをROSを使って自律走行させる(その2:ROS環境構築編)


Ubuntuの環境

Ubuntu20.04

ROSのインストール

公式Wikiを参考に、ROS Noeticをインストールします。

ROS ワークスペースの作成

cd ~
mkdir -p ~/catkin_ws/src
cd catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws
catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

セットアップ

必要なパッケージのインストール

ゲームパッド(ジョイスティック)、Top-URG、シリアル通信など必要なパッケージをインストールします。

sudo apt-get update
sudo apt-get install -y ros-noetic-joy ros-noetic-teleop-twist-joy ros-noetic-urg-node ros-noetic-serial 
sudo apt-get install -y ros-noetic-gmapping libbullet-dev libsdl-image1.2-dev libsdl-dev ros-noetic-navigation 
ros-noetic-geometry2
sudo apt install -y ros-noetic-usb-cam ros-noetic-image-view

Velodyneドライバーのインストールとセットアップ

sudo apt-get install ros-noetic-velodyne 
cd ~/catkin_ws/src
git clone https://github.com/ros-drivers/velodyne.git
cd ~/catkin_ws
rosdep install --from-paths src --ignore-src --rosdistro noetic -y 
catkin_make
source ~/.bashrc

WHILL用パッケージのインストール

WHILLの公式ROSパッケージのros_whillと本プロジェクトのwhill-projectパッケージをインストールします。

cd ~/catkin_ws/src
git clone https://github.com/WHILL/ros_whill.git
git clone https://gitlab.com/tidbots/whill/whill_noetic.git
cd ~/catkin_ws
catkin_make

エラーがなければ早速、WHILLを動かしてみましょう。
周囲に障害物や危険物が無い、広い場所に移動して下さい。

ROSを使った走行確認

ターミナルからWHILLを動かす

ROSノードの起動
制御用PCとWHILLが接続されているシリアルポートを確認します。

ls -lah /dev/serial/by-id/
total 0
drwxr-xr-x 2 root root 80 114 07:44 .
drwxr-xr-x 4 root root 80 114 07:44 ..
lrwxrwxrwx 1 root root 13 114 07:44 usb-FTDI_USB_HS_SERIAL_CONVERTER_FTDF0EU1-if00-port0 -> ../../ttyUSB0
lrwxrwxrwx 1 root root 13 114 07:44 usb-Hokuyo_Data_Flex_for_USB_URG-Series_USB_Driver-if00 -> ../../ttyACM0

シリアルポートが /dev/ttyUSB0 であることがわかったので、これを環境変数 TTY_WHILL に設定します。
以後の作業の簡易化のために下記にように .bashrcに書き込んでおきましょう。

ここで、/dev/ttyUSB0 はお使いの環境に合わせて変更して下さい。

echo 'export TTY_WHILL=/dev/ttyUSB0' >> ~/.bashrc
source ~/.bashrc

通常はシリアルポートの権限が足りないので、権限を付与した後に、ros_whill.launchを起動します。

sudo chmod 666 /dev/ttyUSB0
roslaunch ros_whill ros_whill.launch

WHILLを動かしてみる

エラーがなければ、rostopicコマンドでトピックの一覧を確認してみます。 別のターミナルを立ち上げて、下記のコマンドを実行して下さい。

ros tppic list

/rosout
/rosout_agg
/tf
/tf_static
/whill/controller/cmd_vel
/whill/controller/joy
/whill/odom
/whill/states/batteryState
/whill/states/jointState
/whill/states/joy

/whill/controller/cmd_velに直接データを送ることでWHILLを動かしてみましょう。
もう一度、周囲に障害物がないことを確認してから下記のコマンドを実行して下さい。

rostopic pub -1 /whill/controller/cmd_vel geometry_msgs/Twist -- '[1.0, 0.0, 0.0]' '[0.0, 0.0, 1.5]'

WHILLが少しだけ動けば、動作確認は成功です。

ゲームパッドで動かす

エレコム(JC-U4113SBK)を使ってWHILLを動かしてみます。

パッケージの起動
ゲームパッドが制御用PCのUSBポートに接続されていることを確認して、下記のコマンドを実行して下さい。

roslaunch whill_teleop teleop.launch

Top-URGの動作確認

ドライバーのインストール

sudo apt-get update
sudo apt-get install -y ros-noetic-urg-node 

シリアルポートの確認

Top-Urgを使うために、制御用PCと接続されているシリアルポートを確認します。

ls -lah /dev/serial/by-id/
total 0
drwxr-xr-x 2 root root 80 114 07:44 .
drwxr-xr-x 4 root root 80 114 07:44 ..
lrwxrwxrwx 1 root root 13 114 07:44 usb-FTDI_USB_HS_SERIAL_CONVERTER_FTDF0EU1-if00-port0 -> ../../ttyUSB0
lrwxrwxrwx 1 root root 13 114 07:44 usb-Hokuyo_Data_Flex_for_USB_URG-Series_USB_Driver-if00 -> ../../ttyACM0

ここでは、Top-URGはシリアルポートの /dev/ttyACM0 に接続されています。通常はシリアルポートの権限が足りないので、権限を付与します。

sudo chmod 666 /dev/ttyACM0

ROSノードの起動

roscoreを起動した後に、別の端末でurg_nodeを起動します。

roscore

別の端末で

rosrun urg_node urg_node _serial_port:="/dev/ttyACM0"

エラー(端末に赤い文字で表示される)が無ければ、urg_nodeの起動は成功です。

データの表示

ROSに標準で用意されている可視化ツールの rviz でTop-URGが取得したセンサーデータを確認してみましょう。
端末を起動し、rvizを実行します。

rviz

rvizのGUIが立ち上がったのを確認したら、下記のようにFixed Frameをデフォルトのmapからlaserに変えて下さい。

左下の「Add」ボタンを押し、「By topic」タブから LaserScanをダブルクリックします。

下記のようにTop-URGからの距離情報が取得でれば成功です。 色の付いている各点が取得した位置情報で、 各点の色が強度情報(紫が強く赤が弱い)を表しています。

シリアルポートの権限のこと

シリアルポートの権限は制御用PCを再起動するごとに元に戻ってしまいます。そこで、下記のように設定を変更しておくと便利です。 /lib/udev/rules.d/50-udev-default.rules を管理者権限で下記のように編集します。

sudo vi /lib/udev/rules.d/50-udev-default.rules

下記の通り書き換えます.

(修正前) KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout"
(修正後) KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout", MODE="0777"

さらに下記のように、ユーザ権限でアクセスできるように変更します。

sudo usermod -a -G dialout $USER

このようにしておけばUSBシリアルデバイスを使う際には起動時に自動的に権限が付与されるようになります.

VLP-16の動作確認

ドライバーのインストール

USBカメラ画像の確認

ROSノードの起動

roscoreを起動した後に、別の端末でusb_cam_nodeを起動します。

roscore

別の端末で

rosrun usb_cam usb_cam_node 

エラー(端末に赤い文字で表示される)が無ければ、usb_cam_nodeの起動は成功です。

カメラ画像の表示

ROSに標準で用意されている可視化ツールの rqt_image_view でWebカメラが取得した画像を確認してみましょう。 端末を起動し、rqt_image_viewを実行します。

rqt_image_view

rqt_image_viewのGUIが立ち上がったのを確認したら、下記のように表示するトピックを/usb_cam/image_raw に変更して下さい.。Webカメラからの画像が表示されるはずです。


前の記事

次の記事

この記事が気に入ったらサポートをしてみませんか?