potblog

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

複数のturtlebot3のシミュレーション環境

turtlebot3_worldに3つのturtlebotを設置した。 初期状態のフィールドとlaunchを以下に示す。

f:id:potblog:20180716002957p:plain

各turtlebot3は以下のコマンドで操作可能。

$ rosrun turtlebot3_teleop turtlebot3_teleop_key cmd_vel:=tb3_0/cmd_vel
$ rosrun turtlebot3_teleop turtlebot3_teleop_key cmd_vel:=tb3_1/cmd_vel

新卒でメーカーから就職先を選ぶ際の就活メモ

就活が終わりました。 今後のために企業の選び方についてメモっておきます。 ちなみに業界はメーカーのみです。

就活の流れ

インターンを通じて就活の模擬練習

夏や冬に2週間程度のインターンが開催されるので、企業選びを通じて志望業界などのイメージを固める。
書籍として業界地図やMONOを参考にした。
大手以外のインターンは雑と聞いたので、夏はとりあえず志望業界の中で大手をいくつか受ける。
2つ受かったが期間が重なっていたので適当に片方を選ぶ。当時は気にしていなかったが、選んだ方はcore30で選ばなかった方はリストラが盛んな企業であった。
冬は1社のみ受けたが落ちた。
夏のインターン生は就活意欲が低いが冬のインターン生は御社に入社しますオーラが漂っているらしい。
なんとなく志望業界が定まる。

続きを読む

turtlebot3のLiderを用いて指定位置まで自律移動させる

turtlebot3を自律移動させるパッケージとしてnavigationがあります。
navigationを利用して指定位置までturtlebot3を動かすノードを作ってみます。

mapの作成

まず環境マップを作成する。 今回は例としてシミュレーション環境のturtlebot3_worldを用いる。

端末を開き

$ roslaunch turtlebot3_gazebo turtlebot3_world.launch

シミュレーション環境が構築される。

slamを参考にしてmap.pgmmap.yamlを作成する。

移動先を指定するノードの調査

端末を開き

$ roslaunch turtlebot3_gazebo turtlebot3_world.launch

navigationを参考にしてmapファイルを読み込み、rivzで表示する。

rvizの2D Pose Estimateを選択してturtlebot3の初期位置を設定する。同様に2D Nav Goalを選択するとturtlebot3の移動先を設定できる。
この状態でのノード・トピックの関係を確認するため、他の端末を開き

$ rqt_graph
続きを読む

turtlebot3 burgerを動かしてみた

概要

turtlebot3_burgerを使ってみる機会があったので組み立てからLRFの動作確認までの手順を簡単にまとめました。
詳細な環境構築についてはe-Manualに書いてあります。


turtlebot3の組み立て

同封された説明書を読みながら組み立てる。

サーボモータの動作確認

basic-operationを参考にし、駆動回路のsw1とsw2を押してサーボの動作確認を行う。

ホストPCの環境構築

pc_setupを参考にしてホストPCにubuntu16.04とrosをインストールする。

続きを読む

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. コードの再利用性が高くなる

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

続きを読む