LoginSignup
1
0

More than 3 years have passed since last update.

[はじめてのRDBOX(5)]rdbox使ってみました:ROS Publisher編

Last updated at Posted at 2019-08-30

はじめに

ROS の初心者が、とっても簡単なROSアプリを作ってみました。(連載記事です)

今回の記事の概要

事前準備

  • 今回の ROS アプリは、Raspberry PI のカメラを制御するため、Raspbian OS 環境で稼働することを想定しています
  • ROS 環境を構築する場合は、@dyson8910 さんの記事「Raspberry Pi 3 にROS kinetic をインストールしてみました。」が参考になりました
    • 最終的に(次回以降の記事で)は、RDBOX 環境にて Dockerコンテナ(raspbian)で動かします
    • 今回の記事では、実際に環境構築せず雰囲気を感じてもらうだけでも十分です

構築

関連パッケージ

  • 画像データ取り扱いに関連して OpenCV を使用している
  $ sudo apt install -y python-opencv ros-melodic-cv-bridge

GitHub から clone

  $ mkdir -p ${HOME}/ros_ws/src
  $ cd ${HOME}/ros_ws/src
  $ git clone https://github.com/YourGitHubAccount/picam_ros.git
  $ ls -lR picam_ros      # msg/picam_photo.msg などが取得できているはずです

scripts/take_pub_photo.py

  • 今回の記事のアプリソースファイルの作成
  • 以下(↓)は具体的な手順(下記例では、GitHubよりファイルを取得)
  $ mkdir -p ${HOME}/ros_ws/src/picam_ros/scripts
  $ cd ${HOME}/ros_ws/src/picam_ros/scripts
  $ curl -s -o take_pub_photo.py https://raw.githubusercontent.com/higuchi-toshio-intec/example-picam/master/picam_ros/scripts/take_pub_photo.py
  $ chmod +x take_pub_photo.py

ソースファイルの主要部分説明

  • 静止画撮影
    • Rapbian OS の raspistill コマンドを実行
      • 今日の日付文字列を含んだファイル名
      • サブプロセスでコマンド実行(画像撮影)
    • 以下(↓)は対応する部分
        #
        filename = "%s/photo-%s.jpeg" % (dir_tmp, today.strftime("%Y%m%dT%H%M%S"), )
        cmd = "raspistill -w %d -h %d -o %s" % (args.w, args.h, filename)
        subprocess.call(cmd, shell=True)

  • Publisherの生成
    • トピック名称:example_picam_photo
    • データ型:picam_photo
    • キューサイズ:100
    • latch:True
      • True を設定することで Publisher と Subscriber 間でのデータ受け渡しがうまくできたため
      • False でもよかったかもしれない
    • 以下(↓)は対応する部分
  def create_pub(node_name):
    rospy.init_node(MyNodeName, anonymous=True)
    staLatch = True
    pub = rospy.Publisher('example_picam_photo', picam_photo, queue_size=100, latch=staLatch)

    return pub
  • 配信(Publish)
    • Publish 頻度に合わせて rate を設定(1秒当たりの回数)
      • 今回の記事のようなケースでは、もっと小さな値でも OK
    • データ型 picam_photo の変数(msg)を作成し以下の情報を格納
      • 現在時刻
      • 端末ID
      • 画像データ(OpenCV を使用し読み込み)
    • 以下(↓)は対応する部分
  def pub_photo(pub, file_photo):

    #
    pub_rate = rospy.Rate(30)

    #
    msg = picam_photo()

    #
    print("[INFO] reading... " + file_photo)
    photo_cv2 = cv2.imread(file_photo, cv2.IMREAD_COLOR)

    #
    msg.timestamp = rospy.Time.now()
    msg.edge_id = MyNodeName

    #
    msg.picam_photo = GV_cv_bridge.cv2_to_imgmsg(photo_cv2)

    #
    pub.publish(msg)
    pub_rate.sleep()

GitHub への登録

  • 作成したファイル全てを GitHub に登録
  • 以下(↓)は具体的な手順
  $ cd ${HOME}/ros_ws/src/picam_ros
  $ git add .
  $ git commit -m 'CommitMessage'
  $ git push

catkin_make

  • コンパイル実行

    • 実行コマンドは catkin_make
    • 「catkin_make: command not found」となった場合は、以下のコマンドを実行
    $ source /opt/ros/${ROS_DISTRO}/setup.bash
    
  • 以下(↓)は具体的な手順

$ cd ${HOME}/ros_ws/
$ catkin_make

アプリ起動

  • 以下(↓)は具体的な手順
$ cd ${HOME}/ros_ws
$ source /opt/ros/${ROS_DISTRO}/setup.bash
$ source devel/setup.bash
$ rosrun picam_ros take_pub_photo.py

記事リスト

  1. 概要編
  2. 画像参照アプリの構築編
  3. ROSパッケージ作成編
  4. ROS Subscriber編
  5. ROS Publisher編(← 今回の記事)
  6. DockerImage 作成編
  7. RDBOX(k8s) ポート転送編
  8. RDBOX(k8s) Subscriber アプリ編
  9. RDBOX(k8s) Publisher アプリ編
  10. 雑記
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0