-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathchapter9.tex
1560 lines (1191 loc) · 85.3 KB
/
chapter9.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
% !TEX root = ./rosbook_jp.tex
%-------------------------------------------------------------------------------
\chapterimage{chapter_head_9.pdf}
%-------------------------------------------------------------------------------
\chapter{移動ロボットの制御とシミュレーション}
\index{移動ロボット}
本章ではROSを用いた移動ロボットの制御法を、ROSが推奨するリファレンス·プラットフォーム「タートルボット2」の移動ロボットKobukiを例に学んでいく。本章の前半で、Kobukiのハードウェアを紹介した後、Kobukiを遠隔操縦するパッケージを使ってトピックメッセージを用いた制御方法を説明する。後半では、実際のKobukiと同じ動作をコンピュータでシミュレーションするためのパッケージを紹介する。
%-------------------------------------------------------------------------------
\section{ROSが対応するロボット}
\index{ロボット}\index{Robot}
ROSに対応したロボットとして、2015年5月現在で140のロボットがwiki(http://wiki.ros\\.org/Robots)に登録されている。なかでも最も広く知られているロボットは、PR2とタートルボットである。これらはWillow Garage\footnote{\url{http://www.willowgarage.com/}}またはOSRF(Open Source Robotics Foundation)\footnote{\url{http://www.osrfoundation.org/}}が開発した、ROSの標準的なリファレンス·プラットフォーム(standard reference platform)である。
%-------------------------------------------------------------------------------
\subsection{タートルボット}
\index{タートルボット}\index{Turtlebot}
タートルボットはROSの標準リファレンス・プラットフォームで、ROSを初めて学ぶ人のために開発された低価格なロボットである。
現在までに、図9-1に示すタートルボット1、2が販売されている。タートルボット1ではiRobot社の研究用ロボットRoomba createを、タートルボット2ではYujin Robot社のKobukiを移動ベースとして利用している。センサ はタートルボット1、2ともにMicrosoft社のRGB-DカメラKinectが標準で搭載されている。
\begin{figure}[htp]
\centering
\includegraphics[width=10cm]{pictures/chapter9/pic_09_01.png}
\caption{タートルボット1(左)とタートルボット2(右)}
\end{figure}
%-------------------------------------------------------------------------------
\subsection{タートルボット2}
タートルボット2は、2012年10月に公開されたロボットプラットフォームである。柱やプレートなどの付属品を利用して、ノートパソコンやKinect、その他のセンサやデバイスを搭載できる。タートルボット2の仕様は以下の通りである。
\subsubsection{ハードウェア}
\begin{itemize}
\item Kobuki本体
\item Microsoft Kinect
\item ノートパソコン(OS: Ubuntu、ROSインストール済み)
\item Kinect 取り付け治具
\item TurtleBot 柱
\item TurtleBot プレート
\end{itemize}
\subsubsection{ソフトウェア}
\begin{itemize}
\item タートルボットSDK
\item visualization、planning、perception、control and error handlingライブラリ
\item デモアプリケーション(https://github.com/turtlebot/turtlebotからダウンロード可能)
\end{itemize}
%-------------------------------------------------------------------------------
\section{移動ロボットKobuki}
\index{移動ロボット}\index{Kobuki}
Kobukiは、Yujin Robot社が開発し、タートルボット2で採用された研究用移動ロボットプラットフォームである。図9-2にKobukiとタートルボット2を示す。移動ロボットプラットフォームとは、移動ロボット開発に必要な基本的な機能を搭載したハードウェアであり、多様なセンサやロボットアームが装備できるなど、様々な拡張が可能である。 Kobukiには、標準でバンパーセンサ、落下検知センサ、ホイールドロップセンサ、高解像度の車輪エンコーダ、モータ、3軸ジャイロセンサ、デジタル入出力端子、アナログ入力端子、バッテリーが搭載されている。 本節では、Kobukiのハードウェア構成について解説する。
\begin{figure}[htp]
\centering
\includegraphics[width=10cm]{pictures/chapter9/pic_09_02.png}
\caption{Kobukiとタートルボット2}
\end{figure}
%-------------------------------------------------------------------------------
\subsection{Kobukiの構成と仕様}
Kobukiと付属機器を図9-3に示す。基本的な構成は、Kobuki本体、ドッキングステーション、リチウムイオン電池、充電アダプタ、プレートと柱、USBケーブルである。本章では、これに加えて9.4.2項に示すように、プログラム開発用のデスクトップPCとノートパソコンを使用する。
\begin{figure}[htp]
\centering
\includegraphics[width=10cm]{pictures/chapter9/pic_09_03.png}
\caption{Kobuki本体と付属機器}
\end{figure}
図9-4にKobuki本体のモータ、センサ、端子などの位置を示す。Kobukiのより詳しい仕様は、次のURLを参照してほしい。図9-5に示すように、バンパーが装着されている部分がKobukiの前方である。
http://kobuki.yujinrobot.com/home-kr/about/specifications/
\begin{figure}[htp]
\centering
\includegraphics[width=15cm]{pictures/chapter9/pic_09_04.png}
\caption{Kobuki本体の各部分の説明}
\end{figure}
\begin{figure}[htp]
\centering
\includegraphics[width=12cm]{pictures/chapter9/pic_09_05.png}
\caption{Kobukiのバンパーと前進方向}
\end{figure}
\begin{exercise}[KobukiのCAD図面の入手方法]
Kobukiに新たな機器やセンサを追加する際、正確な寸法が必要になる。Kobukiの寸法を記入したCAD図面は、以下のURLから入手できる。2次元モデルはDWG、PDF形式で、3次元モデルは、IGS、STEP、STL形式で提供されている。
\begin{itemize}
\item 2次元モデル: http://files.yujinrobot.com/kobuki/hardware/drawings/
\item 3次元モデル: http://files.yujinrobot.com/kobuki/hardware/models/
\end{itemize}
\end{exercise}
%-------------------------------------------------------------------------------
\subsection{Kobuki制御パネルと電源オプション}
Kobukiの後部には、図9-6のような制御パネルがある。制御パネルには、搭載するセンサ用の外部電源 、簡単なステータスを表示するLEDやUSB端子、ボタン、スイッチがある。
\begin{figure}[htp]
\centering
\includegraphics[width=12cm]{pictures/chapter9/pic_09_06.png}
\caption{Kobukiの制御パネル}
\end{figure}
図9-7のように、Kobukiはノートパソコン、組み込みボード、Kinectなどの外部機器用に4つの電源ピンを備えている。Kobukiの電源を外部機器で利用したいとき、この電源ピンを使用すればよい。電源ピンのコネクタを以下に示す。
\begin{figure}[htp]
\centering
\includegraphics[width=10cm]{pictures/chapter9/pic_09_07.png}
\caption{Kobuki制御パネル上の電源ピン}
\end{figure}
%-------------------------------------------------------------------------------
\subsection{Kobukiドッキングステーション}
Kobukiの充電は、ユーザーが直接充電アダプタを接続する方法と、ロボットが自ら充電ステーション(ドッキングステーション、図9-8)へ移動して充電 する方法がある。
\begin{figure}[htp]
\centering
\includegraphics[width=12cm]{pictures/chapter9/pic_09_08.png}
\caption{Kobukiドッキングステーション}
\end{figure}
%-------------------------------------------------------------------------------
\subsection{Kobuki通信ポート}
Kobukiの制御パネルには、図9-9のような D-Sub コネクタ(25ピン)の通信ポートがある。
\begin{figure}[htp]
\centering
\includegraphics[width=8cm]{pictures/chapter9/pic_09_09.png}
\caption{KobukiのD-Subコネクタ(25ピン)通信ポート}
\end{figure}
この通信ポートの各ピンの名称、機能を表9-1に示す。
\begin{table}[htp]
\centering
\small
\begin{tabular}{p{3cm} p{3cm} p{3cm} p{3cm}}
\toprule
\textbf{ピン番号} & \textbf{名称} & \textbf{機能} & \textbf{備考}\\
\midrule
1,2 & RX, TX & シリアル通信 & RS232, 3.3V \\
3,4,5,7 & DI0, DI1, DI2, DI3 & デジタル入力 & High: 3.3 - 5V, Low: 0V \\
8,9 & EX5 & 5V電源 & 1A \\
10,11,12,13 & AI0, AI1, AI2, AI3 & アナログ入力 & 12bit ADC: 0~4095, 0~3.3V \\
14 & EN & 外部ボード検出 & 外部GND \\
15,17,18,19 & DO0, DO1, DO2, DO3 & デジタル出力 & Open-drain,プルアップ抵抗が必要} \\
22,23 & EX3.3 & 3.3V & 電源 1A \\
6,16,20,21,24,25 & GND & グラウンド & GND \\
\bottomrule
\end{tabular}
\caption{通信ポートの説明}
\end{table}
%-------------------------------------------------------------------------------
\subsubsection{SBCやMCUとの接続}
USBケーブルを介してKobukiとノートパソコンを接続すれば、そのパソコンから制御できる。 USBが使用できないパソコンやボードコンピュータ(Single Board Computer(SBC)やMicro Control Unit(MCU))では、通信ポートを利用してシリアル通信で制御することもできる。通信ポートを使用する際の注意点を以下に示す。
\begin{itemize}
\item RS-232インターフェース方式の接続 : Kobukiのシリアルポート(通信ポートの1,2番ピン)の使用電圧は標準3.3V、最大5V である。これ以外の通信基準電圧を使用する 産業用組込みLinuxボード等を接続する には、MAX232チップなどのライントランシーバ(line transceiver)を用いる必要がある(図9-10左図)。
\item MCUとの接続: Kobukiのシリアルピン入出力は3.3V〜5Vまで許容されるので、一般的なMCUは図9-10右図のように直接接続することができる 。
\item 通信プロトコルの仕様: 通信プロトコルの仕様は、次のURLに記載されている。
\\http://yujinrobot.github.io/kobuki/doxygen/enAppendixProtocolSpecification.html
\end{itemize}
\begin{figure}[htp]
\centering
\includegraphics[width=12cm]{pictures/chapter9/pic_09_10.png}
\caption{SBC、MCUとの接続方法}
\end{figure}
\begin{exercise}[通信ポート関連回路図の入手先]
通信ポートに関連した回路図は以下のURLから入手できる。
\\http://kobuki.yujinrobot.com/files/5613/5526/9189/io\_port\_121024.pdf
\end{exercise}
%-------------------------------------------------------------------------------
\section{Kobukiソフトウェア}
ROSを利用してKobukiを制御するために、以下の4つのメタパッケージが提供されている 。メタパッケージ(metapackage)とは、同じ目的のパッケージを複数集めたセットである。
\subsubsection{kobukiメタパッケージ}
Kobuki関連のソフトウェアがほぼすべて含まれ、通常使用されるパッケージのほとんどが提供されている。
\begin{itemize}
\item リポジトリ: https://github.com/yujinrobot/kobuki
\item パッケージ: kobuki\_auto\_docking、kobuki\_bumper2pc、kobuki\_capabilities、kobuki\_\\controller\_tutorial、kobuki\_description、kobuki\_keyop、kobuki\_node、kobuki\_random\\\_walker、kobuki\_rapps、kobuki\_safety\_controller、kobuki\_testsuite
\end{itemize}
\subsubsection{kobuki\_desktopメタパッケージ}
動力学シミュレータGazeboを用いたシミュレーション用パッケージ である
\begin{itemize}
\item リポジトリ: https://github.com/yujinrobot/kobuki\_desktop
\item パッケージ: kobuki\_dashboard、kobuki\_gazebo、kobuki\_gazebo\_plugins、kobuki\_qte\\stsuite
\subsubsection{kobuki\_softメタパッケージ}
可視化ツールであるRVizを利用したシミュレーション用パッケージである。
\begin{itemize}
\item リポジトリ: https://github.com/yujinrobot/kobuki\_soft
\item パッケージ: kobuki\_softapps、kobuki\_softnode
\end{itemize}
\subsubsection{kobuki\_coreメタパッケージ}
Kobukiのハードウェアを直接操作するためのドライバパッケージである。
\begin{itemize}
\item リポジトリ: https://github.com/yujinrobot/kobuki\_core
\item パッケージ: kobuki\_dock\_drive、kobuki\_driver、kobuki\_ftdi
\end{itemize}
以下では、各メタパッケージの詳細について説明する。
\begin{exercise}[Kobuki SDK]
Kobuki SDKは Kobuki制御用のWindows/Linux向けC/C ++ APIライブラリである。ROSパッケージを使用しない場合は、これらのライブラリを利用できる。\\
http://yujinrobot.github.io/kobuki/doxygen/enMainPage.html
\begin{itemize}
\item Windows用
http://files.yujinrobot.com/kobuki/windows/sdk-kobuki-x86-vs10-re\\lease.zip
\item Linux用
https://github.com/yujinrobot/kobuki\_core.git
\end{itemize}
\end{exercise}
\begin{exercise}[OpenRTMサポートソフトウェア]
KobukiはROS以外にRTミドルウエアのOpenRTMにも対応している。詳細は、OpenRTM公式ホームページのKobukiコンポーネントで確認できる。
http://openrtm.org/openrtm/node/273
\end{exercise}
%-------------------------------------------------------------------------------
\subsection{kobukiメタパッケージ}
kobukiメタパッケージには、Kobukiに関連するパッケージがほぼすべて含まれている。ここでは、主なパッケージについて説明していく。
\begin{itemize}
\item wiki: http://wiki.ros.org/kobuki
\item リポジトリ: https://github.com/yujinrobot/kobuki
\end{itemize}
\subsubsection{kobuki\_node}
\begin{itemize}
\item wiki: http://wiki.ros.org/kobuki\_node
\item Linux用Kobuki起動ドライバをROS用に再構成したパッケージである。また、nodelet(コラム参照)よりマルチスレッド機能を提供する。
\end{itemize}
\subsubsection{kobuki\_keyop}
\begin{itemize}
\item wiki: http://wiki.ros.org/kobuki\_keyop
\item キーボードでKobukiを遠隔操縦するためのパッケージである。
\end{itemize}
\subsubsection{kobuki\_random\_walker}
\begin{itemize}
\item wiki: http://wiki.ros.org/kobuki\_random\_walker
\item Kobukiに搭載した、バンパー、落下検知、ホイールドロップなどのセンサを用いて、周囲の環境をランダム走行するためのパッケージである。通常、Kobukiの基本動作を確認する際に使われる。
\end{itemize}
\subsubsection{kobuki\_safety\_controller}
\begin{itemize}
\item wiki: http://wiki.ros.org/kobuki\_safety\_controller
\item 搭載したセンサ情報に基づき、Kobukiを安全に制御するためのパッケージである。例えば、前進すれば落下すると予想されたときには、ユーザーが前進コマンドを与えても、それを無視してKobukiを停止する、などの制御が可能である。
\end{itemize}
\subsubsection{kobuki\_controller\_tutorial}
\begin{itemize}
\item wiki: http://wiki.ros.org/kobuki\_controller\_tutorial
\item Kobukiの制御法を学ぶためのチュートリアルパッケージである。例えば、Kobukiのバンパーが押されたときにLEDを点滅する機能などが解説されている。
\end{itemize}
\subsubsection{kobuki\_description}
\begin{itemize}
\item wiki: http://wiki.ros.org/kobuki\_description)
\item Kobukiのシミュレーションと可視化のための3次元モデル(URDFモデル)が含まれる。
\end{itemize}
\subsubsection{kobuki\_auto\_docking}
\begin{itemize}
\item wiki: http://wiki.ros.org/kobuki\_auto\_docking
\item Kobukiが自律的にドッキングステーションに接続 して、充電する動作に対するパッケージである。
\end{itemize}
\begin{exercise}[nodeletとは?]
nodeletは同じコンピュータ、同じプロセスで複数のプログラムを起動する方法であり、ROSのパッケージとして提供される。これを使えば、ROS上で複数のプログラム(スレッド)が同時に実行できる。
\end{exercise}
%-------------------------------------------------------------------------------
\subsection{kobuki\_desktopメタパッケージ}
kobuki\_desktopメタパッケージには、Kobukiを用いたシミュレーションと可視化に関連するパッケージがすべて含まれている。主要なパッケージを以下に示す。
\begin{itemize}
\item wiki: http://wiki.ros.org/kobuki\_desktop
\item リポジトリ: https://github.com/yujinrobot/kobuki\_desktop
\end{itemize}
\subsubsection{kobuki\_dashboard}
\begin{itemize}
\item wiki: http://wiki.ros.org/kobuki\_dashboard
\item rqtによるKobukiの状態の可視化のためプラグインである。ロボットおよびノートパソコンのバッテリー情報、エラー、警告情報をGUIプログラムで確認できる。
\end{itemize}
\subsubsection{kobuki\_gazebo}
\begin{itemize}
\item wiki: http://wiki.ros.org/kobuki\_gazebo
\item 3次元シミュレーション環境GazeboでKobukiを使用するために必要となる。
\end{itemize}
\subsubsection{kobuki\_gazebo\_plugins}
\begin{itemize}
\item wiki: http://wiki.ros.org/kobuki\_gazebo\_plugins
\item kobuki\_gazeboとともに使用するパッケージで、バンパー、落下検知、オドメトリ(走行距離に基づく位置情報)、IMU等のセンサを利用し、Kobukiを仮想的に制御できる。
\end{itemize}
%-------------------------------------------------------------------------------
\subsection{kobuki\_softメタパッケージ}
kobuki\_softメタパッケージでは、可視化ツールRVizでKobukiの動作をシミュレーションする環境を提供する。
\begin{itemize}
\item wiki: http://wiki.ros.org/kobuki\_soft
\item リポジトリ: https://github.com/yujinrobot/kobuki\_soft
\end{itemize}
\subsubsection{kobuki\_softnode}
\begin{itemize}
\item wiki: http://wiki.ros.org/kobuki\_softnode
\item Kobukiの動作をシミュレーションするパッケージである。RVizで実行することができる。
\end{itemize}
\subsubsection{kobuki\_softapps}
\begin{itemize}
\item wiki: http://wiki.ros.org/kobuki\_softapps
\item kobuki\_softnodeの関連パッケージで、ナビゲーションなどのアプリケーションが含まれる。
\end{itemize}
%-------------------------------------------------------------------------------
\subsection{kobuki\_coreメタパッケージ}
Kobukiやドッキングステーションを直接操作するためのドライバパッケージである。
\begin{itemize}
\item wiki: http://wiki.ros.org/kobuki\_core
\item リポジトリ: https://github.com/yujinrobot/kobuki\_core
\end{itemize}
\subsubsection{kobuki\_dock\_drive}
\begin{itemize}
\item wiki: http://wiki.ros.org/kobuki\_dock\_drive
\item ドッキングステーションを利用するためのパッケージが含まれる。
\end{itemize}
\subsubsection{kobuki\_driver}
\begin{itemize}
\item wiki: http://wiki.ros.org/kobuki\_driver
\item C++でKobukiを制御するためのドライバパッケージである。ROSを使わずにKobukiを制御できる 。
\end{itemize}
%-------------------------------------------------------------------------------
\section{Kobukiを用いたROSアプリケーション開発}
\index{Kobuki}
前節では、KobukiのハードウェアとKobukiを用いたROSアプリケーション開発 のためのパッケージを紹介した。本節では、Kobukiを実際に動かしながら、前節で紹介したパッケージの動作を確認する。
%-------------------------------------------------------------------------------
\subsection{Kobukiの動作確認}
\index{Test}
Kobukiには、単独でも動作する簡単なテストプログラムがインストールされている。まずはテストプログラムを実行して、Kobukiの動作を確認する 。
\begin{enumerate}
\item Kobukiを床の安全な場所に置く。机の上のようにKobukiが落下する可能性がある場所は避ける。
\item Kobukiの電源スイッチをオンにする。
\item 電源投入後、3秒以内にKobukiの制御パネルの<B0>ボタンを2秒間押して離す。
\item Kobukiがランダムに動きまわる。動作中、障害物がバンパーにぶつかると、その場回転して再度進む。動作しない場合には、バッテリー切れや故障の可能性がある。
\end{enumerate}
%-------------------------------------------------------------------------------
\subsection{開発環境}
\index{開発環境}
本章で用いる開発環境を図9-11に示す。開発環境は、必ずしも本書のとおりである必要はない。
\subsubsection{デスクトップPC}
Kobukiの操縦、センサ処理、ナビゲーションを担当する。すべての開発をこのコンピュータで行うとともに、ROSのマスター として用いる。
\begin{itemize}
\item Ubuntu 14.04 LTS 64bit(Trusty Tahr)
\item ROS Indigo
\item ROSパッケージ: Kobuki関連のすべてのパッケージ
\end{itemize}
\subsubsection{ノートパソコン(ラップトップPC)}
Kobukiに搭載するPCであり、Kobukiと直接通信して動作コマンドを送り、またセンサデータをデスクトップPCに送信する。
\begin{itemize}
\item Ubuntu 14.04 LTS 64bit(Trusty Tahr)
\item ROS Indigo
\item ROSパッケージ: ros-indigo-kobukiとros-indigo-kobuki-core
\end{itemize}
\begin{figure}[htp]
\centering
\includegraphics[width=10cm]{pictures/chapter9/pic_09_11.png}
\caption{開発環境}
\end{figure}
%-------------------------------------------------------------------------------
\subsection{Kobukiパッケージのインストール}
\index{ROS\_HOSTNAME}\index{ROS\_MASTER\_URI}
開発環境が整ったら、デスクトップPCとノートパソコンにKobuki関連パッケージをインストールする。
\subsubsection{ノートパソコンへのインストール}
\setcounter{num}{0}
\stepcounter{num}\circled{\thenum} ROS Indigoのインストール
Kobukiに搭載したノートパソコンにROS Indigoバージョンをインストールする。手順は2.1節を参照してほしい。\\
\stepcounter{num}\circled{\thenum} ノートパソコンのROSの環境設定
「.bashrc」ファイルに記述されたROS\_MASTER\_URIにはデスクトップPCのIPアドレスを設定し、ROS\_HOSTNAMEにはノートパソコンのIPアドレスを設定する。それぞれのIPアドレスは、ターミナルウィンドウを開いてifconfigコマンドを入力すれば確認できる。「.bashrc」ファイルの変更方法の詳細については、2.2節を参考にしてほしい。\\
\begin{lstlisting}[language=bash]
export ROS_HOSTNAME = %*ノートパソコンのIPアドレス*)
export ROS_MASTER_URI = http: //%*デスクトップPCのIPアドレス*):11311
\end{lstlisting}
\stepcounter{num}\circled{\thenum} Kobukiの制御に必要なパッケージのインストール
Kobukiを制御するために必要なパッケージros-indigo-kobukiとros-indigo-kobuki-coreをインストールする。\\
\begin{lstlisting}[language=ROS]
$ sudo apt-get install ros-indigo-kobuki ros-indigo-kobuki-core
\end{lstlisting}
\stepcounter{num}\circled{\thenum} SSHのインストール
以降では、通信ソフトウェアであるSSH(Secure Shell) を利用してデスクトップPCから接続するため、SSHをインストールする。\\
\begin{lstlisting}[language=ROS]
$ sudo apt-get install ssh
\end{lstlisting}
\subsubsection{デスクトップPCへのインストール}
\setcounter{num}{0}
\stepcounter{num}\circled{\thenum} ROS Indigoのインストール
デスクトップPCにも、ノートパソコンと同様にROS Indigoをインストールする。\\
\stepcounter{num}\circled{\thenum} デスクトップPCのROSの環境設定
ROS\_MASTER\_URIとROS\_HOSTNAMEにデスクトップPCのIPアドレスを設定する。\\
\begin{lstlisting}[language=bash]
export ROS_HOSTNAME = %*デスクトップPCのIPアドレス*)
export ROS_MASTER_URI = http: //%*デスクトップPCのIPアドレス*):11311
%*あるいは*)
export ROS_MASTER_URI = http: //${ROS_HOSTNAME}:11311
\end{lstlisting}
\stepcounter{num}\circled{\thenum} Kobuki関連のすべてのパッケージのインストール
次のように、Kobukiの制御に関連するすべてのパッケージをインストールする。ただし、シミュレーションに関連したパッケージのインストールについては、9.10節で解説する。\\
\begin{lstlisting}[language=ROS]
$ sudo apt-get install ros-indigo-kobuki*
\end{lstlisting}
以上で、基本的な開発環境が構築できた。次節では実際に簡単なプログラムを実行する。\\
\begin{exercise}[小型SBC(Single Board Computer)の使用]
タートルボットの制御には、ノートパソコンではなくラズベリーパイなどの小型SBCを用いることもできる。ただし、Kinect、Xtionなどデプスカメラを使用する場合には、高性能なボードが必要となる。
\end{exercise}
%-------------------------------------------------------------------------------
\section{Kobukiのリモートコントロール}
\index{リモートコントロール}\index{リモート}\index{Remote}
\setcounter{num}{0}
ROSを利用してデスクトップPCからノートパソコンに動作指令を送り、Kobukiを操縦してみよう。
\stepcounter{num}\circled{\thenum} マスターの起動
デスクトップPCで、ターミナルウィンドウを開いてroscoreを実行する。なお、以降で説明する各コマンドはすべて、新しいターミナルウィンドウを開いて実行する必要がある。
\begin{lstlisting}[language=ROS]
$ roscore
\end{lstlisting}
\stepcounter{num}\circled{\thenum} SSHによるデスクトップPCからノートパソコンへの接続
KobukiとノートパソコンをUSBケーブルで接続し、電源スイッチをオンにする。次に、デスクトップPCからSSHでノートパソコンに接続する。 ターミナルウィンドウで「ssh ユーザー名@ノートパソコンのIPアドレス」のように入力すると、ノートパソコンに接続できる。
\begin{lstlisting}[language=bash]
$ %*sshユーザー名*)@%*ノートパソコンのIPアドレス*)
\end{lstlisting}
\stepcounter{num}\circled{\thenum} Kobukiポートの作成
ノートパソコンに接続したターミナルウィンドウで、次のようにcreate\_udev\_rul\\esノードを実行する。これにより、「/dev/kobuki」ポートが生成される。
\begin{lstlisting}[language=ROS]
$ rosrun kobuki_ftdi create_udev_rules
\end{lstlisting}
上記を実行した後、いちどUSBケーブルを抜いて、再度接続する。「ls -l /dev/kobuki」コマンドで接続ポートを確認できる。
\begin{lstlisting}[language=ROS]
$ ls -l /dev/kobuki
lrwxrwxrwx 1 root root 7 Aug 24 14:26 /dev/kobuki -> ttyUSB0
\end{lstlisting}
上の例では、「/dev/kobuki」のポートはttyUSB0に接続されている。ttyUSB0,1,2など接続状態が変わっても 、create\_udev\_rulesノードを実行すれば「/dev/kobuki」という統一されたポートを使用できる。\\
\stepcounter{num}\circled{\thenum} Kobukiの起動
ノートパソコンに接続したターミナルウィンドウで次のコマンドを実行すると、ビープ音が鳴り、初期設定の完了後に待機状態となる。
\begin{lstlisting}[language=ROS]
$ roslaunch kobuki_node minimal.launch --screen
\end{lstlisting}
ノートパソコン上で実行する必要があるノードは以上である。このノードを終了 するには、<Ctrl> + <c>を押す。\\
\stepcounter{num}\circled{\thenum} キーボード制御ノードの起動
デスクトップPC上で新しいターミナルウィンドウを開き、次のように入力する。
\begin{lstlisting}[language=ROS]
$ roslaunch kobuki_keyop keyop.launch
\end{lstlisting}
この際、\circled{4}で使用したターミナルウィンドウはそのままにしておく。\circled{5}を実行したターミナルウィンドウでキーボードを押すと、Kobukiを遠隔制御できる。Kobukiの操作に使用するキーの一覧を以下に示す。
\begin{itemize}
\item 方向キー↑: 指定された並進速度で前進する。(一回押すごとに0.5 m/secずつ速度が増加)
\item 方向キー↓: 指定された並進速度で後進する。(一回押すごとに0.5 m/secずつ速度が増加)
\item 方向キー←: 指定された回転速度で反時計回りに回転する。(一回押すごとに0.33 rad/secずつ速度が増加)
\item 方向キー→: 指定された回転速度で時計方向に回転する。(一回押すごとに0.33 rad/secずつ速度が増加)
\item スペースバー: 並進速度と回転速度を初期化する。
\item d: モータを無効にする。(Kobukiが動作不能状態になる)
\item e: モータを有効にする。(Kobukiが動作可能状態になる)
\item q: 終了
\end{itemize}
\begin{exercise}[kobukiの安全な操作方法(セーフモード)]
セーフモードとは、ユーザーの不注意でKobukiが損傷するのを防止するため、急激な速度変化を防ぎ、またバンパー、落下検知センサ、ホイールドロップセンサの値から危険な状況を回避するモードである。 次の命令で実行する。
\begin{lstlisting}[language=ROS]
$ roslaunch kobuki_keyop safe_keyop.launch
\end{lstlisting}
\end{exercise}
ここまで、基本的な開発環境を構築し、Kobukiの動作を確認した。次節では、これまでに紹介したKobuki関連パッケージのノードを実際に使用した場合の動作を説明する。
%-------------------------------------------------------------------------------
\section{Kobukiのトピック}
本節では、実際にKobukiを動作させ、配信、購読されているトピックを確認するとともに、それぞれのトピックを使ったKobukiの制御について解説する。
%-------------------------------------------------------------------------------
\subsection{kobuki\_nodeパッケージ で使用されるトピック}
ノートパソコンに接続したターミナルウィンドウで、「roslaunch kobuki\_node minimal.launch 」コマンドを実行してKobukiを起動する。kobuki\_nodeパッケージのmobile\_baseノードが動作している間 、Kobukiのバンパー、落下検知センサ、ホイールドロップセンサ、モータ駆動部などの情報はトピックメッセージとして配信されているので、これを確認してみる。
デスクトップPCでroscoreのみを実行し、それ以外のノードを実行していない状態で、「rostopic list」コマンドでトピックのリストを見てみると、「/rosout」、「/rosout\_agg」しか現れない。しかし、ノートパソコンに接続したターミナルウィンドウでkobuki\_nodeパッケージのminimal.launchを実行すると、次のようにkobuki\_nodeパッケージで使用されるさまざまなトピックを確認できる。
\begin{lstlisting}[language=ROS]
$ rostopic list
/diagnostics
/diagnostics_agg
/diagnostics_toplevel_state
/joint_states
/mobile_base/commands/controller_info
/mobile_base/commands/digital_output
/mobile_base/commands/external_power
/mobile_base/commands/led1
/mobile_base/commands/led2
/mobile_base/commands/motor_power
/mobile_base/commands/reset_odometry
/mobile_base/commands/sound
/mobile_base/commands/velocity
/mobile_base/controller_info
/mobile_base/debug/raw_control_command
/mobile_base/debug/raw_data_command
/mobile_base/debug/raw_data_stream
/mobile_base/events/bumper
/mobile_base/events/button
/mobile_base/events/cliff
/mobile_base/events/digital_input
/mobile_base/events/power_system
/mobile_base/events/robot_state
/mobile_base/events/wheel_drop
/mobile_base/sensors/core
/mobile_base/sensors/dock_ir
/mobile_base/sensors/imu_data
/mobile_base/sensors/imu_data_raw
/mobile_base/version_info
/mobile_base_nodelet_manager/bond
/odom
/rosout
/rosout_agg
/tf
...
\end{lstlisting}
GUI環境で確認するには、「rqt\_graph」コマンドを使用する。これにより、実行されたすべてのノードとトピックが確認できる。
%-------------------------------------------------------------------------------
\subsection{購読者トピック}
前節で確認したトピック は、Kobukiのノートパソコンが受信している購読者トピックと、ノートパソコンから送信される配信者トピックに分けることができる。このうち、購読者トピックは次の通りである。
\begin{lstlisting}[language=ROS]
/mobile_base/commands/controller_info
/mobile_base/commands/digital_output
/mobile_base/commands/external_power
/mobile_base/commands/led1
/mobile_base/commands/led2
/mobile_base/commands/motor_power
/mobile_base/commands/reset_odometry
/mobile_base/commands/sound
/mobile_base/commands/velocity
\end{lstlisting}
それぞれのトピックについて、より詳しい説明を表9-2に示す1 。例えば、「velo\\city」はKobukiの動作速度を設定するトピックである。ユーザーは、ロボットの前進、後進、左右旋回、静止などを、このトピックを介して制御できる。
\begin{table}[htp]
\centering
\small
\begin{tabular}{p{2cm} p{5cm} p{5cm}}
\toprule
\textbf{名} & \textbf{タイプ} & \textbf{機能}\\
\midrule
controller\_info & kobuki\_msgs/ControllerInfo & PIDゲイン設定(デフォルトのPID ゲイン: Kp = 100、Ki = 0.1、Kd = 2)}\\
digital\_output & kobuki\_msgs/DigitalOutput & デジタル出力ピン制御 \\
external\_power & kobuki\_msgs/ExternalPower & 外部電源On/Off \\
led1 & kobuki\_msgs/Led & LED1制御 \\
led2 & kobuki\_msgs/Led & LED2制御 \\
motor\_power & kobuki\_msgs/MotorPower & KobukiモータOn/Off \\
reset\_odometry & std\_msgs/Empty & オドメトリ(走行距離に基づく位置情報)のリセット \\
sound & kobuki\_msgs/Sound & ビープ音 \\
velocity & geometry\_msgs/Twist & 前進後進速度(m/s)、回転速度(rad/s)の設定 \\
\bottomrule
\end{tabular}
\caption{Kobukiの購読者トピック}
\end{table}
%-------------------------------------------------------------------------------
\subsection{購読者トピックによるKobukiの制御}
前項で示した購読者トピックを利用して、ユーザーはKobukiを様々に制御できる。 ここでは、このうち代表的な購読者トピックの使い方を紹介する 。
\subsubsection{led1トピック}
Kobukiの制御パネルのLED1を制御する。新しいターミナルウィンドウを開いて、次のコマンドを入力すると、LED1が点灯する。
\begin{lstlisting}[language=ROS]
$ rostopic pub /mobile_base/commands/led1 kobuki_msgs/Led "value: 1"
\end{lstlisting}
ここで、"value: 1"はvalueオプションが1であることを示す。valueオプションは0〜3まで設定できる 。 0はLEDをオフ、1は緑、2はオレンジ、3は赤で点灯する。
\subsubsection{soundトピック}
Kobukiのビープ音を鳴らすもので、valueオプションで次の0〜6まで設定できる。0: 電源On音、2: 充電開始音、3: ボタンのクリック音、4: エラー発生音、5: 清掃開始音、6: クリーニング終了音である。
\begin{lstlisting}[language=ROS]
$ rostopic pub /mobile_base/commands/sound kobuki_msgs/Sound "value: 6"
\end{lstlisting}
\subsubsection{velocityトピック}
Kobukiの並進速度、回転速度を制御する。ここでKobukiの運動を表現するためにx、y、zの3つの軸を導入する。x軸が前進方向、y軸が右方向、z軸が上方向である。また並進速度の単位はm/s、回転速度はrad/sである。
次の例のようにlinearのxの値に0.2を与えた場合、Kobukiは0.2m/sの速度で前進する。
\begin{lstlisting}[language=ROS]
$ rostopic pub /mobile_base/commands/velocity geometry_msgs/Twist "linear:
x: 0.2
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0"
\end{lstlisting}
また、次の例のようにangularのzの値に1.0を与えた とき、Kobukiはz軸を中心に反時計回り に1.0rad/sの速度で回転する。
\begin{lstlisting}[language=ROS]
$ rostopic pub /mobile_base/commands/velocity geometry_msgs/Twist "linear:
x: 0.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 1.0"
\end{lstlisting}
%-------------------------------------------------------------------------------
\subsection{配信者トピック}
Kobukiが配信するトピックは、状態の診断関連トピック(diagnostics)、デバッグ関連トピック(debug)、イベント (状態変化)関連トピック(events)、センサ関連トピック(sensors)、ジョイント関連トピック(joint\_states)、制御情報に関連するトピック(controller\_info)、オドメトリ(odom)と座標変換(tf)関連トピックなどがある。
\begin{lstlisting}[language=ROS]
/diagnostics
/diagnostics_agg
/diagnostics_toplevel_state
/joint_states
/mobile_base/controller_info
/mobile_base/debug/raw_control_command
/mobile_base/debug/raw_data_command
/mobile_base/debug/raw_data_stream
/mobile_base/events/bumper
/mobile_base/events/button
/mobile_base/events/cliff
/mobile_base/events/digital_input
/mobile_base/events/power_system
/mobile_base/events/robot_state
/mobile_base/events/wheel_drop
/mobile_base/sensors/core
/mobile_base/sensors/dock_ir
/mobile_base/sensors/imu_data
/mobile_base/sensors/imu_data_raw
/mobile_base/version_info
/mobile_base_nodelet_manager/bond
/odom
/tf
\end{lstlisting}
いくつかの代表的な配信者トピックについて、より詳しい説明を表9-3から表9-6に示す。特に、odom、tf、joint\_states、sensorsの各トピックは、今後Kobukiを使用する際に特に重要なトピックなので、どのような情報を含んでいるか、理解してほしい。
\begin{table}[htp]
\centering
\begin{tabular}{p{2cm} p{5cm} p{6cm}}
\toprule
\textbf{名} & \textbf{タイプ} & \textbf{機能}\\
\midrule
bumper & kobuki\_msgs/BumperEvent & バンパーOn/Offイベント、左側(0)、中央(1)、右側(2)のバンパーの状態を示し、通常の状態が0、押した場合は、1である。} \\
button & kobuki\_msgs/ButtonEvent & ボタンOn/Offイベント、ボタン0、1、2の値で、通常の状態が0、押した場合は、1である。\\
cliff & kobuki\_msgs/CliffEvent & 落下検知イベント、左(0)、中央(1)、右側(2)の崖の検出状態を示し、通常の状態が0、崖と判断される場合、1である。 \\
digital\_input & kobuki\_msgs/DigitalInputEvent & デジタル入力値(DI0、1、2、3) \\
power\_system & kobuki\_msgs/PowerSystemEvent & 電源の状態を示す。 \\
& & 0 = UNPLUGGED \\
& & 1 = PLUGGED\_TO\_ADAPTER \\
& & 2 = PLUGGED\_TO\_DOCKBASE \\
& & 3 = CHARGE\_COMPLETED \\
& & 4 = BATTERY\_LOW \\
& & 5 = BATTERY\_CRITICAL \\
robot\_state & kobuki\_msgs/RobotStateEvent & ロボットのオン/オフライン状態を示す。\\
wheel\_drop & kobuki\_msgs/WheelDropEvent & 左(0)、右側(1)車輪がドロップされているかを表し、通常の状態が0、車輪がドロップされている場合が1である。\\
\bottomrule
\end{tabular}
\caption{Kobukiイベント関連トピック}
\end{table}
\begin{table}[htp]
\centering
\begin{tabular}{p{2cm} p{5cm} p{6cm}}
\toprule
\textbf{名} & \textbf{タイプ} & \textbf{機能}\\
\midrule
core & kobuki\_msgs/SensorState & 50Hz周期制御ですべてのセンサの値を配信するトピックである。 \\
dock\_ir & kobuki\_msgs/DockInfraRed & ドッキング充電ステージで走査する赤外線LEDをKobukiが受信したときの、近接値を配信する。\\
& & NONE = 0 \\
& & NEAR\_LEFT = 1 \\
& & NEAR\_CENTER = 2 \\
& & NEAR\_RIGHT = 4 \\
& & FAR\_LEFT = 16 \\
& & FAR\_CENTER = 8 \\
& & FAR\_RIGHT = 32 \\
imu\_data & sensor\_msgs/Imu & ジャイロセンサのデータで、方向とz軸の角速度情報を示す。\\
imu\_data\_raw & sensor\_msgs/Imu & ジャイロセンサの補正前データでx、y、z軸の各角速度データを示す。これを補正した情報が、前述のimu\_dataトピックである。\\
\bottomrule
\end{tabular}
\caption{Kobukiセンサ関連トピック}
\end{table}
\begin{table}[htp]
\centering
\begin{tabular}{p{4cm} p{4cm} p{5cm}}
\toprule
\textbf{名} & \textbf{タイプ} & \textbf{機能}\\
\midrule
raw\_control\_command & std\_msgs/Int16MultiArray & 速度コマンドの送受信値の確認 \\
raw\_data\_command & std\_msgs/String & ロボットに送信した加工前のバイトストリーム値を確認 \\
raw\_data\_stream & std\_msgs/String & ロボットから受信された加工前のバイトストリーム値を確認 \\
\bottomrule
\end{tabular}
\caption{Kobukiデバッグ関連トピック}
\end{table}
\begin{table}[htp]
\centering
\begin{tabular}{p{2cm} p{3cm} p{8cm}}
\toprule
\textbf{名} & \textbf{タイプ} & \textbf{機能}\\
\midrule
odom & nav\_msgs/ Odometry & ジャイロとエンコーダ情報に基づいてKobukiのオドメトリ情報を得ることができる。\\
tf & tf2\_msgs/ TFMessage & base\_footprintとodom位置の変換値を有する。\\
joint\_states & sensor\_msgs /JointState & 左/右車輪をジョイントとした時の位置、速度、力などを確認可能である。各ユニットは、位置: m、速度: m/s、力: N•mである。\\
diagnostics & diagnostic\_msgs/ DiagnosticArray & 1Hz周期で自己診断情報を得ることができる。\\
version\_info & kobuki\_msgs/ VersionInfo & Kobukiのハードウェア、ファームウェア、ソフトウェアのなどの情報を得ることができる。\\
\bottomrule
\end{tabular}
\caption{その他の配信者トピック}
\end{table}
%-------------------------------------------------------------------------------
\subsection{配信者トピックによるロボットの状態の把握}
前項で紹介した配信者トピックでは、ロボットのセンサ値、モータの状態、位置などが配信される。 この項では、実際にいくつかのトピックを受信して、現在のロボットの状態を確認してみよう。
\subsubsection{bumperトピック}
「/events/bumper」トピックは、3つのバンパー(左 、中央、右)(図9-5参照)の状態を示すことができる。例えば、つぎのように表示される。
\begin{lstlisting}[language=ROS]
$ rostopic echo /mobile_base/events/bumper
----
bumper: 1 %*(中央のバンパーが押されている)*)
state: 1
----
bumper: 1 %*(中央のバンパーが押されていない)*)
state: 0
----
\end{lstlisting}
bumperの値は0, 1, 2の3通りで、それぞれ左、中央、右のバンパーを指す。また、stateの値がバンパーの状態を表し、0は押されていない状態、1は押されている状態に対応する。
\subsubsection{coreトピック}
「/sensors/core」トピックでは、bumper、wheel\_drop、cliff、left\_encoder、right\_enc\\oder、left\_pwm、right\_pwm、buttons、charger、battery、bottom、current、over\_curre\\nt、digital\_input、analog\_inputのセンサの値を配信している。各データの単位は、「kobuki\_msgs/SensorState」\footnote{\url{http://docs.ros.org/indigo/api/kobuki\_msgs/html/msg/SensorState.html
}}で確認してほしい。
\begin{lstlisting}[language=ROS]
$ rostopic echo /mobile_base/sensors/core
---
header:
seq: 357
stamp:
secs: 1408945474
nsecs: 493550939
frame_id: ''
time_stamp: 64516
bumper: 0
wheel_drop: 0
cliff: 0
left_encoder: 21939
right_encoder: 15968
left_pwm: 0
right_pwm: 0
buttons: 0
charger: 0
battery: 159
bottom: [1539, 1863, 1666]
current: [0, 0]
over_current: 0
digital_input: 0
analog_input: [4067, 4072, 4069, 4069]
---
\end{lstlisting}
\subsubsection{odomトピック}
\index{Odometry}
odomトピックを使用すると、ジャイロとエンコーダに基づいたオドメトリ情報(走行距離に基づく位置情報)を得られる。これは、ナビゲーションに必須の情報である。
\begin{lstlisting}[language=ROS]
$ rostopic echo /odom
---
header:
seq: 977578
stamp:
secs: 1408946075
nsecs: 676067096
frame_id: odom
child_frame_id: base_footprint
pose:
pose:
position:
x: 0.413290941207
y: .0.229207993856
z: 0.0
orientation:
x: 0.0
y: 0.0
z: .0.921795503319
w: 0.387676476022
covariance: [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
1.7976931348623157e+308, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.7976931348623157e+308, 0.0, 0.0, 0.0,0.0, 0.0, 0.0, 1.7976931348623157e+308, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.05]
%*~省略~*)
\end{lstlisting}
\subsubsection{tfトピック}
\index{tf}
tfトピックは、XY平面上のロボットの中心位置情報であるbase\_footprintと、オドメトリ情報であるodomとの座標変換情報を有する。初期状態ではこの2つの位置情報のみを含むが、KinectやLRFなどを装着した場合に、その取り付け位置を追加で記述することもできる。
\begin{lstlisting}[language=ROS]
$ rostopic echo /tf
---
transforms:
-
header:
seq: 0
stamp:
secs: 1408946313
nsecs: 528813156
frame_id: odom
child_frame_id: base_footprint
transform:
translation:
x: 0.413290941207
y: 0.229207993856
z: 0.0
rotation:
x: 0.0
y: 0.0
z: .0.921795503319
w: 0.387676476022
---
\end{lstlisting}
また、次のようにrqtの「tf\_tree」プラグインを利用すれば、図9-12にようにGUI環境でも確認できる。
\begin{lstlisting}[language=ROS]
$ rosrun rqt_tf_tree rqt_tf_tree
\end{lstlisting}
\begin{figure}[htp]
\centering
\includegraphics[width=10cm]{pictures/chapter9/pic_09_12.png}
\caption{tf\_treeによる座標変換の表示}
\end{figure}
%-------------------------------------------------------------------------------
\section{Kobukiの状態を確認するためのツール}
本節では、Kobukiの状態の確認に便利なツールを3つ紹介する。
%-------------------------------------------------------------------------------
\subsection{rqt\_robot\_monitor}
電源やモータ、センサ、処理プログラムなどで生じるエラーメッセージや警告メッセージは、アプリケーション開発には欠くことができない重要な情報である。これらの情報を開発者へ提供するために、ROSでは、rqt\_robot\_monitorパッケージを用意している。次のコマンドでrqt\_robot\_monitorをインストールし、実行する。
\begin{lstlisting}[language=ROS]
$ sudo apt-get install ros-indigo-rqt-robot-monitor
$ rosrun rqt_robot_monitor rqt_robot_monitor
\end{lstlisting}
rqt\_robot\_monitorノードを実行すると、図9-13のように、ロボットに関する様々な情報が表示される。例えばリンクエラーや警告情報、バッテリーの状態、バンパーの状態、落下検知、ホイールドロップ、モータ電流、ジャイロセンサの値、アナログ/デジタル入力値などである。
\begin{figure}[htp]
\centering
\includegraphics[width=12cm]{pictures/chapter9/pic_09_13.png}
\caption{rqt\_robot\_monitorを用いたロボットの診断}
\end{figure}
Error Deviceには、ハードウェアやドライバにエラーがある場合に、その内容が表示される。Warned Deviceには、エラーではないが、何か警告すべき状態が生じたときに、その内容が表示される。All devicesにはセンサやバッテリーなどの情報を示される。