在ROS中使用nodelet

2021-10-01 19:48:25 字數 2474 閱讀 2952

nodelet的作用:減少在ros中傳遞資料的延遲。在同乙個程序內,執行多個node,通過指標傳遞資料,使得程序內訊息傳遞時不產生複製成本。

下面是乙個使用nodelet原始檔的例子:

namespace nodelet_tutorial_math

private

:virtual

void

oninit()

void

callback

(const std_msgs::float64::constptr& input)

ros::publisher pub;

ros::subscriber sub;

double value_;};

pluginlib_export_class

(nodelet_tutorial_math::plus, nodelet::nodelet)

}

自定義nodelet::nodelet的子類,並實現void oninit()函式取代main函式。最後為了允許類被動態載入,使用巨集pluginlib_export_class(nodelet_tutorial_math::plus, nodelet::nodelet)將該類標記為匯出類。

與普通的package相比,使用nodelet還需要新增乙個外掛程式描述檔案:

"lib/libnodelet_math"

>

<

class

name

="nodelet_tutorial_math/plus" type=

"nodelet_tutorial_math::plus" base_class_type=

"nodelet::nodelet"

>

a node to add a value and republish.

<

/description>

<

/class

>

<

/library>

因為使用nodelet生成的不是可執行檔案,所以在cmakelists.txt檔案中不需要add_executable()

cmake_minimum_required

(version 2.8.3)

project

(nodelet_tutorial_math)

find_package

(catkin required components nodelet roscpp std_msgs)

## setup include directories

include_directories($)

catkin_package

( libraries nodelet_math

catkin_depends nodelet roscpp std_msgs

)## create the nodelet tutorial library

add_library

(nodelet_math src/plus.cpp)

target_link_libraries

(nodelet_math $

)

如果是通過roslaunch啟動,則launc**件的示例如下:

"nodelet" type=

"nodelet" name=

"manager1" args=

"manager" output=

"screen"

/>

"nodelet" type=

"nodelet" name=

"plus" args=

"load nodelet_tutorial_math/plus manager1" output=

"screen"

>

<

/node>

"nodelet" type=

"nodelet" name=

"plus2" args=

"load nodelet_tutorial_math/plus manager1" output=

"screen"

>

<

/node>

"nodelet" type=

"nodelet" name=

"plus3" args=

"standalone nodelet_tutorial_math/plus" output=

"screen"

>

<

/node>

<

/launch>

其中,plus和plus2節點均與manager1相關連,而plus3則為普通node。

在ROS中使用Python3

執行測試平台 小強ros機械人 當前ros是只支援python2.7的。python3的支援在ros的計畫中,詳細的可以看這裡。簡單說來就是要到2019年ros的n版本才能完全支援python3。首先要了解為什麼ros不能支援python3.對於純的python 同時支援python3和python...

在ROS中使用UDP進行通訊

原鏈結 ros的網路通訊提供了兩種方式,一種是tcp協議,一種是udp協議。預設採用tcp進行通訊。但是在實際的wifi網路使用中發現使用者經常反饋客戶端和機械人連線中斷且無法重新建立連線。在ros wiki中官方也有說明,rostcp更適合有線網連線的網路,而rosudp更適合wifi等網路不可靠...

在ROS中使用語音識別和語音合成

執行測試平台 小強ros機械人 語音識別是乙個很常見的技術,ros中也有一些語音識別的功能包,但是效果都不太好。沒有實時識別的功能。對於科大迅飛ros的支援也很不好。為了解決這些問題於是就有了下面的軟體包 xiaoqiang tts。cd 到你的工作空間的src資料夾中 git clone git ...