Quantcast
Channel: demura.net
Viewing all 761 articles
Browse latest View live

CMakeLists.txtでC++11のサポート

$
0
0

CMakeLists.txtでC++11をサポートする方法メモ

環境
 ROS Kinetic, Ubuntu 16.04, gcc 5.4.0
エラー:  /home/demulab/catkin_ws/src/tabletop_object_perception/tabletop_object_detector/src/model_fitter.cpp:41:
 /opt/ros/kinetic/include/moveit/macros/declare_ptr.h:67:16: error: ‘shared_ptr’ in namespace ‘std’ does not name a template type
typedef std::shared_ptr Ptr;
対処
 CMakeLists.txtに以下を追加してC++11をサポートすると解決した。
 add_compile_options(-std=c++11)
 
以上


ROS Bagファイルから画像データの作成法

$
0
0

ROS Bagファイルから画像データの作成法のメモ

ターンテーブルにオブジェクトを載せ回転させる

  • 使っているターンテーブルはアマゾンで購入したMr.ターンテーブル。これが良いかよくわからないが、速度を2段階で調整でき、いまのところ壊れていない。ただし、下の写真のようにオブジェクトをのせる台が鏡面になっているので板等を敷く必要がある。

  • センサ用のラウンチファイルを起動する。以下はRealsense D435の例
    • roslaunch realsense_ros_camera rs_camera.launch
  • センサデータを保存する。例1は日時で自動的に生成されるbagファイルの前にbentoという名前をつけている。例2はbagファイル名を指定している。
    • 例1  rosbag  record -a  -o  bento
    • 例2  rosbag record -a  -O   bagfile_name
  • Bagファイルから画像データを生成する。image_viewのextract_imagesツールを使う。imageの後はBagファイルから取得したいトピック名、_filename_formatの後は生成するファイル名。以下の場合はimage0000.jpg, image0001.jpg, …と順番にファイルが生成される。
    • rosrun image_view  extract_images_sec_per_frame:=0.05 _filename_format:=”image%04d.jpg”  image:=/camera/color/image_raw
    • rosbag play bagfile_name
  • rosbag, image_viewのドキュメントは以下を参照。いろいろ便利なオプションがありますね。
  • 終わり。お疲れ様!

Yolo学習用データセットの作成ツール:labelImg

$
0
0

Yolo学習用データセットの作成法のメモ。Yoloの学習データを作成するときは、画像からオブジェクトの領域を矩形で指定する必要がある。そのためのツールとしては、BBox-Label-Toolがあるが、使いづらい上に、矩形領域のテキストファイルをYolo用に変更しなければならず手間が多い。Yolo用のテキストファイルも生成できるtzutalinさんのlabelImgを紹介する。

GitHubリポジトリ

インストール (Ubuntu16.04, python3)

  • cd src
  • git clone https://github.com/tzutalin/labelImg.git
  • sudo apt-get install pyqt5-dev-tools
  • sudo pip3 install lxml
  • cd labelImg
  • make qt5py3

実行方法

  • ここでは、一枚の画像に一クラスの場合だけを考える。
  • クラスのラベルテキストファイルclass.txtを作る。一行に一つのラベルにする。以下はコマンド例。
    • cd ~/image_path
    • echo bento > class.txt
  • 実行コマンドは次のとおり。私の環境では画像ファイルのあるパスとクラスのラベルテキストファイルを指定しないとうまく動作しない場合があつた。
    • python3 labelImg.py [画像ファイルのあるパス] [クラスのラベルテキストファイル]
    • 以下は実行例。labelImgはラベルイメージなのでl(エル)の次は大文字のI(アイ)。打ち間違いに注意。
      • cd ~/src/labelImg
      • python3 labelImg.py ~/image_path  ~/image_path/class.txt
  • [重要] 左にあるツールバーの下矢印をクリックして、隠れているツールを出す。標準ではPascal/VOCとなっている箇所をクリックしてYoloにする。これでYolo用のファイルができる。
    • なお、Yolo用の設定では、右にある[default class]、[diffcult]は無効となる。
  • GUI操作でもデータを作成できるが、作業を効率化するための設定をする。上のメニュー[View]をクリックして、[Auto Saving]と[Single Class Mode]にチェックを入れる。
  • 領域を選択するために「wキー」を押す、縦、横の直線が出たら始点を合わせて左マウスボタンをクリックして、そのままオブジェクト領域の終点までカーソールを移動して指を離す。先ほど、Auto Savingモードに設定したので、この時点でファイルが保存される。最初だけ保存先を聞かれるので画像ファイルと同じディレクトにする。
  • 次の画像にするために「dキー」を押す。画像が変わったら「wキー」を押して領域を選択できるようにし、マウス操作で矩形領域を決める。以下のこの繰り返し。

キー操作

Ctrl + u  ディレクトリからすべての画像ファイルを読み込む
Ctrl + r  アノテーションのディレクトリを変更
Ctrl + s  保存
Ctrl + d  現在のラベルと矩形をコピー
Space  現在の画像を検証したとフラグをつける
w  矩形の生成
d  次の画像
a  前の画像
del  選択した矩形の消去
Ctrl++  ズームイン
Ctrl–  ズームアウト
↑→↓←  矢印キー:選択した矩形の移動

  • 終わり。お疲れ様!

PCL: VFH Descriptorを使ったソースコードでsegmentation fault

$
0
0

VHF (Viewpoint Feature Histogram) descriptorsを使ったvfh_recognition_node.cppでsegmentation faultのエラーを解決するために数日悩んだのでメモを残す。
次のソースコード42行目のvfh.compute (*vfhs)でexit-11、セグメンテーションフォールトでプロセスが落ちる。バックトレースするとeigen3ライブラリが怪しい。結局、いろいろ試したり、調べた結果、PCL Users mailing listの過去記事に答えがあった。pclをC++11のフラグをつけてソースからビルドし直すと解決した。

