日記(2022年3月20日)
Sun Mar 20 15:10:05 JST 2022 (modified: Sun Mar 20 16:52:15 JST 2022)
views: 4599, keywords:日記, ROS, CMake この記事は最終更新日が2年以上前のものです。
本日は細々としたタスクを片付けて、その後、自己位置推定のemclパッケージが混乱していたので整理。
emclパッケージ、性能を改善しようとしてゴチャゴチャになっていたのですが、屋内用と屋外用にパッケージを分けました。
— 上田 隆一 (@ryuichiueda) March 20, 2022
屋内用: https://t.co/u6MQhjRRuN
屋外用: https://t.co/i6adtf1wQq#emcl
catkin_makeのときに同じ名前のクラスが複数あってbuildできないとき
emclの分離作業を進めていたら、catkin_make
が「(emclとemcl2に)同じ名前のクラスがある」と言ってエラーを吐きました。
CMake Error at emcl2/CMakeLists.txt:18 (add_library):
add_library cannot create target "Mcl" because another target with the same
name already exists. The existing target is a shared library created in
source directory "/home/ueda/catkin_ws/src/emcl". See documentation for
policy CMP0002 for more details.
C++のコードでnamespaceを分けておけば大丈夫かと思ってたらどうやらそれではダメらしく、次のリンクのようにCMakeLists.txt
のadd_library
とtarget_link_libraries
を変更しなければならないと分かりました。add_library
の最初の引数の名前をユニークなものにしなければならないようです。
例えば上のリンクの例では、add_library(Mcl src/Mcl.cpp)
のMcl
をadd_library(Mcl_emcl2 src/Mcl.cpp)
というように、Mcl_emcl2
という固有の名前に変更しています。target_link_libraries
では、add_library
でつけた名前で当該のライブラリ(というよりはsrc/Mcl.cpp
をコンパイルしたオブジェクト?)を参照します。
さらにTwitterで、元研究室メンバーのたいりょー氏から情報いただきました。他のパッケージと切り離す設定もできるとのこと。
CMP002はlibraryの名前をワークスペース内でユニークにする以外にもビルド方法をcatkin_make_isolatedコマンドにするという選択肢もあります(ROSパッケージごとにCMakeが実行されるのでパッケージ内でユニークになっていればよくなります)https://t.co/2rbMztY16r
— たいりょーくん (@Tiryoh) March 20, 2022
ただ、ライブラリ名はユニークに、というルールは悪くないと思うので、とりあえず上記の方法を選択ということで・・・。ありがとうございます。
本まで書いてるのに、ここらへんグダグダで大変申し訳なく・・・。
シェル・ワンライナー160本ノック増刷
ROSだけでなく、シェルについても本まで書いているのにさっぱり分からんと日々悩んでますが、第4刷が出ます!
【ご報告】4刷出まーす!!🎉
— 上田 隆一 (@ryuichiueda) March 15, 2022
1日1問、半年以内に習得 シェル・ワンライナー160本ノック (Software Design plusシリーズ) 上田 隆一 https://t.co/tl68IPNE7d @amazonJPより
シェルさっぱり分からんけど出るものは仕方ない。よろしくお願いいたしまーす。
縦の猫動画が人気
48時間で2000viewsいきそうです。
こっちのほうが面白いと思うんですが・・・、かなり前からアップされているのに抜かれました。やっぱり縦長のショート動画だとよさげ・・・。
昔の猫動画を縦長に編集してアップしてみるか・・・。
その他
今日はなぜかいろいろ仕事が進んで、マンションのある会から依頼されていたポスターを完成させて提出。なぜか明日(祝日なんですけど)を締め切りにご指定いただいた報告書も完成。明日はなにをしよう・・・。
以上です。