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

Ubuntu18.04: ROS Melodicのインストール

$
0
0

ROS Melodicのインストールメモです。この記事はROS のオフィシャルウェブサイトの次の日本語記事を簡略化しています。詳しい説明は次のリンクをご覧ください。なお、firewall外の環境を前提にしています。

———————————————————————————————-

1.準備

(1) 端末(ターミナル、terminal)を開いて、以下のコマンドをコピペして、Enterキーを押し実行する。パスワードを聞かれたら入力する。

  • $ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

 (2)  同様にして以下のコマンドを実行する。

  • $ sudo apt install curl
  • $ curl -sSL 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add -

2. インストール

(1)  以下のコマンドでインストール先をアップデートし、ソフトウェアを最新バージョンにする。

  • $ sudo apt update
  • $ sudo apt upgrade

(2)  ROS Melodicのインストール

  • $ sudo apt install ros-melodic-desktop-full

3. 初期設定

(1)  以下のコマンドでrosdepを初期化する。rosdepはシステム依存するソフトウェアをインストールするツール。1行目を入力したらEnterキーを押し、2行目を入力したらEnterキーを押す。rosdepはコンパイルを楽にするツール。以下の作業はProxy環境下では失敗するので、スマホのデザリングや自宅など学外ネットワークで実施すること。

  • $ sudo rosdep init
    • 上記のコマンドを実行して以下のエラーが出る場合は、
      Traceback (most recent call last):
      File “/usr/bin/rosdep”, line 3, in <module>
      from rosdep2.main import rosdep_main
      ModuleNotFoundError: No module named ‘rosdep2’
    • 以下のコマンドを実行して必要なpythonモジュールをインストールする。
      • sudo -H pip3 install -U rosdep
  • $ rosdep update

(2) 環境設定。楽をするための設定。以下のコマンドを端末にコピペしてEnterキーを押す。1行ずつ実施すること。

  • $ cd
  • $ echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
  • $ source ~/.bashrc

(3) rosinstall 。インストールが簡単になるツールを以下のコマンドでインストールする。

  • $ sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential

終わり


ROS: catkin buildコマンド

$
0
0

この記事は以下のROS Wikiの記事を参考に、ビルドコマンドとして新しいcatkin buildを使います。従来のcatkin_makeコマンドと比較して、パッケージ毎に違う環境(isolated environment)でビルドできたり、並列ビルドできるので高速であり、ROSのパスが通っていればどこでもbuildできたり、一つのパッケージだけ簡単にビルドできたりするところがcatkin_makeとは違う優れたところです。

  • catkin_tool
  • ROSパッケージを作る
  • ROSのパッケージをビルドする
  • エラー
    • すでにcatkin_makeでビルドした場合は、~/catkin_wsにあるdevel、buildのディレクトリを消してからcatkin buildし直す必要があります。それでもエラーが出る場合は、ホームディレクトリに.catkin_toolsというフォルダがないかls -aコマンドで確認して、あったらフォルダ毎削除してください。

 


(1) まず、以下のコマンドでcatkinツールをインストールします。
$ sudo apt install python-catkin-tools

(2) セットアップする。なお、sourceコマンドはファイルに書かれたコマンドを現在のシェルで実行するコマンドです。
$ source /opt/ros/melodic/setup.bash
(3) mkdirコマンドでディレクトリを作る。-pのオプションはcatkin_wsディレクトリをない場合はそれを作り、その中にsrcディレクトリを作ってくれる便利なオプション。なお、~はホームディレクトリの意味。
$ mkdir -p ~/catkin_ws
(4) cdコマンドでディレクトリを移動する。
$ cd ~/catkin_ws
(4) 次のコマンドでワークスペースを初期化する。
$ catkin init

2. ビルドの方法
ROSではソースコードをビルドするときにcatkin buildコマンドを使います。このコマンドを実行するときは~/catkin_ws以下のディレクトリならどこでも良いところがcatkin_makeと違い便利なところです。
次のコマンドを実行してください。
$ cd ~/catkin_ws
$ catkin build 
実行後にlsコマンドを実行すると、build、develとlogのディレクトリが新たに作成されていることがわかります。

3.  設定
ここで作成したcatkin_wsを有効にするためには以下のコマンドを実行する必要があります。
$ source ~/catkin_ws/devel/setup.bash
毎回、実行するのは面倒なので~/.bashrcの一番最後にテキストエディターgeditで、上のコマンドを付け加え保存しましょう。まず、geditがインストールされていない場合は次のコマンドでインストールしてください。
$ sudo apt install gedit

ホームディレクトリに移動します。
$ cd
次のコマンドでgeditを実行します。
$ gedit .bashrc

.bashrcの中にsource /opt/ros/melodic/setup.bashがない場合は、下のように2行追加してください。

source /opt/ros/melodic/setup.bash
source ~/catkin_ws/devel/setup.bash

保存はgeditの上ツールバー右にある「Save」をクリックします。では、うまく設定されたか、次のコマンドで確認しましょう。
$ source .bashrc
$ echo $ROS_PACKAGE_PATH
つぎのように表示されたら成功です。

失敗した場合は、設定をもう一度実行してください。打ち間違えがないか注意しましょう。

4. パッケージの作成
準備ができたので早速、パッケージを作りましょう。パッケージは次のcatkin_create_pkgコマンドで作ります。依存パッケージはそのパッケージを作るために必要なパッケージです。
catkin_create_pkg <パッケージ名> [依存パッケージ1] [依存パッケージ2] [依存パッケージ3]
helloパッケージを作りましょう!
$ cd ~/catkin_ws/src
$ catkin_create_pkg hello roscpp
上手く作成できたか確認します。
$ cd ~/catkin_ws/src/hello
$ ls
CMakeLIsts.txt, include, package.xml, srcができていれば成功です。
package.xmlに作成者(maintainer)の情報などを書きます。ここでは省略します。ROS Wikiのpackage.xmlを参考にしてください。

5. ソースコードの作成とビルド
$ cd ~/catkin_ws/src/hello/src
$ gedit hello_node.cpp

エディタが開くので以下をソースコードを打ち込み「保存(S)」をクリックして保存する。

