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相關的一些庫進行鏈接。
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例外處理