gazebo-rcllのtag
gazebo-rcllは,2022年10月に更新が止まっています.
そして,RCLL では,Secondly, the deprecated ALVAR tags got replaced by ARUCO tags as markers for machines. とのことで,2022年にTagの種類がALVARからARUCOに変わっています(これはRobotino View がARUCOを使っている というのが理由だと私は思っています).
さて,gazebo-rcll を今の大会で使うには,この部分を更新しないといけませんね.
というわけで,そのメモです.
対応表が欲しいですね.
2016年と2023年のルールブックより
input | output | ||||
2016 | 2023 | 2016 | 2023 | ||
Cyan | Machine | Tag ID | Tag ID | ||
CS 1 | 1 | 102 | 2 | 101 | |
CS 2 | 17 | 104 | 18 | 103 | |
RS 1 | 33 | 112 | 34 | 111 | |
RS 2 | 177 | 114 | 178 | 113 | |
BS | 65 | 122 | 66 | 121 | |
DS | 81 | 132 | 82 | 131 | |
SS | — | 142 | — | 141 | |
Magenta | CS 1 | 97 | 202 | 98 | 201 |
CS 2 | 113 | 204 | 114 | 203 | |
RS 1 | 129 | 212 | 130 | 211 | |
RS 2 | 145 | 214 | 146 | 213 | |
BS | 161 | 222 | 162 | 221 | |
DS | 49 | 232 | 50 | 231 | |
SS | — | 242 | — | 241 |
こうやってみてみるとArucoへ変更した際にIDに,規則性も重視したのがわかりますね.
CyanとMagentaの関係(100番台がCyan,200番台がMagenta).
マシンの種類の関係(10番台).
同じマシン同士の関係(CS-1とCS-2,RS-1とRS-2の違いは1番台).
InputとOutputの関係(1違い).
ファイルの準備
まず,大元のファイルを持ってきましょう.
git clone https://github.com/robocup-logistics/rcll-rulebook cp -r rcll-rulebook/markers . cd markers
画像サイズの変更
で,一応画像サイズも変更しておきましょぅか.
sudo apt-get install imagemagick mogrify -resize 175x175 *.png
ファイル名の変更
名前の変更.
301と302はUnkown用なので,今のgazeboでは使っていませんが,将来的に使うことになりそうなので,含めておきます.
for TAG in 101 102 103 104 111 112 113 114 121 122 131 132 141 142 201 202 203 204 211 212 213 214 221 222 231 232 241 242 301 302;do cp figure_$TAG.png tag$TAG.png; done
worldの変更
world のタグの部分を修正.
<include> <name>tag_01</name> <uri>model://tag</uri> <pose>0 -1 0.2 0 0 0</pose> </include>
これを全て変更….
なお,ここでは全て同じ座標にセットしているので,順番は関係ありません.
先ほどの対応表は無視して,TAG番号順に書いて問題ありません.
(とすると,先ほどのfor 文みたいな感じで,一括生成できますね)
scriptの変更
次は,gazebo-rcll/models/tag/materials/scripts/label.meterial の変更.
この中は,各タグに対して画像ファイルを割り当てているので,
material tag/tag_01 { receive_shadows off technique { pass { texture_unit { texture tag01.png filtering anistropic max_anisotropy 16 } } } }
上記の,material の部分と,texture の部分を全て変更.
これも,一括生成したいなぁ.
あぁそうか.ここのtextureで301と302を指定したら,UnkownなMPSが簡単に生成できますね.
tagとMPSの関連付け
このまま実行すると,tag とMPSの貼り付けのところで対応付けできないはず.
「Tags not there, yet」のエラーが出ます.
これは,plugins/src/plugins/mps/mps.cpp ですね.
ファイルを見てみると,
const std::map<std::string, std::string> Mps::name_id_match = { {"C-CS1I", "tag_01"}, {"C-CS1O", "tag_02"}, {"C-CS2I", "tag_17"}, {"C-CS2O", "tag_18"}, {"C-RS1I", "tag_33"}, {"C-RS1O", "tag_34"}, {"C-RS2I", "tag_177"}, {"C-RS2O", "tag_178"}, {"C-BSI", "tag_65"}, {"C-BSO", "tag_66"}, {"C-DSI", "tag_81"}, {"C-DSO", "tag_82"}, {"M-CS1I", "tag_97"}, {"M-CS1O", "tag_98"}, {"M-CS2I", "tag_113"}, {"M-CS2O", "tag_114"}, {"M-RS1I", "tag_129"}, {"M-RS1O", "tag_130"}, {"M-RS2I", "tag_145"}, {"M-RS2O", "tag_146"}, {"M-BSI", "tag_161"}, {"M-BSO", "tag_162"}, {"M-DSI", "tag_49"}, {"M-DSO", "tag_50"}, {"C-SSO", "tag_194"}, {"C-SSI", "tag_193"}, {"M-SSO", "tag_210"}, {"M-SSI", "tag_209"}};
なるほど.ここですね.
以下でいいのかなぁ.
const std::map<std::string, std::string> Mps::name_id_match = { {"C-CS1I", "tag_102"}, {"C-CS1O", "tag_101"}, {"C-CS2I", "tag_104"}, {"C-CS2O", "tag_103"}, {"C-RS1I", "tag_112"}, {"C-RS1O", "tag_111"}, {"C-RS2I", "tag_114"}, {"C-RS2O", "tag_113"}, {"C-BSI" , "tag_122"}, {"C-BSO" , "tag_121"}, {"C-DSI" , "tag_132"}, {"C-DSO" , "tag_131"}, {"M-CS1I", "tag_202"}, {"M-CS1O", "tag_201"}, {"M-CS2I", "tag_204"}, {"M-CS2O", "tag_203"}, {"M-RS1I", "tag_212"}, {"M-RS1O", "tag_211"}, {"M-RS2I", "tag_214"}, {"M-RS2O", "tag_213"}, {"M-BSI" , "tag_222"}, {"M-BSO" , "tag_221"}, {"M-DSI" , "tag_232"}, {"M-DSO" , "tag_231"}, {"C-SSO" , "tag_142"}, {"C-SSI" , "tag_141"}, {"M-SSO" , "tag_242"}, {"M-SSI" , "tag_241"}};
different station mps.cpp: 228
なんだろう.これ,変更前でもたまに見かけたエラーです.
コメントを残す