geditで~/catkin_ws/src/hello/CMakeLists.txtを開き、134行目のadd_executableで始まる行と147~149行目のtarget_link_librariesで始まる3行のコメントを次のように外して保存する(つまり、#を消す)。

ビルドします。まず、catkin_wsディレクトリへ移動します。
$ cd ~/catkin_ws
今回はhelloノードだけをビルドすればよいのでcatkin buildの後にビルドしたhelloノードを指定します。全パッケージをビルドしたいときはcatkin buildだけでOKです。
$ catkin build hello

6. 実行
以下のroscoreコマンドでMaster(マスター)を実行する。他のノードを実行する前に必要です。
$ roscore
ノードを実行するためにはrosrunコマンドを使います。使い方は次のとおり。
rosrun パッケージ名 実行ファイル名
別の端末を開き、rosrunコマンドでhello_nodeノードを実行する。
なお、hello_nodeは~/catkin_ws/devel/lib/hello/hello_nodeにcatkin buildコマンドで作られたものです。
$ rosrun hello hello_node
次のように表示されたら成功。終わり。お疲れ様!

 

Ubuntu18.04: RealSense D435iをROS Melodicで使う

$
0
0

RealSense D435iをROS Melodicで使うメモ。D435iはD435にIMUが搭載された新しい機種。D435と同じようにインストールできた。ROSのラッパーもありすぐ使える。このメモはカラー画像の表示まで。なお、ビルドコマンドはcatkin_makeではなくcatkin buildを使用しているので、catkin_makeを使っている方は適宜読み替えてください。

環 境

  • Razer Blade 15
  • Ubuntu18.04
  • ROS Melodic
  • RealSense SDK 2.0

RealSense SDKのインストール

  • このページのとおり実施すればよい。以下の手順はその簡単な日本語訳とささやかな補足。
  • サーバーの公開鍵を登録
    • $ sudo apt-key adv --keyserver keys.gnupg.net --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE 
  • リポジトリにIntelサーバーを追加
    • $ sudo add-apt-repository "deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo bionic main" -u
  •  リポジトリのリストと使えるパッケージをリフレッシュする
    • $ sudo apt update
  • ライブラリのインストール
    • $ sudo apt install librealsense2-dkms
    • $ sudo apt install librealsense2-utils
  • 開発用に追加のパッケージをインストールする
    • $  sudo apt install librealsense2-dev
    • $ sudo apt install librealsense2-dbg
  • RealSenseのUSBケーブルを抜き差しして以下のコマンドを実行する。ウインドウが開くので、左サイドバーにあるStereo ModuleとRGB Cameraをoffからonにすると、上のような画像が現れる。
    • $ realsense-viewer

パッケージのアップグレード

  • 以下の手順でアップグレードする。ここでは上でインストールしたパッケージだけアップグレードする。アップグレード可能なすべてのパッケージをアップグレードすると稀に動かなくなるパッケージがあるのでこの方法はお勧め。
    • $ sudo apt update
    • $ sudo apt --only-upgrade install librealsense2-utils librealsense2-dkms librealsense2-dev librealsense2-dbg 

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

  • https://github.com/intel-ros/realsense/releases からSource code (realsense-2.0.3.tar.gz)を~/catkin_ws/srcにダウンロードする
  • $ cd ~/catkin_ws/src
  • $ git clone https://github.com/pal-robotics/ddynamic_reconfigure.git
  • $ catkin build
  • $ git clone https://github.com/IntelRealSense/realsense-ros.git
  • $ catkin build -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
  • $ catkin install

実行

  • $ roslaunch realsense2_camera rs_camera.launch
    • 解像度は640×480 pixel。変更したいときはrs_camera.launchの中を書き換える。
  • カメラ画像を表示するimage_viewノードは、melodicではaptでインストールできないので、rqt版のrqt_image_viewをインストールする。
    • $ sudo apt install ros-melodic-rqt-image-view
  • $ rosrun rqt_image_view rqt_image_view
    • 左上の選択ボックスからトピック/camera/color/image_rawを選択して、下のように画像が表示されれば成功。

トピック

~/catkin_ws$ 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

以上

Ubuntu18.04: darknetをROSで使う (darknet_ros)

$
0
0

YOLO V3をROSで使うためのパッケージdarknet_rosのインストール、設定法と使い方のメモ。

  • 本家サイト
  •  SSH keyの設定 (Ubuntu)
    • SSH keyを設定しないとインストールできないので端末を開き、ssh-keygenコマンドでkeyを設定する。すでにUbunutとgithubに設定している場合はこの作業を飛ばす。
    • $ ssh-keygen
      • Enter file in which to save the key (/home/user_name/.ssh/id_rsa):
        • keyの保存先を聞かれる。デフォルトで良いのでエンターキーを押す。
      • Enter passphrase (empty for no passphrase):
        • passphrase(パスフレーズ)を聞かれるので設定したいパスフレーズを入力する。パスフレーズはパスワードの長いもの。
      • Enter same passphrase again:
        • 同じパスフレーズを入力する。
      • Your identification has been saved in /home/user_name/.ssh/id_rsa.
      • Your public key has been saved in /home/user_name/.ssh/id_rsa.pub.
        • プライベイトキー(秘密鍵) ~/.ssh/id_rsaとパブリックキー(公開鍵)~/.ssh/id_rsa.pubが生成される。
    • パスフレーズの登録
      • $ eval 'ssh-agent'
      • $ ssh-add ~/.ssh/id_rsa
        • 上で入力したパスフレーズを入力する。
  • SSH Keyの設定(github)
    • githubにも公開鍵を設定する。
    • githubのアカウントがなければ作成してサインインする。
    • settings -> personal setting -> SSH and PGP keys を選択
    • 右上の[New SSH Key]をクリックする。
    • Titleに公開鍵名id_rsa.pubを入力し、keyにはid_rsa.pubファイルの中身をコピペして、[Add SSH key]をクリックして鍵を追加する。
  •  インストール
    • $ cd ~/catkin_ws/src
    • $ git clone --recursive git@github.com:leggedrobotics/darknet_ros.git
      • SSH keyを設定しないとクローンできない。できない場合はもう一度、上のSSH Key設定作業をする。
    • $ cd ..
  • ビルド
    • $ catkin build -DCMAKE_BUILD_TYPE=Release
      • 重みファイルをダウンロードするので少し時間がかかる。私の環境では7分かかった。
  • 重みファイルのダウンロード
    • yolov2-tiny.weightsとyolov3.weightsはcatkin buildすると自動的にダウンロードする。その他のウェイトが欲しい場合は、以下のファイルを参照。
      •  ~/catkin_ws/src/darknet_ros/darknet_ros/yolo_network_config/weights/how_to_download_weights.txt
  • 実行方法
    •  カメラの起動
      • USB Cameraの場合
        • $ roslaunch usb_cam usb_cam-test.launch
      • RealSense D435,D435iの場合
        • $ roslaunch realsense2_camera rs_camera.launch
    • darknet_ros起動
      • $ roslaunch darknet_ros yolo_v3.launch
        • 一番上図のようなYOLO V3のウインドウが開き、物体が識別されていれば成功。私の環境では20フレーム/sの速度で物体識別できていた。
  •  自分のオブジェクトを検出する方法
    • 学習で作られた重みファイル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
        • ウェブカメラを使う場合は、サブスクライブするカメラ画像のトピック名の変更が必要。
        • この例ではusb_cameraの場合は次のように変更。
          camera_reading:
          topic: /usb_cam/image_raw
          queue_size: 1
        • Realsense  D435の場合は次のように変更
          camera_reading:
          topic: /camera/color/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
      • yolo_v3.launchの13行目yolov3.yamlを先ほどコピーしたwrs.yamlに変更する。

以上

 

 

Ubuntu18.04: PyBulletインストールメモ

$
0
0

PyBulletをUbuntu18.04にインストールしたときのメモ。物理エンジンBullet Physics SDKをダウロードしてソースからビルドする。PyBulletはBulletのpythonモジュールでソースに含まれる。

  • 参考サイト
  • bullet3のインストール
    • $ cd ~/src        (srcディレクトリがなければ作成する)
    • $ git clone https://github.com/bulletphysics/bullet3.git
    • $ cd bullet3
    • $ ./build_cmake_pybullet_double.sh
    • buildに成功するとBulletのサンプルプログラムを実行できるバイナリApp_ExampleBrowserができる。
    • そのディレクトリへ移動して実行する。
      • $ cd ~/src/bullet3/build_cmake/examples/ExampleBrowser
      • $ ./App_ExampleBrowser
    • 上図のようなExample Browserが立ち上がる。図はExperiments->Kuka IKを選択した。
  • pybulletの実行
    • .bashrcに以下を追加する。
      • export PYTHONPATH=~/src/bullet3/build_cmake/examples/pybullet
    • 以下のコマンドで設定を反映させる。
      • $ source ~/.bashrc
    • サンプルプログラムがあるディレクトリへ移動する。
      • $ cd ~/src/bullet3/examples/pybullet/examples
    • いろいろなファイルがあるがここでは、createVisualShape.pyを試す。
      • $ python3 humanoid_manual_control.py
    • 下図のようなウインドウが開けば成功。

終わり

3Dデプスカメラ SCS Occipital

$
0
0

国際ロボット展2019の株式会社アルゴのブースでSCSという3Dデプスカメラに興味を持った。RealSense と同程度のサイズながら点群が綺麗、0.3mから10mまで見え、消費電力も最大3Wと小さい。もちろん、ROSにも対応している。良いかもしれない。

小型・軽量3Dデプスカメラ SCS Occipital | 特殊カメラ | 株式会社アルゴ
Occipital社のSCSは2つのIRカメラとレーザーパターン投影による独自の3Dセンシング技術(特許出願中)で、30cm~最大10mまでの撮影が可能です。

Ubuntu18.04: Proxy環境下でaptできないときの設定

$
0
0

大学等のProxy環境下でaptできないときの設定。

  • .bashrcの最後に好きなエディタを使い以下の3行を追加する。
    export ftp_proxy="ftp://プロキシサーバー名:ポート番号/"
    export http_proxy="http://プロキシサーバー名:ポート番号/"
    export https_proxy="https://プロキシサーバー名:ポート番号/"
  • aptの設定を行う。
    • $ cd /etc/apt/apt.conf.d
    • 好きなエディタを使い上のディレクトリ下でapt.confを作成する。ファイルの中身は次のとおり。
      Acquire::http::proxy "http://プロキシサーバー名:ポート番号/";
      Acquire::https::proxy "https://プロキシサーバー名:ポート番号/";
      Acquire::ftp::proxy "ftp://プロキシサーバー名:ポート番号/";

以上

 

ROS演習12-2019:ロボットアーム2

$
0
0

arm_sensor
この記事は私が金沢工業大学ロボティクス学科で担当している講義ロボットプログラミングⅡ用です。今回は先回作った2自由度のロボットアームの先端に位置センサを取り付け、先端位置を取得するプログラムを作ります。

位置センサ用プラグインの追加
gazeboのロボットモデルに位置センサを取り付けるために、~/catkin_ws/src/armbot2_sensor/urdf/armbot2_sensor.gazeboに以下のプラグインを追加します。

 
 <gazebo>
    <plugin name="p3d_base_controller" filename="libgazebo_ros_p3d.so">
      <alwaysOn>true</alwaysOn>
      <updateRate>100.0</updateRate>
      <bodyName>link_sensor</bodyName>
      <topicName>/armbot2_sensor/pose_ground_truth</topicName>
      <gaussianNoise>0</gaussianNoise>
      <frameName>base_link</frameName>
      <xyzOffsets>0 0 0</xyzOffsets> 
      <rpyOffsets>0 0 0</rpyOffsets>
    </plugin>
  </gazebo>

ソース
前週のソースコードにgroundTruthCallback関数を追加し、トピック/armbot2_sensor/pose_ground_truthTurtlebtをサブスクライブするだけで、位置センサからのデータを取得できます。

 
#include "ros/ros.h"  // rosで必要はヘッダーファイル
#include "std_msgs/Float64.h"
#include "sensor_msgs/JointState.h"
#include "nav_msgs/Odometry.h"

using namespace std;

std_msgs::Float64 tmp_joint1, tmp_joint2;
double pos_x, pos_y, pos_z;


void groundTruthCallback(const nav_msgs::Odometry::ConstPtr& msg)
{ 
  //msg->pose.pose.position, msg->pose.pose.orientation, 
  pos_x = msg->pose.pose.position.x;
  pos_y = msg->pose.pose.position.y;
  pos_z = msg->pose.pose.position.z;
  ROS_INFO("Pose: x=%f y=%f \n",pos_x,pos_y);
}

void monitorJointState(const sensor_msgs::JointState::ConstPtr& jointstate)
{
  tmp_joint1.data = jointstate->position[0];
  tmp_joint2.data = jointstate->position[1]; 
}


int main(int argc, char **argv)
{
  ros::init(argc, argv, "teleop_sensor"); 
  // initでROSを初期化して、my_teleopという名前をノードにつける                        
  // 同じ名前のノードが複数あってはいけないので、ユニークな名前をつける

  ros::NodeHandle nh;
  // ノードハンドラの作成。ハンドラは必要になったら起動される。
  ros::Publisher  pub_joint1, pub_joint2;
  // パブリッシャの作成。トピックに対してデータを送信。

  ros::Subscriber sub_joints, sub_sensor;
  // サブスクライバの作成

  ros::Rate rate(10);
  // ループの頻度を設定。この場合は10Hz、1秒間に10回数、1ループ100ms。

  std_msgs::Float64 target_joint1, target_joint2;

  pub_joint1 = nh.advertise<std_msgs::Float64>("/armbot2_sensor/joint1_position_controller/command", 100);
  pub_joint2 = nh.advertise<std_msgs::Float64>("/armbot2_sensor/joint2_position_controller/command", 100);
  sub_sensor = nh.subscribe<nav_msgs::Odometry>("/armbot2_sensor/pose_ground_truth", 100, groundTruthCallback);
  sub_joints = nh.subscribe("/armbot2_sensor/joint_states", 100, monitorJointState);

  target_joint1.data = 0;
  target_joint2.data = 0;

  int loop = 0;
  while (ros::ok()) { // このノードが使える間は無限ループ
    char key;  // 入力キーの値

    ROS_INFO("[Input] j: Joint1++, f: Joint1--, k: Joint2++, d:Joint2--");
    cin >> key; 
    cout << key << endl;

    switch (key) {
    case 'j': target_joint1.data  +=  5 * M_PI/180.0; break;
    case 'f': target_joint1.data  -=  5 * M_PI/180.0; break;
    case 'k': target_joint2.data  +=  5 * M_PI/180.0; break;
    case 'd': target_joint2.data  -=  5 * M_PI/180.0; break;
    default: ROS_INFO("Input j,f,k,d");
    }
      
    pub_joint1.publish(target_joint1); // 角度を送信    
    pub_joint2.publish(target_joint2);
    ROS_INFO("Targe: Joint1=%f Joint2=%f", target_joint1.data, target_joint2.data);

    usleep(1000*1000);
    ros::spinOnce(); // コールバック関数を呼ぶ
    ROS_INFO("Tmp:   Joint1=%f Joint2=%f", tmp_joint1.data,    tmp_joint2.data);
    //rate.sleep();     // 指定した周期でループするよう寝て待つ
  }
 
  return 0;
}

準 備 ([ROS演習11-2019:ロボットアーム]で実施した場合は必要ありません)

  • $ sudo apt-get update
  • $ sudo apt-get install ros-melodic-gazebo-ros-pkgs ros-melodic-gazebo-ros-control
  • $ sudo apt-get install ros-melodic-gazebo-plugins  ros-melodic-gazebo-ros
  • $ sudo apt-get install ros-melodic-moveit-*
  • $ sudo apt-get install ros-melodic-ros-control ros-melodic-ros-controllers  ros-melodic-joint-state-controller ros-melodic-effort-controllers ros-melodic-position-controllers ros-melodic-joint-trajectory-controller
  • $ sudo apt-get install liburdfdom-tools

プログラムとビルド

  • 以下を~/catkin_ws/srcディレクトリ(/home/ユーザ名/catkin_ws/src)にダウンロードする。
  • $ cd  ~/catkin_ws/src
  • $ tar  xvf  armbot2_sensor-171208.tar
  • $ cd  ~/catkin_ws
  • $ catkin build

実 行

端末を2つ開き、次のコマンドを実行する。

  • $ roslaunch  armbot2_sensor  armbot2_sensor.launch
  • $ rosrun armbot2_sensor armbot2_sensor
    • armbot2を実行している端末をクリックし、j, k, f, dコマンドを入力する毎にEnterキーを入力するとロボットアームが動く。各コマンドを入力する度にEnterキーを押さなければ動きません。jは第1関節を正方向、fは負方向、 kは第2関節を正方向、dは負方向に目標角度を5度ずつ変化させる。

演 習

  •  運動学
    運動学を実装しよう。その計算結果と位置センサの出力を比較し、プログラムが正しいか確認する。
  •  逆運動学
    逆運動学を実装しよう。2自由度の場合は解が2つあるので、数字キー1を押すと解1、数字キー2を押すと解2を選択するにしなさい。

参考リンク

 


深層学習ハッカソン

$
0
0

専門ゼミ(プレゼミ)で実施する深層学習ハッカソンの実施要領。

ハンズオン

  • チーム分け
    • 3チーム。各チーム3~4名。
    • リーダは深層学習の経験、デュアルブートのPCを持っているかで決める。それ以外のメンバーは1組と2組が混成するようにくじで決める。
    • チーム名を決めること。
  • カメラの確認
    • まず、Ubuntuでノートパソコン内蔵のカメラが使えるか確認する。cheeseというソフトウェアすでにインストール済みだと思うので以下のコマンドで実行する。もし、映らない場合は内臓カメラの設定がBIOSで無効になっていないか確認する。
      • $ cheese
  • 必要なパッケージのインストール
    • $ sudo apt install ros-kinetic-image-*
    • $ sudo apt install ros-kinetic-usb-cam
  • カメラの起動 (Start up camera)
    • $ roscore
    • $ roslaunch usb_cam usb_cam-test.launch
      • usb_cam-test.launchではカメラのデバイス名がvidoe0に指定されているので、使っているカメラのデバイス名が違う場合はlaunchファイルを編集する。
  • データの記録 (Record data)
    • $ rosbag record -a
    • ROS Bagデータから画像データの作成 (Extract image files form ROS bag)
      • $ rosrun image_view extract_images _sec_per_frame:=0.05 _filename_format:=image%04d.jpg image:=/usb_cam/image_raw
      • $ rosbag play bagfile_name
      • なお、rosbagのログファイルサイズは大きいのでデスクの空き容量がなくなる場合がある。dfコマンドで空き容量を確認して、必要に応じてUSBメモリや外付けハードディ数を利用すること。
    • 学習用データの作成 (Making data for Yolo)
      • 上のリンクは、アノテーションツールLabelImageを使いYolo用のデータセットを手動で作る方法を説明している。顔を識別するツールはいろいろあるので、それらを使い、自動的に学習用データセットを作成してもよい。
      • 学習用データは来年度のラボメンバーで、本日、研究所に来ている学生と教員の分だけでよい。
    • Yolo V3のインストール
      • 上のリンクは、学習に使用するYolo V3のインストール方法について説明している。学習はGPU搭載のコンピュータが必要なので研究室のマシンを使うが、推論は個人のノートパソコンを利用するのでYolo V3のインストールが必要となる。
    • オリジナルデータの学習 (Yolo learning using original data)
      • 上のリンクは、学習用データセットから具体的にYolo V3で学習する方法を説明している。

コンテスト

    • ラボメンバーを識別するシステムを開発し、識別率が最も高いチームが優勝。推論時間は問わない。以下の写真はYOLOを使った物体識別の例。これらの物体の代わりにラボメンバーを識別する。
    • 学習は研究室のGPU搭載マシンで行い、推論は各グループが所有しているノートパソコンで実施する。カメラはそのノートパソコン搭載のものを使用する。
    • テスト時の条件
      • 場所はテスト直前に示す。
      • 照明(蛍光灯の明るさ、ブラインドの開閉)を変えて複数回テストする。
      • カメラには一度に1名しか映らないものとする。
    • 各チームは5分程度、自分たちの手法をPPTを用いてプレゼンする。以下の項目は含めること。なお、darknetデフォルトを使っている場合でもハイパーパラメータ等は調べること。
      • データの取得方法(撮影方法、明るさ、顔の向き等)
      • 学習用データセットの作成方法(アノテーションツール、自動作成した場合はその方法、データ拡張等)
      • 学習データ数
      • 学習のハイパーパラメータ
      • 学習結果(Epochs数)。交差検証結果。

Ubuntu18.04: Yolo V3 インストールメモ

$
0
0

Ubuntu18.04にバージョンアップしたのでYolo V3のフレームワークdarknetをインストールしたときのメモ。

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

  • 環境
    • Razer Blade 15
      (CPU: Intel i7-8750H, Memory:16GB, GPU: Nvidia 1070 Max-Q Design, Memory: 8GB)
    • xubuntu 18.04.2 (USBメモリでインストールし、upgrade後は18.04.3)
    • Kernel 5.0.0-37-genericDELL Alienware 15 R4
    • gcc/g++ 7.4.0
  • Darknetのインストール
  • Yoloのウェイトのダウンロードと実行
    • $ 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
        • 以下のようなエラーが出る場合は、ノートPC内蔵カメラがBIOSの設定で無効になっていないか調べ、有効にする。
          • Couldn’t connect to webcam.
            : Resource temporarily unavailable
            darknet: ./src/utils.c:256: error: Assertion `0′ failed.
    • 動画ファイル
      • Webm形式の動画ファイルは問題なく動作する。
      • $ ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <video file>
  • テスト
    • 下図はノートPC内蔵カメラで壁を撮ったときの識別結果。私の環境では約28フレーム/秒でリルタイムで識別でき、時計の確率は98%、カレンダーに写っている女性はpersonの確率61%で、時々、birdと識別された。

以上

Ubuntu18.04: Melodicを入れるとPython3でOpenCVがエラーになる問題

$
0
0

私の環境では問題がないのですが、Ubuntu18.04でOpenCVをインストールしてからMelodicを入れると以下のエラーになるようです。


happyrobot@razer:~/Documents$ python3
Python 3.6.9 (default, Nov 7 2019, 10:44:02)
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: /opt/ros/melodic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type

解決方法
python3を実行しているのにmelodicのpython2.7を読みにいっている。以下のように、/opt/ros/melodic/lib/python2.7/dist-packages/cv2.soをpathから取り除く。


import os
import sys
sys.path.remove('/opt/ros/melodic/lib/python2.7/dist-packages')
import cv2

Ubuntu18.04: KobukiをROS Melodicで動かす

$
0
0

Kobuki(Turtlebot2)はRoboCup@Home Educationリーグでデファクトスタンダードの存在ですが、最近は開発元のYujin Roboticsからはあまりサポートされていないようです。いろいろ調べたところ、Melodic用にTurtlebot2の関連パッケージのインストール方法を次の参考サイトで公開している方がいたので、それに従ってインストールしたらKobukiが動くようになりました。以下はその作業メモ。ROSのMelodicはインストール済みが前提。

作業手順

  • 作業スペースの作成(なければ)
    $ source /opt/ros/melodic/setup.bash
    $ mkdir -p ~/catkin_ws/src
    $ cd ~/catkin_ws/src
    $ catkin_init_workspace
  •  Turtlebot2関連パッケージのインストール
    • $ cd  ~/catkin_ws
    • $ curl -sLf https://raw.githubusercontent.com/gaunthan/Turtlebot2-On-Melodic/master/install_basic.sh
    • 上のコマンドで~/catkin_ws/srcにkobuki_msgやturtlebotのディレクトリがつられない場合は、以下のコマンドを実行する。
      • $ cd src
      • $ git clone https://github.com/turtlebot/turtlebot.git
      • $ git clone https://github.com/turtlebot/turtlebot_msgs.git
      • $ git clone https://github.com/turtlebot/turtlebot_apps.git
      • $ git clone https://github.com/turtlebot/turtlebot_simulator
      • $ git clone https://github.com/yujinrobot/kobuki_msgs.git
      • $ git clone https://github.com/yujinrobot/kobuki.git
      • $ mv kobuki/kobuki_description  ./
      • $ mv kobuki/kobuki_node  ./
      • $ mv kobuki/kobuki_keyop  ./
      • $ mv kobuki/kobuki_safety_controller ./
      • $ kobuki/kobuki_bumper2pc ./
      • $ rm -rf kobuki
      • $ git clone https://github.com/yujinrobot/yujin_ocs.git
      • $ mv yujin_ocs/yocs_cmd_vel_mux yujin_ocs/yocs_controllers .
      • $ rm -rf yujin_ocs
      • $ sudo apt-get install ros-melodic-kobuki-* -y
      • $ sudo apt-get install ros-melodic-ecl-streams -y
      • $ cd ~/catkin_ws
    • 次のコマンドでビルドする。
      • $ catkin_make
  • ジョイステックのパッケージjoyをインストール
    • sudo apt install ros-melodic-joy
  • SONY DualShock4 (DS4)コントローラの設定
    • 以下のサイトを参照
    • ds4drvドライバのインストール。ds4drvはLinuxのSONY DualShock 4 用ドライバ。
      • sudo pip install ds4drv
    • DS4とXavierのペアリング
      • 次のサイトを参考にしました。
      •  ds4drvの起動
        • $ sudo ds4drv
        • 以下のように表示される。
          [info][controller 1] Created devices /dev/input/js0 (joystick) /dev/input/event8 (evdev)
          [info][bluetooth] Scanning for devices
      • ペアリング
        • SHAREボタンとDSボタンを同時に5秒程度長押しする。LEDが白く点滅したらボタンから手を話す。
        • LEDが青くなりds4drvを起動した端末で以下のように表示されたら成功。
          [info][bluetooth] Found device
          [info][controller 1] Connected to Bluetooth Controller
          [info][bluetooth] Scanning for devices
          [info][controller 1] Battery: Fully charged
    • PS4コントローラのROSパッケージps4_rosの導入
      • サイト
        • https://github.com/solbach/ps4-ros
      •  インストール
        • cd ~/catkin_ws/src
        • git clone https://github.com/solbach/ps4-ros.git
      • launchファイルの変更
        • ~/catkin_ws/src/ps4-ros/launch/ps4.launchの下から3行目を以下のように変更する。Turtlebot2が動くようにTopic名を変更する。
          • <param name=”pub_topic” value=”/cmd_vel_mux/input/teleop”/>

エラー処理

  • 私の環境ではcatkin_makeをしたところエラーが出たらの一つずつ解決した。
  • opencv関係のエラーが出たのでopencvをインストール。方法は以下のJetsonHacksの記事に従った。
  • cv_bridgeがないと怒られる。Could not find the required component ‘cv_bridge’
    • sudo apt install ros-melodic-cv*
  • iamge_geometryがないと怒られる。Could not find the required component ‘image_geometry
    • sudo apt instal’l ros-melopdic-image-geometry
  • depth_image_procがないと怒られる。Could not find the required component ‘depth_image_proc’
    • Could not find the required component ‘depth_image_proc’

起動

  • source ~/catkin_ws/devel/setup.bash
  • roslaunch turtlebot_bringup minimal.launch

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

  • source ~/catkin_ws/devel/setup.bash
  • roslaunch turtlebot_teleop  keyboard_teleop.launch
  • 以下のキーボード操作によりTurtlebot2を操作する。詳細は端末にキー操作の説明が表示されるのでそれを参照。
    • i: 前進
    • u: 左前方向へ進む
    • j: 左回転
    • o: 右前方向へ進む
    • l: 右回転
    • m: 左後方向へ進む
    • ,: 後進
    • .  右後方向へ進む
    • k: 停止

DS4による遠隔操作

  • DS4とXavierのペアリングをする。操作方法はすでに説明済。
  • $ roslaunch ps4_ros ps4.launch
    • コントローラと接続したときにキャリブレーションが必要。L2とR2を同時に押すと以下のように表示される。Release L2 and R2と表示されたら指を話すとキャリブレーションが終了し、利用可能となる。

[ WARN] [1562730896.630287264]: Press L2 and R2 to calibrate: 0%
[ WARN] [1562730896.731446432]: Press L2 and R2 to calibrate: 5%
[ WARN] [1562730896.832234176]: Press L2 and R2 to calibrate: 10%
[ WARN] [1562730896.933098464]: Press L2 and R2 to calibrate: 15%
[ WARN] [1562730897.034052928]: Press L2 and R2 to calibrate: 20%
[ WARN] [1562730897.135351008]: Press L2 and R2 to calibrate: 25%
[ WARN] [1562730897.236488864]: Press L2 and R2 to calibrate: 30%
[ WARN] [1562730897.337511264]: Press L2 and R2 to calibrate: 35%
[ WARN] [1562730897.438300640]: Press L2 and R2 to calibrate: 40%
[ WARN] [1562730897.539139328]: Press L2 and R2 to calibrate: 45%
[ WARN] [1562730897.640097056]: Press L2 and R2 to calibrate: 50%
[ WARN] [1562730897.741000544]: Press L2 and R2 to calibrate: 55%
[ WARN] [1562730897.842041696]: Press L2 and R2 to calibrate: 60%
[ WARN] [1562730897.943081120]: Press L2 and R2 to calibrate: 65%
[ WARN] [1562730898.044020896]: Press L2 and R2 to calibrate: 70%
[ WARN] [1562730898.144871008]: Press L2 and R2 to calibrate: 75%
[ WARN] [1562730898.245700928]: Press L2 and R2 to calibrate: 80%
[ WARN] [1562730898.346876544]: Press L2 and R2 to calibrate: 85%
[ WARN] [1562730898.447959104]: Press L2 and R2 to calibrate: 90%
[ WARN] [1562730898.548941536]: Press L2 and R2 to calibrate: 95%
[ WARN] [1562730898.649878528]: Press L2 and R2 to calibrate: 100%
[ WARN] [1562730898.750981568]: Release L2 and R2
[ INFO] [1562730900.952626016]: Calibrated – Ready to use
以上

 

 

ROS新人教育プログラム

Ubuntu18.04: Kobukiで地図生成

$
0
0

この回ではKobukiでROSの地図生成パッケージgmappingを使い地図を生成しましょう。次回は、ここで作った地図を使いKobukiをナビゲーションのために保存します。

  • 端末を6個開き、各端末で以下のコマンドを実行する。
    1. $ roslaunch turtlebot_bringup minimal.launch
    2. $ rqt -s kobuki_dashboard
    3. $ roslaunch turtlebot_bringup 3dsensor.launch
    4. $ roslaunch turtlebot_teleop ps3_teleop.launch
    5. $ roslaunch turtlebot_navigation gmapping_demo.launch
    6. $ roslaunch turtlebot_rviz_launchers view_navigation.launch
  • コントローラを使ってロボットを遠隔操作し地図を生成する。移動に伴い地図が生成されるのをRvizで確認できる。
  • 地図は自動的に保存されないので、別の端末を開き次のコマンドを実行することで保存できる。
    •  $ mkdir ~/map
    • $ rosrun map_server map_saver -f ~/map/mymap
      • -f以降は好きな名前に変更できる。この例では、ホームディレクト(~)直下のmapディレクトリにmymap.yamlとmymap.pgmファイルが保存される。yamlが設定ファイル、pgmが画像ファイル。

終わり

 

Ubuntu18.04: Kobukiでナビゲーション

$
0
0

この回では、ROSのナビゲーションパッケージと前回作成した地図を使いKobukiを自動でナビゲーションします。ここではプログラムを一行も書かずに、パッケージとRviz上でのマウス操作でナビゲーションを実行しますが、後の回でプログラムで実行する方法も紹介しますので楽しみにしてください。

  • 端末を5個開き、各端末で以下のコマンドを実行する。
    1. $ roslaunch turtlebot_bringup minimal.launch
    2. $ rqt -s kobuki_dashboard
    3. $ roslaunch turtlebot_bringup 3dsensor.launch
    4. $ roslaunch turtlebot_navigation amcl_demo.launch map_file:=/home/demulab/map/mymap.yaml
    ※ map_fileには使いたい地図のyamlファイルを指定する。
    5. $ roslaunch turtlebot_rviz_launchers view_navigation.launch –screen
  • 初期位置の設定:起動時は地図上の自己位置がわからないのでRvizを使い以下の手順でKobukiに教えてあげる。
    • RvizのGlobal OptionsのFixed Framapを”map”に設定する。
    • “2D Pose Estimate” ボタンをクリック
    • 地図上のKobukiの位置をクリックして、Kobukiの進行方向にマウスをドラッグする。
    • うまく位置と姿勢が設定できれば、LIDARのレーザ光の線と壁のラインが概ね一致する。一致しない場合は上の手順を繰り返す。
  • ゴールの設定とナビゲーション:次の手順でrvizを使いゴールをKobukiに教える。
    • Rvizの “2D Nav Goal” をクリックする。
    • 地図にゴールの位置をクリックして、その地点でのロボットの向く方向にマウスをドラッグする。
    • 初期位置からゴールまでの経路を自動的に計算し、Kobukiをナビゲーションしてくれる。なお、障害物がある場合はそれを避けてゴールまで移動し、ゴール地点で姿勢した向きで停止する。

終わり

 


Ubuntu18.04: ROS MelodicでHokuyo Lidarの設定

$
0
0

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"
    

以上

Ubuntu18.04:はじめてのROS プログラミング(python)

$
0
0

この記事はROS新人教育用です。ROSでHellow Worldと表示するプログラムを作り、ビルドして実行してみましょう。この記事は以下のROS Wikiの記事を参考に、ビルドコマンドとして新しいcatkin buildを使います。catkin_makeコマンドと比較して、パッケージ毎に違う環境(isolated environment)でビルドできたり、並列ビルドできたり、ROSのパスが通っていればどこでもbuildできたり、一つのパッケージだけ簡単にビルドできたりするところが違う優れた特徴があります。

  • catkin_tool
  • ROSパッケージを作る
  • ROSのパッケージをビルドする
  • エラー
    • すでにcatkin_makeでビルドした場合は、~/catkin_wsにあるdevel、buildのディレクトリを消してからcatkin buildし直す必要があります。それでもエラーが出る場合は、ホームディレクトリに.catkin_toolsというフォルダがないかls -aコマンドで確認して、あったらフォルダ毎削除してください。

 


1. インストール

(1) まず、以下のコマンドでcatkinツールをインストールします。
$ sudo apt install python-catkin-tools

(2) セットアップする。なお、sourceコマンドはファイルに書かれたコマンドを現在のシェルで実行するコマンドです。
$ source /opt/ros/melodic/setup.bash
(3) mkdirコマンドでディレクトリを作る。-pのオプションはcatkin_wsディレクトリをない場合はそれを作り、その中にsrcディレクトリを作ってくれる便利なオプション。なお、~はホームディレクトリの意味。
$ mkdir -p ~/catkin_ws
(4) cdコマンドでディレクトリを移動する。
$ cd ~/catkin_ws
(4) 次のコマンドでワークスペースを初期化する。
$ catkin init

2.  設定
ここで作成したcatkin_wsを有効にするためには以下のコマンドを実行する必要があります。
$ source ~/catkin_ws/devel/setup.bash
毎回、実行するのは面倒なので~/.bashrcの一番最後にテキストエディターgeditで、上のコマンドを付け加え保存しましょう。まず、geditがインストールされていない場合は次のコマンドでインストールしてください。
$ sudo apt install gedit

ホームディレクトリに移動します。
$ cd
次のコマンドでgeditを実行します。
$ gedit .bashrc

.bashrcの中にsource /opt/ros/melodic/setup.bashがない場合は、下のように2行追加してください。

source /opt/ros/melodic/setup.bash
source ~/catkin_ws/devel/setup.bash

保存はgeditの上ツールバー右にある「Save」をクリックします。では、うまく設定されたか、次のコマンドで確認しましょう。
$ source .bashrc
$ echo $ROS_PACKAGE_PATH
つぎのように表示されたら成功です。

失敗した場合は、設定をもう一度実行してください。打ち間違えがないか注意しましょう。

3. パッケージの作成
準備ができたので早速、パッケージを作りましょう。パッケージは次のcatkin_create_pkgコマンドで作ります。依存パッケージはそのパッケージを作るために必要なパッケージです。
catkin_create_pkg <パッケージ名> [依存パッケージ1] [依存パッケージ2] [依存パッケージ3]
helloパッケージを作りましょう!
$ cd ~/catkin_ws/src
$ catkin_create_pkg hello rospy 
上手く作成できたか確認します。
$ cd ~/catkin_ws/src/hello
$ ls
CMakeLIsts.txt, include, package.xml, srcができていれば成功です。
package.xmlに作成者(maintainer)の情報などを書きます。ここでは省略します。ROS Wikiのpackage.xmlを参考にしてください。

4. ソースコードの作成
$ cd ~/catkin_ws/src/hello/scripts 
$ gedit hello_node.py

エディタが開くので以下をソースコードを打ち込み「保存(S)」をクリックして保存する。

#!/usr/bin/env python                                                            
# -*- coding: utf-8 -*-   

import rospy
rospy.init_node('hello_node') # ノードの初期化。hello_nodeがノード名。
rospy.loginfo('Hello World')  # 文字列の出力
rospy.spin() # ループ

5. 実行
以下のroscoreコマンドでMaster(マスター)を実行する。他のノードを実行する前に必要です。
$ roscore
ノードを実行するためにはrosrunコマンドを使います。使い方は次のとおり。
rosrun パッケージ名 実行ファイル名
別の端末を開き、rosrunコマンドでhello_nodeノードを実行する。

$ rosrun hello hello_node.py
次のように表示されたら成功。終わり。お疲れ様!

6.ホームワーク

  • 以下のノードを作成しよう!
    • “I Love KIT”と表示するkitノードを作ろう。ただし、ダブルクォーテーションは表示しなくて良い。
    • キーボードから打たれ文字列をそのまま表示するechoノードを作ろう。ただし、文字列に空白は含まないとものとします。
    • キーボードから打たれた文字列を”I Love”の後につける、loveノードを作ろう。
  •  次のROSチュートリアル(初級)をやろう!

Ubuntu18.04: ウェイポイントナビゲーション(ActionLib:Python)

$
0
0

wp_navi2

この記事はROS新人教育プログラム用です。今回はActionLibを使いウェイポイントナビゲーションのプログラムを作りましょう。

まずは、以下のROSチュートリアルを読みましょう。

次のソースコードはこれのPython版です。

ソース

 
#!/usr/bin/env python                                                            
# -*- coding: utf-8 -*-                                                          

import rospy
import tf
import actionlib
from actionlib_msgs.msg import *
from geometry_msgs.msg import Pose, PoseWithCovarianceStamped, Point, Quaternion\
, Twist
from move_base_msgs.msg import MoveBaseAction, MoveBaseGoal
from math import pi

class WpNavi():
def __init__(self):  # コンストラクタ                                        
  # ノードの初期化                                                         
  rospy.init_node('wp_navi')

  # シャットダウン時の処理                                                 
  rospy.on_shutdown(self.shutdown)

  # アクションクライアントの生成                                           
  self.ac = actionlib.SimpleActionClient('move_base', MoveBaseAction)

  # アクションサーバーが起動するまで待つ。引数はタイムアウトの時間(秒)    
  while not self.ac.wait_for_server(rospy.Duration(5)):
    rospy.loginfo("Waiting for the move_base action server to come up")

  rospy.loginfo("The server comes up");

  # ゴールの生成                                                           
  self.goal = MoveBaseGoal()
  self.goal.target_pose.header.frame_id = 'map'         # 地図座標系       
  self.goal.target_pose.header.stamp = rospy.Time.now() # 現在時刻         

  way_point = [[-2.0, 3.0,-0.5 * pi], [ 3.0, 3.0, 0.0 * pi], [ 3.0,-4.5, 0.5 * pi],[ 0.0,-4.5, 1.0 * pi], [0.0, 0.0, 0.0 * pi], [999, 999, 999]]

  # メインループ。ウェイポイントを順番に通過                               
  i = 0
  while not rospy.is_shutdown():
    # ROSではロボットの進行方向がx座標、左方向がy座標、上方向がz座標     
    self.goal.target_pose.pose.position.x =  way_point[i][0]
    self.goal.target_pose.pose.position.y =  way_point[i][1]

    if way_point[i][0] == 999:
      break

    q = tf.transformations.quaternion_from_euler(0, 0, way_point[i][2])
    self.goal.target_pose.pose.orientation = Quaternion(q[0],q[1],q[2],q[3])
    rospy.loginfo("Sending goal: No" + str(i+1))

    # サーバーにgoalを送信                                               
    self.ac.send_goal(self.goal);

    # 結果が返ってくるまで30.0[s] 待つ。ここでブロックされる。           
    succeeded = self.ac.wait_for_result(rospy.Duration(30));
    # 結果を見て、成功ならSucceeded、失敗ならFailedと表示                
    state = self.ac.get_state();

    if succeeded:
      rospy.loginfo("Succeeded: No."+str(i+1)+"("+str(state)+")")
    else:
      rospy.loginfo("Failed: No."+str(i+1)+"("+str(state)+")")

    i = i + 1

def shutdown(self):
  rospy.loginfo("The robot was terminated")
  # ゴールをキャンセル                                                     
  self.ac.cancel_goal()

if __name__ == '__main__':
  try:
    WpNavi()
    rospy.spin()
  except rospy.ROSInterruptException:
    rospy.loginfo("WP navigation finished.")

演習

  • 上のソースコードをエディタで以下の要領でファイルwp_navigation.pyに保存する。
    • $ mkdir -p ~/catkin_ws/src/wp_navigation/scripts
    • $ cd ~/catkin_ws/src/wp_navigation/scripts
    • 次のコマンドでgeditを開き、上のソースコードをコピペして保存する。
      $ gedit  ~/catkin_ws/src/wp_navigation/scripts/wp_navigation.py
  •  wp_navigation.pyを次の要領で実行しよう。
    • $ roslaunch turtlebot_gazebo turtlebot_world.launch
    • $ roslaunch turtlebot_gazebo amcl_demo.launch map_file:=/opt/ros/indigo/share/turtlebot_gazebo/maps/playground.yaml
    • $ roslaunch turtlebot_rviz_launchers view_navigation.launch
    • $ rosrun wp_navigation wp_navigation.py

終わり

Blender2.8: 色付きメッシュからテクスチャ付き3Dモデルobjの作成法

$
0
0

Blender2.8で作成した色付きメッシュからテクスチャ付き3Dモデルを作成する方法のメモ。ベイクしてもできるが、meshlabを使ってテクスチャファイルを作成します。以下のサイトを参考にした。

    • エクスポートしたいメッシュを選択して、ファイル→エクスポート→Wavefront(.obj)を選択して好きな名前をつけて保存する。ここでは、monkey.objとした。

  • MeshLabでの作業
    • MeshLabを起動する。インストールされていない場合は、以下のコマンドでインストールする。
      • $ sudo apt install meshlab
      • $ meshlab
    • 先程保存したobjファイルを以下の手順でインポートする。
      • Files -> Import Mesh

    • このままでは色がついていないので、レンダリングする。以下のように色がつく。
      • Render →Color→Per Face

    • 次にテクスチャファイルを書き出す準備をする。
      • Filters →Texture →Parameterization: Trival Per-Triangle

    • 以下のウインドウが開くので、MethodをBasicに変更して、Applyをクリック。

    • ひとまず、この状態を保存する。ここではプロジェクトファイル名をmonkeyとしている。
      • File → Save Project

    • 最後に、テクスチャファイルに書き出す。
      • Texture→Transfer Vertex Attributes to Texture (between 2 meshes)

    • デフォルトでテクスチャファイル名はメッシュファイル名_color.pngになる。objファイルとテクスチャファイル名は関連付けられているので変えない。Applyをクリックして保存する。MeshLabはもう使わないので閉じる。

  • Blenderでの作業
    • MeshLabで作成したテクスチャファイルと関連付けられたobjファイル(ここではmonkey.obj)をインポートする。下図のようにイエローモンキーが現れる。
      • ファイル→インポート→WaveFront(.obj)

終わり

Blender2.8:ソースからのインストール

$
0
0

Blender2.8をソースからインストールしたときの作業メモ。Blender Wikiのとおり実施したら問題なくビルドできた。

  • 参考サイト
  •  環境
    • Ubuntu18.04
    • Gcc: 7.4.0
  • パッケージのインストール
    • $ sudo apt-get update
    • $ sudo apt-get install build-essential git subversion cmake libx11-dev libxxf86vm-dev libxcursor-dev libxi-dev libxrandr-dev libxinerama-dev libglew-dev
  • ソースのダウンロード
    • $ mkdir ~/blender-git
    • $ cd ~/blender-git
    • $ git clone http://git.blender.org/blender.git
  • ライブラリのダウンロード
    • $ mkdir ~/blender-git/lib
    • $ cd ~/blender-git/lib
    • $ svn checkout https://svn.blender.org/svnroot/bf-lender/trunk/lib/linux_centos7_x86_64
  • アップデータとビルド:最新のソースコードを取ってきてビルドする。
    • $ cd ~/blender-git/blender
    • $ make update
    • $ make make -j$(nproc)
  • 依存ファイルのインストール。
    • $ cd ~/blender-git
    • $ ./blender/build_files/build_environment/install_deps.sh –with-all

終わり

 

Viewing all 757 articles
Browse latest View live