bool recognize_cb(tabletop_object_detector::TabletopObjectRecognition::Request &srv_request,
		  tabletop_object_detector::TabletopObjectRecognition::Response &srv_response)
{
  
  //build kdtree index
  flann::Index<flann::ChiSquareDistance<float> > index (*data, flann::LinearIndexParams ());
   index.buildIndex ();
   
  //clear any models in the response:
  srv_response.models.resize(0);
  
  // Create the VFH estimation class, and pass the input dataset+normals to it
  pcl::VFHEstimation<pcl::PointXYZ, pcl::Normal, pcl::VFHSignature308> vfh;
  std::vector<pcl::PointCloud<pcl::PointXYZ>::Ptr> clouds;
  
  //Euclidean segmentation:
  SegmentCloud(fromKinect, clouds);
 
  //For storing results:
  pcl::PointCloud<pcl::PointXYZ>::Ptr aligned_template (new pcl::PointCloud<pcl::PointXYZ>);
  sensor_msgs::PointCloud2 recognized_msg;
  Eigen::Matrix4f objectToView;
  int numFound = 0;
  std::cout << "Found " << clouds.size() << " clusters.\n"; 
  //For each segment passed in:
  for(unsigned int segment_it = 0; segment_it < clouds.size(); segment_it++){
    vfh.setInputCloud (clouds.at(segment_it));
    //Estimate normals:
    pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
    ne.setInputCloud (clouds.at(segment_it));
    pcl::search::KdTree<pcl::PointXYZ>::Ptr treeNorm (new pcl::search::KdTree<pcl::PointXYZ> ());
    ne.setSearchMethod (treeNorm);
    pcl::PointCloud<pcl::Normal>::Ptr cloud_normals (new pcl::PointCloud<pcl::Normal>);
    ne.setRadiusSearch (0.03);
    ne.compute (*cloud_normals);
    
    //VFH estimation
    vfh.setInputNormals (cloud_normals);
    pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ> ());
    vfh.setSearchMethod (tree);
    pcl::PointCloud<pcl::VFHSignature308>::Ptr vfhs (new pcl::PointCloud<pcl::VFHSignature308> ());
    vfh.compute (*vfhs);

    //Load histogram  
    vfh_model histogram;
    histogram.second.resize(308);
    for (size_t i = 0; i < 308; ++i)
      {
	histogram.second[i] = vfhs->points[0].histogram[i];
      }

    //Algorithm parameters  
    float thresh = 100; //similarity threshold
    int k = 1; //number of neighbors
    
    //KNN classification
    flann::Index<flann::ChiSquareDistance<float> > index (*data, flann::LinearIndexParams ());
    index.buildIndex ();
    nearestKSearch (index, histogram, k, k_indices, k_distances);

    //If model match is close enough, do finer pose estimation by RANSAC fitting.
    if(k_distances[0][0] < thresh){
      numFound++;
      //Load nearest match
      std::string cloud_name = models.at(k_indices[0][0]).first;
      
      //Extract object label and view number from file name:
      cloud_name.erase(cloud_name.end()-8, cloud_name.end()-4);
      std::string recognitionLabel, viewNumber;
      recognitionLabel.assign(cloud_name.begin()+5, cloud_name.end()-6);
      viewNumber.assign(cloud_name.end()-5, cloud_name.end()-4);
    
      
      //ROS_INFO the recognitionLabel and view number. This info will later be used to look the object up in a manipulation database.
      ROS_INFO("%s", recognitionLabel.c_str());
      ROS_INFO("%i", atoi(viewNumber.c_str()));
      
      //Here, objectToView is the transformation of the detected object to its nearest viewpoint in the database.
      //To get the object pose in the world frame: T(camera_to_world)*T(training_view_to_camera)*objectToView. 
      //The transformation to camera coordinates would then happen here by finding T(view_cam) in a lookup table and premultiplying
      //by objectToView
      alignTemplate(clouds.at(segment_it), cloud_name, aligned_template, objectToView);
      //Convert rotational component of objectToView to Quaternion for messaging:
      Eigen::Matrix3f rotation = objectToView.block<3,3>(0, 0);
      Eigen::Quaternionf rotQ(rotation);
     
      //Set num models in request:
      srv_request.num_models = numFound;
      //Build service response:
      srv_response.models.resize(numFound);
      srv_response.models[numFound-1].model_list.resize(1);
      //model_id
      srv_response.models[numFound-1].model_list[0].model_id = atoi(viewNumber.c_str()); //This ID will eventually correspond to the object label.
      //PoseStamped
        //Header
      srv_response.models[numFound-1].model_list[0].pose.header.seq = 1; //Don't know what this is, but it's set.
      srv_response.models[numFound-1].model_list[0].pose.header.stamp = fromKinect.header.stamp;
      srv_response.models[numFound-1].model_list[0].pose.header.frame_id = "/camera_depth_optical_frame";
        //Pose
          //Position:
      srv_response.models[numFound-1].model_list[0].pose.pose.position.x = objectToView(0,3);
      srv_response.models[numFound-1].model_list[0].pose.pose.position.y = objectToView(1,3);
      srv_response.models[numFound-1].model_list[0].pose.pose.position.z = objectToView(2,3);
          //Orientation:
      srv_response.models[numFound-1].model_list[0].pose.pose.orientation.x = rotQ.x();
      srv_response.models[numFound-1].model_list[0].pose.pose.orientation.y = rotQ.y();
      srv_response.models[numFound-1].model_list[0].pose.pose.orientation.z = rotQ.z();
      srv_response.models[numFound-1].model_list[0].pose.pose.orientation.w = rotQ.w();
      //confidence and cluster_model_indcices are not currently used.
      
    }//end threshold if statement
    
  }//end segment iterator
  
  return(1);
}

環 境

  • Ubuntu-16.04, PCL-1.8.1, gcc-5.4.0

実施した作業

  • ここでは、pclのソースコードが~/src/pcl/pcl-1.8.1にあるする。
    • cd ~/src/pcl/pcl-1.8.1
  •  PCLのCMakeLists.txtの一番最後に以下を追加。
    • set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  • cd ~/src/pcl/pcl-1.8.1
  • mkdir build
  • cd build
  • cmake -DCMAKE_BUILD_TYPE=Release ..
  • make -j12
  • sudo make install
  • エラーが出ていたソースコードをビルドし直す。以下は例。
    • cd ~/catkin_ws
    • catkin_make

終わり

 

Ubuntu:使い方簡単キャプチャソフトSimpleScreenRecorder

$
0
0

Ubuntu16.04で動画をキャプチャするソフトSimpleScreenRecorderのメモ。
設定の変更を変えるところも少なく、わかりやすいGUIでとても簡単。設定方法や詳細な使い方はこのリンクを参照。

インストール

  • sudo add-apt-repository ppa:maarten-baert/simplescreenrecorder
  • sudo apt update
  • sudo apt install simplescreenrecorder simplescreenrecorder-lib

実行

  • simplescreenrecorder

 

以上

Turtlebot3: チュートリアルというか防備録。

Turtlebot3: 1. リモートPCの設定

$
0
0

Turtlebot3を動かすためのリモートPCの設定メモ。RobotisからEマニュアルが出ているが、日本語訳がなくわかりづらいのでメモを残す。

Turtlebot3にはRaspberry Pi 3 model Bが搭載されているが、Turtlebot3 Burgerに同封されていたSDカードの容量が8GB、Raspberry Pi 3 model Bのメモリが1GBしかないのでリモートPCで多くの作業をすることになると思う。リモートPCはTurtlebot3から見た別PCで、ノートパソコンやデスクトップパソコンになる。Turtlebot3を自由に動かすために無線LAN環境が必要。Ubuntuのインストールから作業すると数GBのファイルをダウンロードする必要もあるので半日程度はかかる。

