10.發佈者publisher的程式設計實現

2020-08-08 20:41:40

C++版本

1.ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle_vel_pub",10);

advertise( ) 返回一個 Publisher 物件。 通過呼叫物件的 publish( )函數, 你可以在這個topic上發佈 message。猜測Publisher 物件應該是從屬於節點的。

10是佇列長度,當publisher發佈頻率太快,底層乙太網不能迅速響應,所以先將數據放在佇列中,相當於一個快取。如果仍然發不出去,最先進隊的數據會被拋掉,就會出現掉數據的情況。

2.ROS_INFO("Publish turtle velocity command[%0.2f m/s, %0.2f rad/s]", vel_msg.linear.x, vel_msg.angular.z);

ROS_INFO類似於C語言中的printf函數,輸出日誌資訊。

3.loop_rate.sleep();

按照回圈頻率延時,實現每秒發佈訊息的頻率。

4.CMakelists檔案的修改

add_executable(velocity_publisher src/velocity_publisher.cpp)

將src中的velocity_publisher.cpp編譯成可執行檔案velocity_publisher。

target_link_libraries(velocity_publisher ${catkin_LIBRARIES})

將可執行檔案和ros相關的一些庫進行鏈接。

python版本

1.#!/usr/bin/env python

指定執行指令碼的直譯器
直譯器

2.import rospy from geometry_msgs.msg import Twist

使用 import 語句來引入模組
python模組

3.if __name__ == '__main__':

__name__ 是當前模組名,當模組被直接執行時模組名爲 __main__ 。這句話的意思就是,當模組被直接執行時,以下程式碼塊將被執行,當模組是被匯入時,程式碼塊不被執行。(if name == ‘main’ 如何正確理解? - 曠修的回答 - 知乎https://www.zhihu.com/question/49136398/answer/114438004)
更詳細的解釋

4.try/except語句

python使用try/except語句處理異常。
python例外處理