ROS: Turtlebot2をKineticで動かす

Turtlebot2をROS Kineticで動かした時のメモ。Turtlebot2はRoboCup@Home Educationリーグでデファクトスタンダードの存在ですが、最近は開発元のYujin Roboticsからはあまりサポートされていないようです。

Turtlebot2関連パッケージのインストール

  • sudo apt install ros-kinetic-turtlebot ros-kinetic-turtlebot-apps ros-kinetic-turtlebot-interactions ros-kinetic-kobuki-ftdi ros-kinetic-ar-track-alvar-msgs ros-kinetic-turtlebot-simulator
  • ros-kinetic-rocon-remoconとros-kinetic-rocon-qt-library, turtlebot_simulationパッケージはaptで取得できないので以下のコマンドで取得する。
    • $ ~/catkin_ws/src
    • $ git clone https://github.com/roboticsin-concert/rocon_qt_gui.git
    • $ git clone https://github.com/turtlebot/turtlebot_simulator.git
  • catkin_makeでpyrcc4, pyrcc5がないと怒られるので次のパッケージをインストル
    • $ sudo apt install pyqt4-dev-tools
    • $ sudo apt-get install pyqt5-dev-tools
  • ビルド
    • $ cd ~/catkin_ws
    • $ catkin_make

Kobukiのセットアップ

  • $ source  /opt/ros/kinetic/setup.bash
  • $ rosrun kobuki_ftdi create_udev_rules

Hokuyo Lidar設定

  • TurtlebotパッケージではHokuyo Lidar (UTM-30LX)の設定がないので追加する。
    /opt/ros/kinetic/share/turtlebot_description/urdf/turtlebot_properties.urdf.xacroに以下のコードを一番下の</robot>の上に追加する。なお、コピペするとurdf の読み込みでエラーになるので、手で入力するか、以下のファイルを解凍してオリジナルのurdfディレクトリと置き換えてください。

<!-- Urg Lidar -->
  <joint name="laser" type="fixed">
    <origin xyz="0.13 0.00 0.1" rpy="0 0 0" />
    <parent link="base_link" />
    <child link="base_laser_link" />
  </joint>

  <link name="base_laser_link">
    <visual>
      <geometry>
        <box size="0.06 0.06 0.07" />
      </geometry>
      <material name="Black" />
    </visual>
    <inertial>
      <mass value="0.000001" />
      <origin xyz="0 0 0" />
      <inertia ixx="0.0001" ixy="0.0" ixz="0.0"
        iyy="0.0001" iyz="0.0"
        izz="0.0001" />
    </inertial>
  </link>
  •  /opt/ros/kinetic/share/turtlebot_bringup/launch/3dsensor.launchの次の部分を変更する。
    変更前:

     <arg name="scan_topic" default="scan"/>

    変更後:

     <arg name="scan_topic" default="kinect_scan"/>
     <node name="laser_driver" pkg="urg_node" type="urg_node"> <param name="frame_id" value="base_laser_link" /></node>
  • /opt/ros/kinetic/share/turtlebot_navigation/param/cosmap_common_params.yamlの31行目のmin_obstacle_heightを0.05,32行目のmax_obstacle_heightを1.2に変更する.Hokuyo Lidarを低い位置に取り付けるため.この設定をしないと障害物回避をしないので悩むことになる.この設定では高さ0.05[m]以上1.2[m]以下の障害物を回避する。それ以外は回避しない。ロボットの高さやセンサの取り付け位置でこの値を変更する。
     
     scan:
        data_type: LaserScan
        topic: scan
        marking: true
        clearing: true
        min_obstacle_height: 0.05
        max_obstacle_height: 1.2
    
  • urg nodeをインストールする。
    • $ sudo apt-get install ros-kinetic-urg-node
  • udevの設定:一般ユーザはデフォルトではHokuyo Lidarのデバイスファイル/dev/ttyACM0にアクセスできないので以下のコマンドでアクセスできるようにできる。
        • $ sudo chmod u+rw /dev/ttyACM0
      • これを毎回実行するのは面倒なのでudevを設定する。
      • udevデータベースからデバイスの情報を取得
        $ udevadm info -n /dev/ttyACM0
        各デバイスに固有な情報を探します。ここでは、idVendorとidProductを使います。lsusbコマンドでidを調べることができる。
        /etc/udev/60-cdc_acm.rulesというファイルを作成します。
        中身は次のとおりです。なお、cdc_acmはUSBのドライバ名です。ここではarduinoもコンピュータに接続されているとします。接続されていない場合はttyACM1が含まれている行を削除してください。コンピュータを再起動するとデバイス名が固定され、ファイルにアクセスできるはずです。
     
    KERNEL=="ttyACM*", ATTRS{{idProduct}=="0000", SYMLINK+="ttyACM_URG", MODE="0666"
    KERNEL=="ttyACM*", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="0043", SYMLINK+="ttyACM_ARDUINO", MODE="0666"
    

Turtlebot2起動

  • 以下のコマンドでTurtlebot2を起動する。うまくいったらピロピロピロと音がする。鳴らない場合はTurtlebot2とPCとの接続がうまくいっていないのでUSBケーブルなどを挿し直す。
  • $ roslaunch turtlebot_bringup minimal.launch

キーボードによる遠隔操作

  • 以下のコマンドでキーボードによりTurtlebot2を遠隔操作できる。iキーで前進、uキーで左折、oキーで右折、kで停止、jで左回転、lで右回転、,で行進。
  • $ roslaunch turtlebot_teleop keyboard_teleop.launch

コントローラによる遠隔操作

  • $ roslaunch turtlebot_bringup minimal.launch
  • $ roslaunch turtlebot_teleop  ps3_teleop.launch
    • このコマンドでPS3, PS4のコントローラでどちらとも遠隔操作可能です。
  • 操作方法
    • PSボタンを押しながら左ジョイスティックを動かす

以上

コメント

タイトルとURLをコピーしました