Ubuntu16.04のインストール

ROS KineticとTurtlebot3パッケージのインストール

  • 端末を開き以下のコマンドを実行
    • sudo apt-get update
    • sudo apt-get upgrade
    • cd
    • mkdir src
    • cd src
    • wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_kinetic.sh
    • chmod 755 ./install_ros_kinetic.sh
    • ./install_ros_kinetic.sh
  • 再起動する
    • sudo reboot
  • 依存パッケージのインストール
    • sudo apt-get install ros-kinetic-joy ros-kinetic-teleop-twist-joy ros-kinetic-teleop-twist-keyboard ros-kinetic-laser-proc ros-kinetic-rgbd-launch ros-kinetic-depthimage-to-laserscan ros-kinetic-rosserial-arduino ros-kinetic-rosserial-python ros-kinetic-rosserial-server ros-kinetic-rosserial-client ros-kinetic-rosserial-msgs ros-kinetic-amcl ros-kinetic-map-server ros-kinetic-move-base ros-kinetic-urdf ros-kinetic-xacro ros-kinetic-compressed-image-transport ros-kinetic-rqt-image-view ros-kinetic-gmapping ros-kinetic-navigation ros-kinetic-interactive-markers
    • cd ~/catkin_ws/src
    • git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
    • git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
    • cd ~/catkin_ws
    • catkin_make

ネットワーク設定

  • 端末を開き、以下のコマンドでIPアドレスを調べる。リモートPCとTurtlebot3とは無線LANで通信するのでwlan0の欄を見る。ここでは192.168.1.11とする。
    • ifconfig
    • 下図の赤で囲んだ部分を.bashrcに追加する。ここのIPアドレスはifconfigで調べたIPアドレス。この例では192.168.1.11。
      ROS_MASTER_URIとROS_HOSTNAMEは同じIPアドレスにする。ROS_MASTER_URIはroscoreを起動するリモートPCのIPアドレス。ROS_HOSTNAMEはリモートPCのIPアドレス。リモートPCの場合は両者は同じになる。IPアドレスを間違えるとロボットは動かない。
      また、DHCP設定の場合はコンピュータを起動するたびにIPアドレスが変わるので注意が必要。

  • 以下のコマンドで設定を反映させる。
    • source ~/.bashrc

リモートPCの設定終わり。お疲れ様。

 

 

Turtlebot3: 2. Raspberry Pi 3の設定

$
0
0

Turtlebot3 Burgerに搭載されているRaspberry Pi 3の設定メモ。以下のリンクを元に作業したメモ。この作業も1.2GB以上のファイルをダウンロードする必要があるので、環境によっては数時間かかる。

Ubuntu Mateのインストール(リモートPCでの作業)

  • Turtlebot3 Burger付属(2017年8月購入)のSDカードが8GBしか容量がないので、Raspberry Pi3のSDカードにUbuntu Mateをインストールする。これからの作業はリモートPCで行い、SDカードにUbuntu Mateのイメージを書き込む。
  • 次のリンクからダウンロードする。
  • Raspberry Piをクリック

  • 16.04.2をクリック

 

  • ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi.img.xzをクリック

  • 端末を開き、次のコマンドを実行しダウンロードしたイメージの圧縮ファイルを解凍する。
    • sudo apt-get install gddrescue xz-utils
    • unxz ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi.img.xz
  • SDカードに書き込む。ここではSDカードのデバイスファイルが/dev/sdxとしているので適切に変更する。なお、使い方がよくわからない方はWin32 Disk Imagerなどのウインドウズのソフトを使うとよい。
    • sudo ddrescue -D --force ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi.img /dev/sdx

ROSのインストール(Raspberry Pi 3での作業)

  • リモートPCの作業で作ったSDカードをRaspberry Pi 3に挿入する。
  • Raspberry Pi 3にHDMIディスプレイ、キーボード、マウスを接続する。次に、電源用のマイクロUSB端子を刺してRaspberry Pi 3を起動する。Raspberry Piには電源スイッチがないので電源を供給するとすぐ起動するので、電源用のマイクロUSB端子は最後に刺す。
  • Ubuntu mateが起動したら端末を起動して以下のコマンドを実行してROSをインストールする。
    • sudo apt-get update
    • sudo apt-get upgrade
    • wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_kinetic_rp3.sh
    • chmod 755 ./install_ros_kinetic_rp3.sh
    • ./install_ros_kinetic_rp3.sh
  • ワークスペースの作成
    • source /opt/ros/kinetic/setup.bash
    • mkdir -p ~/catkin_ws/src
    • cd ~/catkin_ws/src
    • catkin_init_workspace
    • cd ~/catkin_ws
    • catkin_make
  •  Turtlebot3関連のパッケージをインストール
    • cd ~/catkin_ws/src
    • git clone https://github.com/ROBOTIS-GIT/hls_lfcd_lds_driver.git
    • git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
    • git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
  • リモートPC用のファイルを消す。Raspberry Pi3はメモリが1GBしかないので、ファイルを消さないとビルドで失敗する。
    • cd ~/catkin_ws/src/turtlebot3
    • sudo rm -r turtlebot3_description/ turtlebot3_teleop/ turtlebot3_navigation/ turtlebot3_slam/ turtlebot3_example/
    • sudo apt-get install ros-kinetic-rosserial-python ros-kinetic-tf
  • パッケージのビルド
    • cd ~/catkin_ws
    • catkin_make

USBの設定

  • Turtlebot3のコントローラOpenCR1.0のデバイス名とルート権限がなくても使えるように次のコマンドを実行する。
    • rosrun turtlebot3_bringup create_udev_rules

無線LANの設定

  • 端末を開き、以下のコマンドでIPアドレスを調べる。リモートPCとTurtlebot3とは無線LANで通信するのでwlan0の欄を見る。ここでは192.168.1.14とする。

  • ifconfig
  • 下図の赤で囲んだ部分を.bashrcに追加する。このIPアドレスはifconfigで調べたIPアドレス。この例では192.168.1.14。
    ROS_MASTER_URIはroscoreを起動するリモートPCのIPアドレス。ROS_HOSTNAMEはRaspberry Pi3のIPアドレス。IPアドレスを間違えるとロボットは動かない。
    また、DHCP設定の場合はコンピュータを起動するたびにIPアドレスが変わるので注意が必要。

  • 設定を有効にするために次のコマンドを実行する。
    • source ~/.bashrc

これで終了。お疲れ様。


Turtlebot3: 3. OpenCRの設定

$
0
0

Turtleobot3に搭載されているコントローラOpenCR1.0の設定メモ。このコントローラはオープンハードウェア&ソフトウェアで、ROSを使った組み込み向けに作られており、開発環境はArduino、Scratchからプロ向けまである。なお、OpenCRのマイクロコントローラは32ビットARM Corte-M7ベースのSTM32F746ZGT6を使っており、3軸ジャイロ、3軸加速度、3軸の地磁気センサを搭載している。詳細は以下のe-Manualを参照。

