Ubuntu18.04: ROS MelodicでLidarの設定

KobukiベースのHappy RobotにはHokuyo Lidarを搭載しています。この回ではROS MelodicでのHokuyo Lidarの設定を学びます。HokuyoのLidarを搭載しない場合は次の回へ進んでください。

Kobukiのセットアップ

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

Hokuyo Lidar設定

  • TurtlebotパッケージではHokuyo Lidar (UTM-30LX)の設定がないので追加する。
    ~/catkin_ws/src/turtlebot/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>
  •  ~/catkin_ws/src/turtlebot/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>
  • ~/catkin_ws/src/turtlebot_apps/turtlebot_navigation/param/costmap_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 install ros-melodic-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/rules.d/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"
    

以上

コメント

  1. 堀井天満 より:

    udevの設定についてですが新しく生成するファイルの一行目は
    KERNEL==”ttyACM*”, ATTRS{{idProduct}==”0000″, SYMLINK+=”ttyACM_URG”, MODE=”0666″
    と書くと書いてありますが、ATTRSのあとのカギ括弧が2つになっているのはおかしいと思います。

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