Edited at

ROS講座00 目次

数字は書いた順です。


初めに

01 概要

ROSのメリット、デメリット、ユースケースについて説明します。

02 インストール

UbuntuのインストールからROSのインストールまで説明します。

11 gitリポジトリ

この講座の中のサンプルプログラムが入っているgitリポジトリです。


入門


基礎編

03 Pub & Sub 通信

C++でROSノードを作成し、ビルドし、実行します。

04 roslaunch

roslaunchを使用して簡単にROSノードを実行します。

19 roslaunch2

roslaunchのrename、remap、arg、paramについて解説します。

05 ros tool

ROSのデバッグのためのROSのツールを解説します。

06 ROS Logger

ROSのprintfシステムであるloggerを解説します。

07 joyプログラム

joyスティックを用いてturtle_simの「亀」を動かすプログラムを作成します。

08 pub & sub 遅延測定

Pub & Sub通信の遅延を測定します。

41 ros timerで処理を行う

一定間隔で処理を行うのにメインループでなくtimerを使う方法を解説します。

09 ROSmsg(とarray型の使い方)

ROSメッセージの使い方について説明します。

10 カスタムmsg

自作のROS型の定義の仕方、使い方について解説します。

43 カスタムmsgを別のパッケージから使う

自作のROS型を、別のパッケージから参照する方法を説明します。

58 ROSのツール概要

ROSの各ツールの役割の概要を説明します。


可視化編(Rvizモデル表示)

12 Rviz概要

ROSの可視化ソフトであるRvizで何ができるのかを解説します。

13 URDFを記述する1

ROSのロボット記述ファイルであるURDFを記述してRvizで表示します。

14 URDFを記述する2

URDFで様々な形のlinkや稼働するjointの記述の仕方を解説します。

68 xacroを使う1

urdfをプログラマブルに記述するxacroの基本的な書式を説明します。

73 xacroを使う2

xacroのマクロなどの使い方を説明します。

34 stlファイルをrvizで表示する

単純な図形だけでなくstlファイルを使って複雑な形状を表示する方法を説明します。

15 tf-1:概要

tfの概要について解説します。

17 tf-2:broadcast、listen

ROSノードからtfをbroadcast、subscribeする方法を説明します。

16 joint_stateをpublishする

ROSノードからjoint_stateをpublishsる方法方法を解説します。

18 Rviz上で移動ロボットを作る

全方向移動の移動ロボットをRviz上でシミュレーションします。


シミュレーション編1(gazebo基礎)

26 シミュレーターを作る

gazeboシミュレーションで単純な箱を出現させる方法を説明します。

27 gazeboでjointを動かす

ros_controlを使ってjointを動かします。

33 車輪ロボットを作る1(rvizで表示)

車輪ロボットをrvizで表示します。

35 車輪ロボットを作る2(物理シミュレーション)

車輪ロボットをgazebo上に出現させる方法を解説します。

39 車輪ロボットを作る3(diff_drive_controllerで動かす)

車輪ロボットをros_controlを使って動かします。

40 車輪ロボットを作る4(gazeboの位置をrvizに取り出す)

gazebo上のモデルの位置をtfに取り込みrvizで表示します。


上級


発展編

78 rosparamを使う

起動時にROSノードにパラメーターを渡すrosparamの使い方を説明します。

28 Dynamic Reconfigureを使う

動的にパラメーターの変更ができるツールであるDynamic Reconfigureを使ってみます。

29 rosbagを使う

rosの記録・再生ツールであるrosbagを使います。

48 ROSの時間システム

ROSの2つの時間(ROS timeとWall time)を解説します。

76 ROSノードの分類とmessage_filter

入出力の方法によってROSノードを3つに分類して書き方を説明します。

30 3次元の角度の表記と相互変換

3次元の姿勢の表し方とその変換の仕方、ROSで位置姿勢を表す型について解説します。

95 actionlibを使う

actionlibを使って通信をします。

97 CMakeList.txtとpackage.xmlの書き方

ビルド・依存情報を記述するCMakelist.txtとpackage.xmlの書き方についてまとめます。