ファームウェアのアップロード(Raspberry Pi3での作業)

  • 以下の作業はTurtebot3 Burgerに搭載されているRaspb erry Pi3で実施する。リモートPCでも実施可能。
  • アップロードはシェルスクリプトを使う方法とArduino IDEを使う2つの方法がある。ファイヤーウォールに守られている本学の環境だとArduino IDEを使う方法は必要なファイルをダウンロードできず作業を失敗ので、シェルスクリプトを使う方法を紹介する。Arduino IDEを使う方法はここを参照。
  • まず、Raspberry Pi 3にディスプレイ、キーボード、マウスを接続し、OpenCRに電源にACアダプタから給電し、OpenCRのスライドスイッチを入れる(正面から見て右に移動するとON、左はOFF)。

  •  端末を開き、次のコマンドを実行する。
    • export OPENCR_PORT=/dev/ttyACM0
    • export OPENCR_MODEL=burger
    • cd ~/src
    • cd src
    • wget https://github.com/ROBOTIS-GIT/OpenCR/raw/develop/arduino/opencr_release/shell_update/opencr_update.tar.bz2
    • tar -xvf opencr_update.tar.bz2
    • cd ./opencr_update
    • ./update.sh /dev/ttyACM0  burger.opencr
    • 下図のようにjump_to_fwがOKになっていれば成功。なお、2018年4月1日に実行したところ、ファームウェアバージョンは1.1.2。Arudino IDEを使う方法だとファームウェアのバージョンを簡単に変更できる。

終わり。

Turtlebot3: 4. 動かそう!

$
0
0

では、Turtlebot3を動かしてみよう! 以下のリモートPC、Raspberry Pi3、OpenCRの設定が終わっているものとします。

1. リモートPC

  • 端末を開き、以下のコマンドを実行する。
    • roscore

2. Raspberry Pi3 (Turtlebot 3)

  • 端末を開き、次のコマンドを実行する。
    • sudo apt install ros-kinetic-turtlebot3-teleop
    • roslaunch turtlebot3_bringup turtlebot3_robot.launch
    • roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
      • 以下のコマンドでTurtlebotを操作できるので思いっきり楽しもう!
        • w/x: 加速/ 減速 並進速度
        • a/d:加速/ 減速 角速度
        • スペースキー, s: 停止

 

  • Playstation3 コントローラによるテレオペ
    • 次のサイトのSetup for Jessie and Jessie Liteのとおりで動く。
    • 簡単に設定をまとめると次のとおり。
      • sudo apt-get -y install libusb-dev joystick python-pygame
      • cd src
      • wget http://www.pabr.org/sixlinux/sixpair.c
        gcc -o sixpair sixpair.c -lusb
      • PS3コントローラをRaspberry Pi3にUSBケーブルで接続する。
      • リブートする。
        • sudo reboot
      • cd ~/sec
      • sudo sixpair
      • コントローラのUSBケーブルを外す
      • sudo bluetoothctl
      • discoverable on
      • agent on
      • コントローラのPSボタンを押すとデバイス番号が端末に表示される。例えば、00:06:F7:67:4A:35。
      • connect  デバイス番号。デバイス番号が00:06:F7:67:4A:35の場合は次のコマンドになる。
        • connect 00:06:F7:67:4A:35
      • 問題がなければtrust デバイス番号。
        • connect 00:06:F7:67:4A:35
      • succeededと表示されればOK
      • quit
      • sudo reboot
    • ノードを起動
      • roslaunch turtlebot3_bringup turtlebot3_robot.launch
      • PS3コントローラのUSB端子側に4個のLEDがあり赤く点灯している番号-1がデバイス番号。例えば、2が赤く点灯していると/dev/input/js1になる。デバイス番号のデフォルトがjs0なので1以外の場合は以下のようjoy_devパラメータを指定してコマンドを実行する。
      • roslaunch teleop_twist_joy teleop.launch joy_dev:=/dev/input/js1
      • コントローラの1番ボタンを押しながら、左側のジョイスティックを倒すとロボットが移動する。

終わり

コンピュータ工学Ⅰ

$
0
0

第1までに以下のホームワークをやってこよう!

  • 次のソフトウェアを次週までにインストールしよう。
  • 次のソフトウェアをダウンロードして解凍しよう。
    • gtypist(学内のみインストール可)

以上

YOLO V3に変身!?

$
0
0

TEDにも登場したリアルタイム物体検出DNN(Deep Neural Network)のYOLOがVersion 3にバージョンアップしYOLO V3に変身したので試したときのメモ。仮面ライダーみたいに大幅にバージョンアップしたのか?

上の例では、処理時間がV2が18.9[ms]、V3が22.7[ms]と多少遅くなっているが、予測確率が80%台から90%台と10%近く向上している。

  • 環境
    • CROYDON (BTO組立パソコン)
      (CPU: Intel i7-8700K, GPU: Nvidia GTX 1080Ti, Memory:32GB)
    • Motherboard: ASRock Fatal1ty Z370 Gaming K6
    • Xubunut16.04.1
    • Kernel 4.4.0-119-generic
    • gcc/g++ 5.4.0
  • Darknetのインストール
  • Yolo: Real Time Object Detectionのインストール
    • cd ~/src/darknet
    • 学習済みの重み(パラメータ)ファイルをダウンロード
      • wget http://pjreddie.com/media/files/yolov3.weights
    • サンプルの実行
      • ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
  • 実行方法
    • ウェブカメラ
      •  ウェブカメラをPCに接続し以下のコマンドを実行
      • ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
    • 動画ファイル
      • Webm形式の動画ファイルは問題なく動作する。
      • ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <video file>
  • テスト
    • 下図はウェブカメラで本棚を撮ったときの識別結果。私の環境では約30フレーム/秒でリルタイムで識別でき、Cupの識別率は90%後半で安定して検出していた。今まで、YOLOの識別率が悪いので、AlexNetなどと組み合わせて使っていたが、V3なら必要ないかもしれない。いろいろ試してみよう。

以上

YOLO V3:オリジナルデータの学習

$
0
0

YOLO V3にオリジナルデータを学習させたときのメモ。この記事はチェックができていないので、注意してください。

