昨天講完subscriber的坑,今天就來講publisher的吧XD
在寫特定message時我們常常會使用有加time stamped的版本,例如sensor_msgs/CameraInfo的格式:
$ rosmsg show sensor_msgs/CameraInfo
Header header
uint32 seq
time stamp
string frame_id
uint32 height
uint32 width
RegionOfInterest roi
uint32 x_offset
uint32 y_offset
uint32 height
uint32 width
float64[5] D
float64[9] K
float64[9] R
float64[12] P
裡面的Header格式就是ros msg常常會用到的部分,這個header格式包含三個屬性,分別是seq, stamp, 和frame_id
這個header格式因為很廣泛運用,筆者卻常常在撰寫的時候感到苦手,每每寫到time stamp的時候都要去查到底怎麼塞值進去,真的很麻煩,所以決定記錄在這邊:
time stamp 其實就是ros::time的物件,因此找到ros內對應的api就可以囉~~ 只是通常都要爬很久,所以筆者寫在這~~
rospy.get_rostime()
C++也是一樣,只是python是呼叫rospy內的API,c++就是呼叫roscpp內的囉XD
ros::Time::now()
有時候我們只是想測試一下自己寫的subscriber對不對,而不需要自己去寫一隻publisher,這時候下cmd就很方便呦!
在cmd下指令測試的時候,可以使用tab大法,在輸入完msg type以後按下tab會自動把後面要塞的msg格式填好:
$ rostopic pub /topic_name [msg_type] [tab]
執行起來會長這樣:
但是這樣一來,header那邊的time stamp會是空值,所以可以在header那邊下auto,就可以自動填入時間啦!
http://wiki.ros.org/rosmsg
http://wiki.ros.org/rospy/Overview/Time
http://wiki.ros.org/roscpp/Overview/Time