98 TravisCIでビルドチェックをする

git pushするたびに自動でビルドチェックを行うように設定します。


情報表示編(rviz, etc)

24 RvisにVisualizationMarkerを表示する

3Dウィンドウの中に直方体や矢印などのmarkerを表示する方法を解説します。

23 jskプラグインでrviz上に情報を表示する

Rviz上でTopicの表示をかっこよく表示するためのjskのプラグインを紹介します。

25 Diagnosticを使う

ROSのエラー管理ツールであるdiagnosticsをRvizの画面上に表示します。

32 rqt_plotでリアルタイムでグラフ表示する

リアルタイムにグラフを表示する方法を説明します。


シミュレーション編2(gazebo発展)

42 車輪ロボットを作る5(lidarのシミュレーション)

lidarをgazeboでシミュレーションします。

45 車輪ロボットを作る6(IMUのシミュレーション)

IMUのシミュレーションをします。

67 車輪ロボットを作る7(カメラのシミュレーション)

カメラのシミュレーションです。標準のバージョンでは問題があるためにバージョンアップを行います。

49 オムニホイールのシミュレーション1(オムニホイールのモデリング)

全方向移動台車のシミュレーションのためにまずはオムニホイールのモデリングをします。

50 オムニホイールのシミュレーション2(全方向台車のモデリング)

全方向移動台車をgazebo上に出現させます。

51 オムニホイールのシミュレーション3(コントローラーを作る)

全方向移動台車をtwistで動かします。

89 オムニホイールのシミュレーション4(サスペンションを作る)

シミュレーションを安定化させるためにサスペンションを追加します。

88 オムニホイールの簡易シミュレーション

物体をtwist通りに動かすplanner_moveプラグインを使います。


シミュレーション編3(gazebo world)

37 gazeboでworldを作成する

worldを設定してgazeboを起動する方法を説明します。

38 gazebo modelを作成する

gazebo用のmodelを作成する方法を説明します。

90 gazeboモデルでメッシュを使う、テクスチャを使う

gazeboモデルでメッシュ(stlファイル)とテクスチャを使う方法を説明します。

87 Gazebo世界を明るくする

Gazeboの明るさの設定を行います。


プラグイン編

59 ROSにおけるpluginの書き方

pluginlibを用いたプラグインの書き方、使い方を解説します。

74 twistを送るrviz panel pluginを作る

twistをpublishするrvizのpanel pluginを製作します。

102 pointを送受信するrvizプラグインを作る

tool、displayタイプのrviz pluginを制作します。

84 Nodeletを使う

rosメッセージの通信を高速に実行するための方式であるnodeletについて記述します。


ネットワーク編

20 複数のPCでROS接続1

複数のPCを使ってROSを起動する方法を説明します。

21 複数のPCでROS接続2

複数のPC上でのROSノードを、roslaunchを使って一気に起動する方法を説明します。

22 リモートでロボットの電源を切る

ネットワーク越しにロボットのPCの電源を切る方法を説明します。

36 非インターネット環境でNTPをする

インターネットの無いクローズドな環境で、複数のマシンで時刻合わせをする方法を解説します。

75 gazevo serverを別マシンに分ける

処理の重いgzserverだけを別マシンで実行する方法を説明します。


開発環境編

54 VMWare上でROSを使う

VMwareを使うとwindowsマシンの上にubuntu環境を作り、そこでROSを起動できます。

64 ROSパッケージのディレクトリ構成

ROSのディレクトリ構成を見ます。

99 エラーと対策

ROSでよく見かけるエラーの原因についてリストアップします。


個別要素


python編

31 python基礎

基礎的なpythonでのrosノードの記述を解説します。

55 pythonでrosbagを解析・可視化する

rosbagをmatplotlibを使ってグラフに描画します。


カメラ編

56 Webカメラの画像を表示する

Webカメラの画像をROSトピックとしてpublishして、それを表示します。

57 カメラ画像を圧縮して送信

ネットワーク越しに転送するために画像を圧縮、展開する方法を設枚します。

66 カメラのキャリブレーションを行う

