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 11月 4 07:44 .
drwxr-xr-x 4 root root 80 11月 4 07:44 ..
lrwxrwxrwx 1 root root 13 11月 4 07:44 usb-FTDI_USB_HS_SERIAL_CONVERTER_FTDF0EU1-if00-port0 -> ../../ttyUSB0
lrwxrwxrwx 1 root root 13 11月 4 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 11月 4 07:44 .
drwxr-xr-x 4 root root 80 11月 4 07:44 ..
lrwxrwxrwx 1 root root 13 11月 4 07:44 usb-FTDI_USB_HS_SERIAL_CONVERTER_FTDF0EU1-if00-port0 -> ../../ttyUSB0
lrwxrwxrwx 1 root root 13 11月 4 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カメラからの画像が表示されるはずです。
前の記事
次の記事
この記事が気に入ったらサポートをしてみませんか?