這裡,假設我們的包名叫做test_py.
我們寫自己的msg檔案在該包的msg資料夾下。
test.msg
float32 data
然後,我們編寫自己的talker.py檔案如下:
#!/usr/bin/env python
import rospy
#from後邊是自己的包.msg,也就是自己包的msg資料夾下,test是我的msg檔名test.msg
from test_py.msg import test
def talker():
pub = rospy.publisher('chatter', test, queue_size=10)
rospy.init_node('talker', anonymous=true)
rate = rospy.rate(10) # 10hz
while not rospy.is_shutdown():
#temp為到時候要用於傳輸的資訊
temp = [1, 2]
#這裡test就像建構函式般使用,若有多個msg,那麼寫成test(a,b,c,d...)
rospy.loginfo(test(temp))
pub.publish(test(temp))
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.rosinterruptexception:
pass
listener.py**如下:
#!/usr/bin/env python
import rospy
from test_py.msg import test
def callback(data):
#傳過來的所有msg為data,其中data.後邊的變數看msg檔案寫,比如我的是float32 data,那麼我就是data.data
rospy.loginfo(data.data)
def listener():
rospy.init_node('listener', anonymous=true)
rospy.subscriber('chatter', test, callback)
rospy.spin()
if __name__ == '__main__':
listener()
這還沒玩,還要把檔案變成可執行檔案:
$ chmod +x talker.py最後再貼上我的package檔案和cmakelists.txt檔案$ chmod +x listener.py
package.xml檔案如下:
test_py
0.0.0
the test_py package
smile
todo
catkin
rospy
std_msgs
message_generation
rospy
std_msgs
message_runtime
注意:這裡的
如果是原來的`
那麼catkin_make的時候,下邊的
會報錯。
我的cmakelist.txt檔案如下:
cmake_minimum_required(version 2.8.3)
project(test_py)
find_package(catkin required components
rospy
std_msgs
message_generation
)add_message_files(
files
test.msg
)generate_messages(
dependencies
test_py
)#對於c++結點的cmakelists.txt檔案,include_dirs include和libraries test_py不能注釋,
#但是對於python,這兩行不注釋,catkin_make通不過
catkin_package(
#include_dirs include
#libraries test_py
catkin_depends rospy message_runtime
depends system_lib
)include_directories(
$)
探索了好久才發現的這些,如果對您有幫助的話,能不能給個贊哇~~~
謝謝老闆!!!
ros 編寫 helloworld 程式
ros 編寫 helloworld 程式 參考 1,先建立工作空間 catkin ws 參考 a,ros工作環境檢查 export grep ros b,將ros的配置文件加入到teminal啟動指令碼裡 source opt ros melodic setup.bash c,建立工程空間 mkdi...
ros 建立自己的msg
在使用ros訂閱話題訊息的時候,有些時候為了能夠進行資料型別的轉換或者想實現訊息的傳輸問題時,需要用到自己定義的.msg訊息型別。建立乙個msg檔案,再建立乙個.msg檔案 mkdir msg vi test.msg如下定義 float32 data uint16 size header heade...
編寫自己的TRACE
在編寫mfc程式時我們經常用trace輸出除錯資訊幫助除錯,但使用trace的前提條件必須是定義了 debug並且使用debug庫才行。有時候在寫某些外掛程式的時候,由於廠商只提供release版本的介面,於是只能把自己的工程中去掉 debug並還用非debug庫,雖然還屬於debug版,但 tra...