iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 5
0
Software Development

ROS進階學習筆記系列 第 5

Day 05 - Publish Topic 要做Header好麻煩?

  • 分享至 

  • xImage
  •  

昨天講完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

  • seq: 表示此msg發送的序列,通常不用填入,master會自動幫你數字進去++
  • stamp: 表示time stamp的物件,其内另外包含兩個屬性sec和nesc
  • frame_id: 通常是用在Rviz中,為了顯示使用而標註此msg隸屬於哪個frame之下

這個header格式因為很廣泛運用,筆者卻常常在撰寫的時候感到苦手,每每寫到time stamp的時候都要去查到底怎麼塞值進去,真的很麻煩,所以決定記錄在這邊:

python版

time stamp 其實就是ros::time的物件,因此找到ros內對應的api就可以囉~~ 只是通常都要爬很久,所以筆者寫在這~~

rospy.get_rostime()

C++版

C++也是一樣,只是python是呼叫rospy內的API,c++就是呼叫roscpp內的囉XD

ros::Time::now()

同場加映: cmd input 一鍵publish

有時候我們只是想測試一下自己寫的subscriber對不對,而不需要自己去寫一隻publisher,這時候下cmd就很方便呦!
在cmd下指令測試的時候,可以使用tab大法,在輸入完msg type以後按下tab會自動把後面要塞的msg格式填好:

$ rostopic pub /topic_name [msg_type] [tab]

執行起來會長這樣:
https://ithelp.ithome.com.tw/upload/images/20200919/201123481KpPnjdjrk.png
https://ithelp.ithome.com.tw/upload/images/20200919/20112348a5X1DmduSm.png
但是這樣一來,header那邊的time stamp會是空值,所以可以在header那邊下auto,就可以自動填入時間啦!
https://ithelp.ithome.com.tw/upload/images/20200919/201123486G9hAdY3Vc.png
https://ithelp.ithome.com.tw/upload/images/20200919/20112348lcFQwf6tbr.png

Reference

http://wiki.ros.org/rosmsg
http://wiki.ros.org/rospy/Overview/Time
http://wiki.ros.org/roscpp/Overview/Time


上一篇
Day 04 - Callback Function Arguments加在哪?
下一篇
Day 06 - 好用的腳本 roslaunch
系列文
ROS進階學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言