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

なんだろう.これ,変更前でもたまに見かけたエラーです.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*