Topic with ROS custom messages
အရင္ posts ေတြျဖစ္ၾကတဲ့ ROS.4 နဲ႕ ROS.5 မွာတုန္းက publisher၊ subscriber၊ topic၊ service နဲ႕ actinlib တုိ႕အၾကာင္းကို example ေလးနဲ႕ တကြရွင္းျပခဲ့ျပီး ျဖစ္ပါတယ္။ ဒီေခါင္းစဥ္မွာေတာ့ topic ကိုပဲ ကိုယ္ပိုင္ဖန္တီးထားတဲ့ custom message အသံုးျပဳျပီး integer နွစ္ခုကို ေပါင္းေပးတဲ့ program ေတြကို ေရးၾကည့္ပါမယ္။ ကိုယ္ပိုင္ message ေတြကို ဖန္တီးဖို႕ရာအတြက္ beginner_tutorials folder ထဲမွာ msg ဆိုတဲ့ folder တစ္ခုတည္ေဆာက္လုိက္ပါမယ္။ ဒါျပီးရင္ေတာ့ ၄င္း folder ထဲမွာဘဲ Sum.msg ဆိုတဲ့ ဖိုင္ေလးတစ္ခုထပ္မံတည္ေဆာက္ဖို႕လိုအပ္ပါတယ္။ ကြၽန္ေတာ္တို႕ ကိုယ္ပိုင္ဖန္တီးမယ့္ msg ေတြကိုေတာ့ Sum.msg ထဲမွာ ဒီလိုေလးေရးလိုက္ပါမယ္။
int32 num1
int32 num2
int32 result
int32 data type နဲ႕ num1၊ num2၊ result ဆိုျပီး ေရးသားလိုက္ပါတယ္။ ဒီလိုေရးသားျပီးတာနဲ႕ message ေတြအျဖစ္သံုးလို႕ရဖို႕အတြက္ package.xml၊ CmakeLists.txt ဖိုင္ေတြကို ေအာက္ပါအတိုင္း တဆင့္ခ်င္းျပင္ဖို႕ လိုအပ္ပါေသးတယ္။ package.xml မွာေတာ့ ေအာက္ပါစာသားေတြ ထပ္ျပီးျဖည့္စြတ္လိုက္ပါမယ္။
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
CmakeLists.txt ထဲမွာေတာ့ ေအာက္ပါအတုိင္း ျပင္ပါမယ္။
# Do not just add this to your CMakeLists.txt, modify the existing text to add message_generation before the closing parenthesis
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
)
ဒါကို. message_generation ဆိုတဲ့ စာသားထပ္ျဖည့္ေပးဖုိ႕လိုပါတယ္။
# Do not just add this to your CMakeLists.txt, modify the existing text to add message_generation before the closing parenthesis
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
ျပီးရင္ Sum.msg ဖိုင္နာမည္ကို ေအာက္ပါစာသားေနရာမွာ ရွာထည့္ေပးဖို႕ လိုပါတယ္။
# add_message_files(
# FILES
# Message1.msg
# Message2.msg
# )
comments ေတြဖ်က္ျပီး Sum.msg ကိုေအာက္ပါအတိုင္း ျဖည့္စြတ္လိုက္ပါတယ္.
add_message_files(
FILES
Sum.msg
)
ေအာက္ပါစာသားကို လိုက္ရွာျပီး comments ေတြ ဖ်က္လိုက္ဖို႕လိုအပ္ပါတယ္။
catkin_package(
...
CATKIN_DEPENDS message_runtime ...
...)
# generate_messages(
# DEPENDENCIES
# std_msgs
# )
ဒါေတြအားလံုးျပီးရင္ေတာ့ catkin_ws ကိုျပန္သြားျပီး compile ျပန္လုပ္ေပးပါ။ မွန္မမွန္ကိုေတာ့ ေအာက္ပါအတိုင္းၾကည့္နိုင္ပါတယ္.
rosmsg show beginner_tutorials/Sum
မွန္ရင္ေတာ့ ကြၽန္ေတာ္တို႕ ဖန္တီးခဲ့တဲ့ message ေတြကိုျပပါလိမ့္မယ္။ ျပီးတာနဲ႕ talker.py နဲ႕ listener.py ကို ေအာက္ပါ code ေတြအတုိင္း ျပန္ျပင္ျပီး run ၾကည့္နိုင္ပါတယ္။
talker.py
#!/usr/bin/env python
import rospy
from beginner_tutorials.msg import Sum
import random
rospy.init_node("talker")
pub = rospy.Publisher("sum",Sum,queue_size=1)
rate = rospy.Rate(1)
sum_int = Sum()
while not rospy.is_shutdown():
sum_int.num1 = random.randint(0,10)
sum_int.num2 = random.randint(0,10)
pub.publish(sum_int)
rate.sleep()
listener.py
#!/usr/bin/env python
import rospy
from beginner_tutorials.msg import Sum
def callback(msg):
msg.result = msg.num1 + msg.num2
rospy.loginfo(msg)
rospy.init_node("listener")
sub = rospy.Subscriber("sum",Sum,callback)
rospy.spin()
ေအာက္ပါ youtube လင့္မွာလည္းပဲ သြားျပီးေလ့လာနိုင္ပါတယ္။