Yoloで学習させるためには以下のものを準備する。

  •  1. 学習用データの準備
    • データ保存用のディレクトリを作る。この例では、~/data/wrsとする。
    • Yolo学習用データセット作成ツールlabelImgを使い学習用の画像ファイルとアノテーションファイルを作る。アノテーションファイルはYoloで検出オブジェクトのクラスと矩形の位置・サイズが格納されており、画像ファイルと同じ名前で拡張子が異なる。インストールや使い方等はここを参照。
    • 作成した全ファイルをデータ保存用ディレクトリに移動する。
    • Yoloの訓練用ファイルtrain.list、テスト用ファイルtest.listを作成するプログラムをgithubからクローンする。
      • cd ~/src
      • git clone https://github.com/demulab/divide_files.git
    • ビルド・実行
      • gcc -o divide_files divide_files.c
      • cd ~/data/wrs
      • ~/src/divide_files/divide_files [テストデータの割合]
        • ここで [テストデータの割合]に全データに対するテストデータの割合を入れる。例えば、テストデータを30%にしたければ0.3とする。引数を省略するとテストデータを20%にする。
        • 成功すると~/data/wrs/train.listと~/data/wrs/test.listができる。
  • 2. 設定ファイル
    • データ設定ファイル: ~/src/darknet/cfg/wrs.dataの例
      1. classes=3
      2. train = /home/user_name/data/wrs/train.list
      3. valid = /home/user_name/data/wrs/test.list
      4. names = /home/user_name/data/wrs/names.list
      5. backup = /home/user_name/data/wrs/backup
    • クラス名ファイル: ~/src/darknet/data/wrs/names.listの例
      1. onigiri
      2. sandwich
      3. bento
    • ネットワーク設定ファイル: ~/src/darknet/cfg/wrs.cfg
      • cd ~/src/darknet/cfg
      • cp  yolov3-voc.cfg  wrs.cfg
      • wrs.cfgのclassesとfiltersを変更する。6箇所ある。例えばクラス数が3の場合は次のように変更する。filters=(クラス数+5)*3なので、filtersは24となる。
        • 605行目 filters=24
        • 611行目 classes=3
        • 689行目 filters=24
        • 695行目 classes=3
        • 691行目 filters=24
        • 779行目 classes=3
  • 3. ネットワークのウェイトを保存する間隔を変更
    • ~/src/darknet/examples/detector.cでは、ネットワークのウェイトを保存する間隔は138行目で次のようになっている。つまり、学習回数が1000回未満のときは100回毎に保存し、それ以降は10000回毎に保存する。なお、ウェイトはデータ設定ファイルでしたディレクトリbackupに保存される。
      • if (i%10000==0 || (i < 1000 && i%100 == 0)) {
    • これを10000回までは1000回毎にも保存したければ次のように変更する。
      • if (i%10000==0 || (i <= 1000 && i%100 == 0)||  (i <=10000 && i % 1000 ==0)) {
  • 4. 学 習
    • Imagenetで学習済みのウェイトを使うのでダウンロードする。
      • cd ~/src/darknet
      • wget https://pjreddie.com/media/files/darknet53.conv.74
    • 次のコマンドで学習する。
      • cd ~/src/darknet
      • GPUが1個の場合
        • ./darknet detector train cfg/wrs.data cfg/wrs.cfg darknet53.conv.74
      • GPUが2個の場合
        • ./darknet detector train cfg/wrs.data cfg/wrs.cfg darknet53.conv.74 -gpus 0,1
  • 5. テスト
    • 学習で自動的に保存されたウェイトを使ってテストする。
    • テスト用設定ファイルの作成
      • cd ~/src/darknet/cfg
      • cp wrs.cfg  wrs_test.cfg
      • wrs_test.cfgの1〜7行目を以下のように変更する。
        • [net]
          # Testing
          batch=1
          subdivisions=1
          # Training
          #batch=64
          #subdivisions=16 # 16
    • 画像
      • ./darknet detector test cfg/wrs.data cfg/wrs_test.cfg ~/data/wrs/backup/wrs_10000.weights  ~/data/wrs/training_images/test.jpg
      • 上の例で最後から2番目の引数はbackupに保存された10000回学習したウェイト、最後はテストする画像ファイルなので適宜変更してください。
    • カメラ
      • ./darknet detector demo cfg/wrs.data cfg/wrs_test.cfg ~/data/wrs/backup/wrs_10000.weights

以上

 

YOLO V3: ROSで使う (darknet_ros)

$
0
0

YOLO V3をROSで使うためにコードを書こうと思ったが、すでにdarknet_rosがV3に対応している。darknet_rosのインストール、設定法と使い方のメモ。

  • 参考サイト
  •  インストール
    • cd ~/catkin_ws/src
    • git clone –recursive git@github.com:leggedrobotics/darknet_ros.git
      • SSH keyを設定しないとクローンできない。上のgithubのREADME.mdではSSH keyの設定方法としてここにリンクが張られている。その方法で概ね良いが、bitbucketの設定でSSH keyを設定するように書いているが、クローンするのはgithubなので、githubの設定でSSH keyを設定する。
    • cd ..
  • ビルド
    • catkin_make -DCMAKE_BUILD_TYPE=Release
  • ウェイトのダウンロード
    • yolov2-tiny.weightsとyolov3.weightsはcatkin_makeすると自動的にダウンロードするようにCMakeList.txtに書かれている。その他のウェイトのダウンロード方法は以下のファイルを参照。
      • ~/catkin_ws/src/darknet_ros/darknet_ros/yolo_network_config/weights/how_to_download_weights.txt
  • 自分のオブジェクトを検出する方法
    • ウェイトwrs_10000.weightsと設定ファイルwrs_test.cfgを次のディレクトリに保存する。これらのファイルは学習で使ったもの。
      • catkin_ws/src/darknet_ros/darknet_ros/yolo_network_config/weights/
      • catkin_ws/src/darknet_ros/darknet_ros/yolo_network_config/cfg/
    • 次のROS用の設定ファイルを修正する。
      • catkin_ws/src/darknet_ros/darknet_ros/config/ros.yaml
        • ウェブカメラを使う場合は、サブスクライブするカメラ画像のトピック名の変更が必要。
        • この例では次のように変更。
          camera_reading:
          topic: /usb_cam/image_raw
          queue_size: 1
      • cd ~/catkin_ws/src/darknet_ros/darknet_ros/config
      • cp yolov3.yaml  wrs.yaml
      • wrs.yamlの内容を変更する。この例では以下にした。yolo_model:

        config_file:
        name: wrs_test.cfg
        weight_file:
        name: wrs_10000_0415.weights
        threshold:
        value: 0.3
        detection_classes:
        names:
        – onigiri
        – sandwich

    • launchファイルを必要があれば修正する
      • cd ~/catkin_ws/src/darknet_ros/darknet_ros/launch
      • ここでは修正しなかった。
  • 実行方法
    • カメラの起動
      • roscore
      • rosrun usb_cam usb_cam_node
    • darknet_ros起動
      • roslaunch darknet_ros yolo_v3.launch

以上

 

 

RoboCup Japan Open 2017: KIT Happy Robot 3位入賞!

$
0
0

ロボカップジャパンオープン2017大垣が終了しました。夢考房RoboCup@Homeプロジェクトとロボティクス学科出村研究室の合同チームKIT Happy Robotはオープンプラットフォームリーグ(OPL)で3位入賞しました。

100点満点に換算して、1位のHibikino Musashiチームが100点、2位のO.I.T. が61.0点、3位のKIT Happy Robotは60.3点でした。2位と3位は僅かな差です。今年、カナダで開催される世界大会 OPLリーグ にはHibikino MusashiチームとKIT Happy Robotの2チームが出場します。O.I.T.チームの分まで頑張ります。

世界大会へ向けた課題として浮上したのは以下の点です。

  • データセットの作成を含めた学習の高速化:現在の手法では、GPUを搭載したデスクトップPC学習に半日程度かかるので、オブジェクトの公開から競技までの時間が短いと厳しい。
  • 会場での計算機資源(GPU搭載PC)の確保:GPU搭載PCを会場に持参しなかったので、金沢のメンバーに画像データを夕方送り、アノテーションデータを作成、学習をしてもらい、翌朝ニューラルネットワークのウェイトを受け取った。テストの結果、そのウェイトでは十分な精度が出なかった。リモートでの学習がうまくいかない場合に備えて、オンサイトでも学習できる計算機資源を準備する。
  • 夢考房プロジェクトと研究室メンバーとの連携:ジャパンオープはタスクも少ないので夢考房メンバーが主にタスクを担当し、研究室メンバーは音声認識などの要素技術でサポートした。世界大会はタスクも多いので、夢考房と研究室のハッピーロボット、メンバーが連携して臨みたい。

夢考房や研究室での物体識別やマニピュレーションはほぼ問題ないので、上記の問題点を解決すれば、十分世界と戦えると思います。

なお、KIT Happy Robotは院生1名、学部4年次生2名、2年5名のチームです。大会期間中、チームワークがとても良く、最後まで諦めない姿勢で活動していました。とても若いメンバーなので世界大会でさらなる活躍が期待されます。

 


OpenKiosk: 無人情報端末化

$
0
0

キオスク端末とは公共の場などに置かれた無人の情報端末のことで、OpenKioskはWindows、Linux、OSXなどでキオスク端末を実現するオープンソースのソフトウェアです。授業ではオンラインテストに使います。

  • インストール
    • ここをクリックしてソフトウェアをダウンロードする。
    • openkiosk-47.0.2.2-2017-05-11.msiをダブルクリックする。
    • 以下のウインドウが開くので[Next>]をクリック
    • [I accept the terms in the License Agreement]にチェックを入れて[Next>]をクリック。
    • [Install]をクリック
    • [Install]をクリック
    • 以下の画面になる。[Finish]をクリックしてインストールを終了する。
  • 設定
    • デスクトップにOpenKioskのアイコンがあるのでダブルクリックして起動する。
    • OpenKioskが全画面表示される。[Shiftキー]を押しながら[F1キー]を押す。パスワードを聞かれるので、初期値adminを入力する。
    • 左メニューバー [General]をクリック
      • Home Page: 指定されたアドレスを設定する。
    • 左メニューバー [Content]をクリック
      • Pop-ups: Block pop up windowsにチェックを入れる
    • 左メニューバー [OpenKiosk]をクリック
      • Sessionタブをクリック
        • デフォルトではReset Sessionにチェックが入っており、5分経過すると強制的にログアウトになるので、下図のようにチェックを外す。これは重要。

      •  Screensタブをクリック
        • Full Screen: Enable Full Screenにチェックを入れる
      • Customizeタブをクリック
        • Tabbed Browsing: Enable Tabbed Browsingのチェックを外す。下図の赤枠でもしチェックがついていたら外す。
      • 以上で設定終わり。File->exitでOpenKioskを終了する。

以上

 

 

Ubuntu16.04: OpenCV3.4.0のインストール

$
0
0

Ubuntu16.04にOpenCV3.4.0をソースからビルドしインストールしたときのメモ。OpenCV3.4.1がすでにリリースされており、ソースからビルドでき、サンプルプログラムは問題なく動いた。ただし、Yolo V3を実行するときにエラーが出る。3.4.1にバグがあるので、3.4.0をインストールした。

http://docs.opencv.org/trunk/d7/d9f/tutorial_linux_install.html

環境

  • Laptop
    • DELL Alienware 15 R4
    • CPU: Intel i7-8750K, Memory:16GB, GPU: Nvidia 1070, Memory: 8GB)
    • xubunut16.04.2
    • Kernel 4.13.0-43-generic
    • gcc/g++ 5.4.0
  •  Desktop
    • CPU: Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz (6 core)
    • GPU: NVIDIA GTX 1080Ti
    • Memory: 32GB

準備

  • sudo apt-get install build-essential
  • sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
  • sudo apt install checkinstall auto-apt ccache

ソースコードのダウンロード

  • cd
  • mkdir src
  • cd src
  • 以下をクリックしてopencv-3.4.0をダウンロードする。
  • tar xvzf opencv-3.4.0.tar.gz
  • ln -s opencv-3.4.0  opencv
  •  以下をクリックしてopencv_contrib-3.4.0をダウンロードする。
  • tar xvzf opencv_contrib-3.4.0.tar.gz
  • ln -s opencv_contrib-3.4.0 opencv_contrib

ソースのビルド

  • cd ~/src/opencv
  • mkdir build
  • cd build
  • cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=~/src/opencv_contrib/modules  -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_VTK=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_OPENGL=ON -D WITH_CUDA=ON -D CUDA_ARCH_BIN=”6.1″ -D CUDA_ARCH_PTX=”6.1″ ..
  • make -j 12
    • コンパイルが終わるまで30分ぐらいかかりました。
  • sudo make install
  • sudo /bin/bash -c ‘echo “/usr/local/lib” > /etc/ld.so.conf.d/opencv.conf’
  • sudo  ldconfig

テスト

  • cd ~/src/opencv/samples/data
  • ~/src/opencv/build/bin/cpp-example-facedetect lena.jpg
  • 下の出力されれば成功。お疲れ様!

 

Deep Learning用Alienware 15 環境設定メモ (Xubuntu16.04.2, Cuda9.2)

$
0
0

Deep Learning用に購入したAlienware 15 R4にxubuntu16.04.2, Cuda9.2をインストールしたときのメモ。RoboCup@Home Domestic Standard Platform LeagueでTOYOTO HSRロボットのオフィシャルラップトップとしてAlienwareが指定されているので購入した。性能が高くコストパフォーマンスも良いが、大きく重いのが難点。

  • 環境
    • DELL Alienware R4
      (CPU: Intel i7-8750K, Memory:16GB, GPU: Nvidia 1070, Memory: 8GB)
    • xubunut16.04.2
    • Kernel 4.13.0-43-generic
    • gcc/g++ 5.4.0
  • CAPS LOCKとCTRLキーの入れ替え
    • /etc/default/keyboardのXKBOPTIONS=”ctrl:nocaps”と変更する。
  •  ホームディレクトリにある日本語ファイル名を英語に変換
    • 次のコマンドを端末で実行
      • LANG=C xdg-user-dirs-gtk-update
    • ウインドウが開くので右下の[Update Nmaes]をクリックして変更し、再起動する。
    • Blueth関連のBluemanが「ダウンロード」というファイルがないとエラーを吐くので次のコマンドでBlueman mangerを起動する。
      • sudo blueman-manger
    • 表示->ローカルサービス->転送->転送設定のIncomming FolderでDownloadsを選ぶ。
  •  無線LANの設定
    • 無線LANのデバイス(Killer 1550)を認識しないので以下を参考にドライバをインストールした。
      • https://askubuntu.com/questions/1016903/alienware-17-r4-ubuntu-16-04-wifi-driver
    • git clone https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/backport-iwlwifi.git
    • cd backport-iwlwifi
    • make defconfig-iwlwifi-public
    • sed -i 's/CPTCFG_IWLMVM_VENDOR_CMDS=y/# CPTCFG_IWLMVM_VENDOR_CMDS is not set/' .config
    • make -j 6
    • sudo make install
    • sudo reboot
  •  準備
    • インストールするとIntelのGPUでXが起動するので、Ctlr+Alt+F1でXを落とす
    • sudo apt-get update
    • sudo apt-get upgrade
    • sudo service lightdm stop
  •  NVIDIAドライバのインストール
    • sudo add-apt-repository ppa:graphics-drivers/ppa
    • sudo apt-get update
    • sudo apt install nvidia-396  nvidia-settings
    • sudo reboot
  •  NVIDIAのウェブサイトからCuda9.2のインストール
    • Linux->x86_64->ubuntu->16.04->dev(local)を選択
    • Download (1.2GB)をクリックし、ダウンドードが完了するまで待つ。
    • sudo dpkg -i cuda-repo-ubuntu1604-9-2-local_9.2.88-1_amd64.deb
    • sudo apt-key add /var/cuda-repo-9-2-local/7fa2af80.pub
    • sudo apt-get update
    • sudo apt-get install cuda
    • .bahrcに以下を追加したCUDAのパスを通す
      • export PATH=/usr/local/cuda-9.2/bin${PATH:+:${PATH}}
  • NVIDIAのウェブからcuDNNのインストール
    • nvidiaのdeveloperに登録しないとダウンロードできないので登録する。
    • Download cuDNN v7.1.4 for CUDA9.2をクリック
    • cuDNN v7.1.4 for Runtime Library for Ubuntu16.04 (Deb)とcuDNN v7.1.4 Developer Library for Ubuntu16.04 (Deb)をダウンロードする。
    • sudo dpkg -i libcudnn7_7.1.4.18-11+cuda9.2_amd64.deb
    • sudo dpkg -i libcudnn7-dev_7.1.4.18-1+cuda9.2_amd64.deb
  • OpenCV3.4.0のインストール
  • ROS Kineticのインストール
  • YOLO V3のインストール

終わり

YOLO V2: オリジナルデータの学習

$
0
0

YOLO V2にオリジナルデータを学習させたときのメモ。この記事はチェックが十分にできていないので、注意してください。

Yoloで学習させるためには以下のものを準備する。

  •  1. 学習用データの準備
    • データ保存用のディレクトリを作る。この例では、~/data/wrsとする。
    • Yolo学習用データセット作成ツールlabelImgを使い学習用の画像ファイルとアノテーションファイルを作る。アノテーションファイルはYoloで検出オブジェクトのクラスと矩形の位置・サイズが格納されており、画像ファイルと同じ名前で拡張子が異なる。インストールや使い方等はここを参照。
    • 作成した全ファイルをデータ保存用ディレクトリに移動する。
    • Yoloの訓練用ファイルtrain.list、テスト用ファイルtest.listを作成するプログラムをgithubからクローンする。
      • cd ~/src
      • git clone https://github.com/demulab/divide_files.git
    • ビルド・実行
      • gcc -o divide_files divide_files.c
      • cd ~/data/wrs
      • ~/src/divide_files/divide_files [テストデータの割合]
        • ここで [テストデータの割合]に全データに対するテストデータの割合を入れる。例えば、テストデータを30%にしたければ0.3とする。引数を省略するとテストデータを20%にする。
        • 成功すると~/data/wrs/train.listと~/data/wrs/test.listができる。
  • 2. 設定ファイル
    • データ設定ファイル: ~/src/darknet/cfgディレクトリの中に以下の内容のデータ設定ファイルを作る。classesは識別するクラス数(この例では、おにぎり、サンドイッチ、弁当の3つのクラスがあるので3としている)、上で作成したtrainは訓練用ファイル、validはテスト用ファイル、namesはクラス名ファイル、backupは学習の途中のウェイトを保存するディレクトリ。この例では、データ設定ファイル名を~/src/darknet/cfg/wrs.dataとする。
      classes=3
      train = /home/user_name/data/wrs/train.list
      valid = /home/user_name/data/wrs/test.list
      names = /home/user_name/data/wrs/names.list
      backup = /home/user_name/data/wrs/backup
    • クラス名ファイル: 識別するクラス名。この例では、ファイル名を~/src/darknet/data/wrs/names.listとし、クラスが3つあるので、各クラスに名前をつける。ファイルの中身は以下のとおり。1行に1クラス名なので改行が必要。例えば、10クラスあれば10行になる。
      onigiri
      sandwich
      bento
    • ネットワーク設定:Yoloのネットワークを設定するファイル。この例では、ファイル名を ~/src/darknet/cfg/wrs_train.cfgとしている。
      • cd ~/src/darknet/cfg
      • cp yolov2-voc.cfg  wrs_train.cfg
      • wrs_train.cfgの1〜7行目を以下のように変更する。[net]
        # Testing
        #batch=1
        #subdivisions=1
        # Training
        batch=64
        subdivisions=16 # 16
      • 次に、wrs_train.cfgのclassesとfiltersを変更する。2箇所ある。例えばクラス数が3の場合は次のように変更する。filters=(クラス数+5)*5なので、filtersは40となる。
        • 244行目 classes=3
        • 237行目 filters=40
  • 3. ネットワークのウェイトを保存する間隔を変更
    • ~/src/darknet/examples/detector.cでは、ネットワークのウェイトを保存する間隔は138行目で次のようになっている。つまり、学習回数が1000回未満のときは100回毎に保存し、それ以降は10000回毎に保存する。なお、ウェイトはデータ設定ファイルでしたディレクトリbackupに保存される。
      • if (i%10000==0 || (i < 1000 && i%100 == 0)) {
    • これを10000回までは1000回毎にも保存したければ次のように変更する。
      • if (i%10000==0 || (i <= 1000 && i%100 == 0)||  (i <=10000 && i % 1000 ==0)) {
  • 4. 学 習
    • Imagenetで学習済みのウェイトを使うのでダウンロードする。
      • cd ~/src/darknet
      • wget https://pjreddie.com/media/files/darknet19_448.conv.23
    • 次のコマンドで学習する。
      • cd ~/src/darknet
      • コンピュータにNVIDIAのGPUを1個搭載している場合
        • ./darknet detector train cfg/wrs.data cfg/wrs_train.cfg darknet19_448.conv.23
      • GPUを2個搭載している場合
        • ./darknet detector train cfg/wrs.data cfg/wrs_train.cfg darknet19_448.conv.23 -gpus 0,1
      • なお、学習の終了条件は、wrs.cfgファイルの20行目で次のように8万200回になっているので適宜変更する。
        • max_batches = 500200
  • 5. テスト
    • 学習で自動的に保存されたウェイトを使ってテストする。
    • テスト用設定ファイルの作成
      • cd ~/src/darknet/cfg
      • cp wrs_train.cfg wrs_test.cfg
      • wrs_test.cfgの1〜7行目を以下のように変更する。[net]
        # Testing
        batch=1
        subdivisions=1
        # Training
        #batch=64
        #subdivisions=16 # 16
    • 画像
      • ./darknet detector test cfg/wrs.data cfg/wrs_test.cfg ~/data/wrs/backup/wrs_10000.weights  ~/data/wrs/training_images/test.jpg
      • 上の例で最後から2番目の引数はbackupに保存された10000回学習したウェイト、最後はテストする画像ファイルなので適宜変更してください。
    • カメラ
      • ./darknet detector demo cfg/wrs.data cfg/wrs_test.cfg ~/data/wrs/backup/wrs_10000.weights

以上

 

RealSense D435をROSで使う

$
0
0

RealSense D435をROSで使うメモ。RealSense SDKはapt-getでインストールできるのでとても簡単。ROSのラッパーもすでに提供されているのですぐ使える。このメモはカラー画像の表示まで。

ソフトウェア環境

  • Ubuntu16.04
  • ROS Kinetic
  • RealSense SDK 2.0: (Build 2.12.0)
  • ROS Wrapper: build 2.0.3

RealSense SDKのインストール

  • このページのとおり実施すればよい。以下の手順はその簡単な日本語訳。
  • リポジトリにIntelサーバーを追加
    • echo ‘deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo xenial main’ | sudo tee /etc/apt/sources.list.d/realsense-public.list
  • サーバーの公開鍵を登録
    • sudo apt-key adv –keyserver keys.gnupg.net –sudo apt-get install librealsense2-dbgrecv-key 6F3EFCDE
  • リポジトリのリストと使えるパッケージをリフレッシュする
    • sudo apt-get update
  • デモを実行できるようにインストールする
    • sudo apt-get install librealsense2-dkms
    • sudo apt-get install librealsense2-utils
  • 開発用に追加のパッケージをインストールする
    • sudo apt-get install librealsense2-dev
    • sudo apt-get install librealsense2-dbg
  • リブートする
    • reboot
  • リブートしたらカーネルがアップデートしているか確認する
    • 次のコマンドを実行してrealsenseの文字列があれば成功
    • modinfo uvcvideo | grep “version:”

ROSラッパーのインストール

  • https://github.com/intel-ros/realsense/releases からSource code (realsense-2.0.2.tar.gz)を~/catkin_ws/srcにダウンロードする
  • cd ~/catkin_ws/src
  • tar xvzf realsense-2.0.3.tar.gz
  • cd ~/catkin_ws
  • catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
    • usr/lib/libusb.aがないと怒られたら、次のコマンドを実施する。
      • sudo apt install libusb-dev
  • catkin_make install

実行

  • roslaunch realsense2_camera rs_camera.launch
    • 解像度は640×480 pixel。変更したいときはrs_camera.launchの中を書き換える。
  • rosrun image_view image_view  image:=/camera/color/image_raw
    • 画像が表示されれば成功。

トピック

$ ~/catkin_ws/src/realsense-2.0.2/realsense_ros_camera/launch$ rostopic list
/camera/color/camera_info
/camera/color/image_raw
/camera/color/image_raw/compressed
/camera/color/image_raw/compressed/parameter_descriptions
/camera/color/image_raw/compressed/parameter_updates
/camera/color/image_raw/compressedDepth
/camera/color/image_raw/compressedDepth/parameter_descriptions
/camera/color/image_raw/compressedDepth/parameter_updates
/camera/color/image_raw/theora
/camera/color/image_raw/theora/parameter_descriptions
/camera/color/image_raw/theora/parameter_updates
/camera/depth/camera_info
/camera/depth/image_rect_raw
/camera/depth/image_rect_raw/compressed
/camera/depth/image_rect_raw/compressed/parameter_descriptions
/camera/depth/image_rect_raw/compressed/parameter_updates
/camera/depth/image_rect_raw/compressedDepth
/camera/depth/image_rect_raw/compressedDepth/parameter_descriptions
/camera/depth/image_rect_raw/compressedDepth/parameter_updates
/camera/depth/image_rect_raw/theora
/camera/depth/image_rect_raw/theora/parameter_descriptions
/camera/depth/image_rect_raw/theora/parameter_updates
/camera/extrinsics/depth_to_color
/camera/extrinsics/depth_to_infra1
/camera/extrinsics/depth_to_infra2
/camera/infra1/camera_info
/camera/infra1/image_rect_raw
/camera/infra1/image_rect_raw/compressed
/camera/infra1/image_rect_raw/compressed/parameter_descriptions
/camera/infra1/image_rect_raw/compressed/parameter_updates
/camera/infra1/image_rect_raw/compressedDepth
/camera/infra1/image_rect_raw/compressedDepth/parameter_descriptions
/camera/infra1/image_rect_raw/compressedDepth/parameter_updates
/camera/infra1/image_rect_raw/theora
/camera/infra1/image_rect_raw/theora/parameter_descriptions
/camera/infra1/image_rect_raw/theora/parameter_updates
/camera/infra2/camera_info
/camera/infra2/image_rect_raw
/camera/infra2/image_rect_raw/compressed
/camera/infra2/image_rect_raw/compressed/parameter_descriptions
/camera/infra2/image_rect_raw/compressed/parameter_updates
/camera/infra2/image_rect_raw/compressedDepth
/camera/infra2/image_rect_raw/compressedDepth/parameter_descriptions
/camera/infra2/image_rect_raw/compressedDepth/parameter_updates
/camera/infra2/image_rect_raw/theora
/camera/infra2/image_rect_raw/theora/parameter_descriptions
/camera/infra2/image_rect_raw/theora/parameter_updates
/camera/realsense_ros_camera_manager/bond
/camera/realsense_ros_camera_manager/parameter_descriptions
/camera/realsense_ros_camera_manager/parameter_updates
/rosout
/rosout_agg
/tf_static

以上

Viewing all 761 articles
Browse latest View live