カメラの歪みを測定して修正するキャリブレーションを行います。

77 画像処理用の環境構築を行う

画像処理を行うためのシミュレーション環境を製作して、簡単な画像処理を行います。

79 画像処理でコーラ缶を検知する

画像処理で赤いコーラ缶を検出します。

80 compressedイメージをOpenCVで読む

compressed型の画像を直接読み込むpythonノードを書きます。

83 camera_infoをセットするノード

camera_infoをrosparam経由でセットするノードを製作します。

85 カメラ上に投影するimage_geometryを使う

3D位置とカメラ上の位置を変換します。


LIDAR編

93 laser_filterを使う

scanデータを領域でフィルタリングします。

82 obstacle_detectorを使う

lidarの/scanから障害物を検出するROSパッケージを使用します。


Qt編

69 Qtを使う1(ビルドの設定)

GUIの作成ツールであるQtをcatkin_makeする設定を説明します。

70 Qtを使う2(Layout、SIGANAL・SLOT)

QtのLayoutとSIGNAL・SLOTの使い方を説明します。

71 Qtを使う3(classの作成)

Qtのクラスを製作します。

94 Qtでpub・subする

QtとROSを組み合わせてPub、Subするノードを作成します。

72 Qtでタッチパッドを作る

Qtでタッチパッドとして使えるWidgetを作ります。

101 ogreで3D描画をする

ogreライブライを使って3Dビューの中でオブジェクトを描画します。


Web編

52 webサーバーを立てる

Webアプリを使うためにWebサーバーをROSで立てます。

53 ブラウザでpub subする

rosbridgeを経由してjavascriptでpubsubします。

62 Webカメラの画像をwebから見る

web経由でカメラ画像を見ます。

63 webでtwistを送る

javascriptを使ってマウス操作でtwistを送ります。

47 GamePadをブラウザで使う

GamePadをWeb経由でROSと接続します。


Navigation編

60 Navgation用のシミュレーション環境

navigation stackを使うためのシミュレーションのロボット・環境の構築をします。

61 位置情報の統合

ロボットの位置を複数のセンサーを統合して得る処理を行います。

91 Laserでmap位置を推定する

LIDARを使った位置推定を導入します。

92 move_baseで移動する

move_baseを使って指示した場所にロボットを移動させます。


アーム編

100 Moveitでサンプルを動かす

crane_plug_armでmoveitのサンプルを動かしてみます。

103 armロボットのsim環境を作る

ロボットアームのシミュレーションをするための環境を構築します。

104 moveitでオリジナルのアームを使う

moveitをオリジナルのアームに適用して、指令をプログラムから送る方法を説明します。


ハードウェア編

44 シリアル通信とROSをつなぐ

シリアルポートをROSで使う方法、シリアルが切れても再接続する方法を説明します。

46 ROSでarduinoを使う

ROSで使うためにCLIで使う方法、rosserialで通信する方法を説明します。

65 YDLIDARを使う

安価な360度LIDARであるYDLIDARを使います。

81 IMU(GY-955)を使う

IMUを接続して姿勢データを取り出します。

96 カスタムmbedでrosserial+platformioを使う

lpc1768のカスタムボードを作る、platformioでコンパイルする、lpc21ispで書き込む、rosserialを使うの4項目を説明します。


番外編(メカトロニクス講座)

ROSに関係はありませんが、ロボット製作にかかわるものを置いておきます。


ソフトウェア

01 gitコマンド

シチュエーション別にgitコマンドを書きます。

02 Arduino megaのPWMについて

arduino megaで多数のPWMを使うときの注意を書きます。

03 c++でudp通信をする方法

c++でudp通信をする方法を書きます。

04 USBシリアル変換のデバイス名を対応させる

USBシリアル変換で各々のデバイスをudevで認識する方法を説明します。


モーター制御

05 モーターの技術

モーター制御に使われる技術や部品を紹介します。

06 モーター関連部品の選定

モーター関連の部品をピックアップします。

07 モーターを速度制御する

Arduinoを使ってモーターの速度制御をしてみます。