ros2的通訊采用的是FastDDS飞苇,因此理論上fastDDS可以與ros2通訊远豺。經(jīng)過(guò)測(cè)試完成了通訊工程的編寫(xiě)歌焦。
具體實(shí)現(xiàn)如下肩祥。
- 測(cè)試了同一局域網(wǎng)中fastdds和ros2的節(jié)點(diǎn)互相識(shí)別后室,用任意的idl文件,通過(guò)
fastddsgen -example CMake -typeros2 teststring.idl
生成c++源碼混狠,注意有一個(gè)生成參數(shù)-typeros2岸霹,是告訴fastddsgen這次的源碼要面對(duì)ros2通訊。
- 然后cmake之后生成sln工程将饺,打開(kāi)工程贡避,修改topic痛黎,因?yàn)槿粝胱宺os2識(shí)別到topic需要在topic名前加"rt/"。具體位置在publisher.cxx文件的publisher::init()函數(shù)中刮吧。
- 編譯生成程序湖饱,然后運(yùn)行publisher。
- 在ros2中查看活動(dòng)的topic
ros2 topic list
這時(shí)可以看到剛剛的publisher的topic杀捻。
- 無(wú)法識(shí)別數(shù)據(jù)內(nèi)容
此時(shí)用ros2 topic echo /<topicname>井厌,發(fā)現(xiàn)無(wú)法讀取message內(nèi)容。其實(shí)是因?yàn)閞os2的內(nèi)嵌數(shù)據(jù)結(jié)構(gòu)中沒(méi)有對(duì)應(yīng)的數(shù)據(jù)致讥,所以無(wú)法解析數(shù)據(jù)仅仆。 - 統(tǒng)一數(shù)據(jù)格式
直接查看ros2內(nèi)的現(xiàn)有數(shù)據(jù)結(jié)構(gòu),查看std_msgs包的存儲(chǔ)位置垢袱,在opt/ros/<ros2版本名例如"foxy">/share/std_msgs/msg蝇恶,文件夾中有各類(lèi)數(shù)據(jù)的.msg文件和.idl文件。把某數(shù)據(jù)類(lèi)型的idl文件復(fù)制到fastdds節(jié)點(diǎn)的電腦上惶桐,重復(fù)上述1撮弧、2步,然后給數(shù)據(jù)格式賦值姚糊,例如string.idl的工程下贿衍,在publisher.cxx文件下的publisher::run()函數(shù)下,添加兩行代碼如下救恨,
std_msgs::msg::String st;
std::string str("SUCCEED!"); //新加
st.data(str); //新加
/* Initialize your structure here */
進(jìn)行上述的3-5步驟贸辈,ros2中讀到“SUCCEED!”,通訊成功肠槽。