RViz學(xué)習(xí)筆記(四) - 交互式marker:開始

這一節(jié)講什么是交互式marker,并且給出一些基本概念

1 介紹

互動marker跟前面的那種差不多,只是它允許用戶對它進(jìn)行位置和姿態(tài)的改變等。
他們被visualization_msgs/InteractiveMarker message來表示,包含了一個菜單和一些控件(visualization_msgs/InteractiveMarkerControl)??丶x了不同的視覺部分,由一些基本圖形組成并且具有特定的功能。

Interactive markers and control

如果你想創(chuàng)建一個具有互動功能marker的node,需要實例化一個InteractiveMarkerServer對象。它會連接到客戶端去,比如我們的rviz。

connect

2 進(jìn)一步的教程

這個暫時不介紹,感興趣的去官網(wǎng)看吧
傳送門

3 The interactive_marker_tutorials 包

最好的理解交互marker的方式就是試一下這個包。它包含了5個例子:simple_marker, basic_controls, menu, pong 和 cube.

3.1 怎么運(yùn)行這個教程

……運(yùn)行不起來

[ 83%] Linking CXX executable /home/qkingros/catkin_ws_me/devel/lib/using_markers/simple_marker
CMakeFiles/simple_marker.dir/src/simple_marker.cpp.o: In function `main':
simple_marker.cpp:(.text+0x3b0): undefined reference to `interactive_markers::InteractiveMarkerServer::InteractiveMarkerServer(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
simple_marker.cpp:(.text+0x5d2): undefined reference to `interactive_markers::InteractiveMarkerServer::insert(visualization_msgs::InteractiveMarker_<std::allocator<void> > const&, boost::function<void (boost::shared_ptr<visualization_msgs::InteractiveMarkerFeedback_<std::allocator<void> > const> const&)>, unsigned char)'
simple_marker.cpp:(.text+0x5f0): undefined reference to `interactive_markers::InteractiveMarkerServer::applyChanges()'
simple_marker.cpp:(.text+0x640): undefined reference to `interactive_markers::InteractiveMarkerServer::~InteractiveMarkerServer()'
simple_marker.cpp:(.text+0x6b4): undefined reference to `interactive_markers::InteractiveMarkerServer::~InteractiveMarkerServer()'
simple_marker.cpp:(.text+0x6eb): undefined reference to `interactive_markers::InteractiveMarkerServer::~InteractiveMarkerServer()'
simple_marker.cpp:(.text+0x780): undefined reference to `interactive_markers::InteractiveMarkerServer::~InteractiveMarkerServer()'
collect2: error: ld returned 1 exit status
using_markers/CMakeFiles/simple_marker.dir/build.make:113: recipe for target '/home/qkingros/catkin_ws_me/devel/lib/using_markers/simple_marker' failed
make[2]: *** [/home/qkingros/catkin_ws_me/devel/lib/using_markers/simple_marker] Error 1
CMakeFiles/Makefile2:1167: recipe for target 'using_markers/CMakeFiles/simple_marker.dir/all' failed
make[1]: *** [using_markers/CMakeFiles/simple_marker.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j2 -l2" failed

缺少一些定義,應(yīng)該是我不能只有一個cpp的代碼,具體怎么回事我也搞不清楚,以后弄清楚了再回來補(bǔ)充。
附github代碼,可以自己試試:傳送門

4 我回來了

我搞好這個東西了,往下看

5 下載源碼

打開 Documents目錄存一下源碼:
cd Documents
然后從GitHub上下載:

https://github.com/ros-visualization/visualization_tutorials.git

下載好之后,把教程用到的package拷貝到我們的工作空間里去,我的工作空間叫catkin_ws_me:

cp -r ~/Documents/visualization_tutorials/nteractive_marker_tutorials ~/catkin_ws_me/src

然后回到工作空間:

cd ~/catkin_ws_me
source ./devel/setup.bash

然后執(zhí)行進(jìn)行編譯:

catkin_make

完了之后安裝:

catkin_make install

如果有任何問題可以評論在下面,因為我是回憶著步驟寫的,可能有遺漏
然后新打開一個窗口,啟動basic_controls:
rosrun interactive_marker_tutorials basic_controls
再打開一個窗口,啟動rviz:
rosrun rviz rviz

  • 設(shè)置Fixed Frame為base_link
  • 添加InteractiveMarkers設(shè)置Update Topic為/basic_controls/update
    這樣就可以看到下面的畫面:
basic_controls

如果想打開別的,只需要改掉Update Topic/basic_controls/update就行了,改成對應(yīng)的名字,比如/pong/update

pong 終于贏了一分

每個案例都各有特色,之后再一個一個補(bǔ)充,我先跟著官網(wǎng)教程學(xué)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容