potblog

技術メモとかガジェットレビューとか

ROSでserviceによる通信

1. ROSパッケージを作る

cd ~/catkin_ws
catkin_create_pkg test_service rospy

新しくプロジェクトを作成した直後の~/catkin_ws/test_serviceのディレクトリ構成は以下のようなファイル階層だと思われる。

.
├── CMakeLists.txt
├── package.xml
└── src
  • CMakeLists.txt: ビルドシステムその1
  • package.xml: ビルドシステムその2
  • src: ユーザがソースコードを保存する場所

2. サービスを定義する

新しいサービスを作成するには3ステップある。

  1. サービスコールの入出力のためのサービス定義ファイルの作成
  2. ビルドシステム1の変更
  3. ビルドシステム2の変更

1.サービス定義ファイルの作成

gedit ~/catkin_ws/src/test_service/srv/WordCount.srv

以下の文字列を貼り付ける

string words
---
uint32 count
続きを読む

ROSの開発環境構築からpub/sub通信まで

0. ubuntuの起動とROSの環境構築

開発環境であるubuntu16.04を用意して起動する。
参考:https://kledgeb.blogspot.jp/2016/04/ubuntu-1604-1-ubuntu-1604ubuntuubuntu.html

次にROS KineticのUbuntu16.04 へのインストールを行う。
端末を立ち上げて以下のコマンドを入力する。

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu \
$(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 \
--recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full python-rosinstall
sudo rosdep init
rosdep update
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

参考:http://wiki.ros.org/ja

1. ROSのワークスペースを作る

端末を立ち上げて以下のコマンドを入力する。

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

ここで一度makeしておく。
ROSではcatkin_makeというコマンドを使ってワークスペースのプロジェクトをビルドする。
また、初回でこのコマンドを行えばワークスペースに必要なファイルやディレクトリが生成される。

catkin_make

catkin_makeしたら以下のようなファイル階層になっていると思われる。

ros_ws
|--build
|--devel
|--src
  • build: ビルドに関する設定やmakeのlogのファイルが入っている。
  • devel: 実行ファイルやmakeによって生成されたものが入っている。
  • src: ユーザがソースコードを保存する場所。

これでROSのワークスペースが作成できた

続きを読む

ROSのプロセス通信の概要

ROSにおけるプロセス間通信の重要性

ROSで推薦されている開発スタイルは以下の様なものである。

  1. とにかくプロセス(ROSではこれをNodeと呼ぶ)を立ち上げまくる
  2. プロセス間のデータはネットワーク経由で通信する

例えば、上の図のようなシステム構成を考えてみる。
これは、ステレオ視によって外部の三次元の環境を認識し、それを回避するような動作計画を行うロボットシステムである。
このようなシステムをROSで実装する場合、角丸で囲われているものがそれぞれ独立したプロセスとして実行される。
そして、矢印で繋がれた部分がプロセス間通信である。

このようなスタイルで開発されたシステムにおける利点は、

  1. 特に何も考えなくてもマルチコアの恩恵を受けられる
  2. システムの一部(あるプロセス)がバグで死んでも、システム全体は死なない
  3. 複数マシンでの分散システムに自然と拡張できる
  4. コードの再利用性が高くなる

といったものがあげられる。

続きを読む

ROSのシステム構成図

センサやアクチュエータを用いる場合のROSのシステム構成図

センサやアクチュエータとPC(ROS)のシステム構成図を以下に示す。

脳みそとなる部分にはPCを用いる。PCはデスクトップ型やノート型、Raspberry Piシリーズなどubuntuの動くものであれば良い。
センサ類は基本的にusbでPCと接続する。組み込み用途のセンサなどusbでデータを送れないセンサは、一旦電子基板で処理してからPCにusbなどで送る。
アクチュエータ類もPCから直接は動かせないので、一度ドライバなどの電子基板を経由して駆動させる。
PCは得られたセンサ類の情報から次に駆動させるアクチュエータの計算を行う。

ARC2017に出場しROSを用いたチームのシステム構成図を示す。

複数のカメラ、役割分担された複数のPCを用いているが、基本的な構成は同じである。

続きを読む

ROSの概要と事例とメリットについて

ROSとは

ROSとは Robot Operating System の略で、ロボット開発のための様々なソフトウェアの集合のこと。
ROSは OS と付いているが、いわゆるLinuxWindowsといったOSではない。
基本的には、以下の総称と考えれば良い。

  1. 位置づけとしてはUnixベースのOS(WindowsでないOS)で動作するミドルウェア
  2. プロセス間通信のための通信ライブラリ
  3. プログラムをコンパイルするためのビルドシステム

雑に言えば誰でも利用可能なロボット開発ツールの一つである。

ROSを用いて開発されたロボットの事例

  • Amazon Roboticsの物流補助ロボット
    自律移動ロボットによるAmazon物流センターの自動化・省人化を目指す。

  • Sonyaibo
    2017年に販売された家庭向けロボットaiboには多数のセンサとアクチュエータが搭載されており、それらの処理はROSで行われる。

続きを読む

rosのpublisherで複数のメッセージを配信する

概要

オライリーのros本の3章トピック通信までを読んだので、理解の定着化のためにも rosで動く電卓ツールを作ってみた

プログラミングROS ―Pythonによるロボットアプリケーション開発 (オライリー・ジャパン)

プログラミングROS ―Pythonによるロボットアプリケーション開発 (オライリー・ジャパン)

環境

ubuntu 16.04

続きを読む

opencvとzbarを用いたQRコードの位置表示について

QRコードを検出するライブラリの一つにzbarがあります。
ZBarのインストール方法とQRコードの位置表示のサンプルプログラムを紹介します。

ZBarのインストール方法

ZBarを使ったバーコード読み取りツールとC/C++ から使う場合に必要なヘッダファイルをインストールします。

sudo apt install zbar-tools libzbar-dev
続きを読む