主要介紹ros中庫的編譯以及呼叫,第三方so庫的呼叫,依賴其他package中messages/services/actions檔案(需要msg.h等先生成)的問題。
庫名稱為autodrive_common,對應標頭檔案在include目錄下,需要在catkin_package中新增include_dirs和libraries,表示當前package(autodrive_common)對外提供的庫以及標頭檔案。
project
(autodrive_common)
catkin_package
(include_dirs include
libraries autodrive_common)
新增庫相關編譯,庫由string_tokenizer.cc生成。
add_library
(autodrive_common src/string_tokenizer.cc)
如何呼叫libautodrive_common.so?
在package.xml中新增對autodrive_common package的build和run depend,
autodrive_commonbuild_depend>
autodrive_commonrun_depend>
在需要呼叫庫的package的cmakelists.txt中在find_package中將autodrive_common作為catkin的components,然後就可以找到autodrive_common對外export的標頭檔案$
和庫$
。
find_package( catkin required components
autodrive_common)
include_directories(
include$)
target_link_libraries(planning_node $)
對某些不開源的第三方庫的使用,例如libcancmd.so,將其放到package下的lib目錄下,標頭檔案放置在include目錄下,
#找到頭檔案目錄
include_directories(
include
)#指定庫所在的目錄
link_directories(lib)
#應用程式prog鏈結cancmd庫
target_link_libraries(prog cancmd )
對於將msg統一放在乙個package中進行管理的情況,其他package在編譯時需要先將該msg對應的package先編譯生成對應的標頭檔案。假如專門管理msg的package名為msgpackage。
#利用find_package將msgpackage設定為catkin的components,
find_package(catkin required components msgpackage)
add_executable(message_program src/main.cpp)
#設定message_program的依賴為$
add_dependencies(message_program $)
那麼$
是什麼?在cmakelists.txt中我們可以利用message()函式去debug,例如,
都是些形如package_name_generage_messages_cpp的flag,所以對msg/service等的依賴,既可以使用package_name_generage_messages_cpp這種形式,也可以一勞永逸的通過find_package
和catkin_exported_targets
進行設定。
ros中的一些感測器
1imu.msg 陀螺儀資料 加速度m s2,旋轉速度rad s,1 header header 時間戳與座標系 2 geometry msgs quaternion orientation 四元數表示方向 3 float64 9 orientation covariance協方差 4 geomet...
ROS入門 5 深入了解ROS話題通訊機制的過程
乙個節點需要與系統中其他節點進行通訊才有意義,系統中任何單獨的乙個節點其實都是沒有意義的。下圖是乙個話題通訊的過程示意圖,乙個節點通過節點管理器連線到另乙個節點,最終請求話題資料流。ps 在ros中有兩個節點 乙個是發布者talker,另乙個是訂閱者listener,兩個節點分別發布 訂閱同乙個話題...
用ROS遇到的一些問題
原本是想用ros控制機械臂,後來突發奇想,想通過rand函式產生隨機數,來讓機械臂隨便動,於是寫了如下一小段 include 可以傳送軌跡的 include include ros time.h include ros publisher arm pub int main int argc,char...