iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 5
0
AI & Data

ROS新手挑戰AI&Data組系列 第 5

[ROS#4]程式開發

  • 分享至 

  • xImage
  •  

參考資料:
1. Win10如何访问Linux子系统文件
2. HollyQood_ROS#3 Hello World!!
3. 知乎_如何从零开始创建一个ROS节点?
4. 從Win10訪問Linux子系統文件
5. 大頭怪的異想空間_撰寫自己的節點
• ROS工作空間建立
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ..
catkin_make
把工作區在bash中註冊 source devel/setup.bash
要驗證是否已經在bash中註冊可以使用如下命令:
echo $ROS_PACKAGE_PATH
如果能看到自己工作區的文件路徑就說明已經成功了。

• 製作自己的package
cd ~/catkin_ws/src
catkin_create_pkg helloworld_1 std_msgs rospy roscpp
cd ..
catkin_make
. ~/catkin_ws/devel/setup.bash

• ROS 節點間通訊與程式實作-topic、service、parameter server、launch
在你的pkg下輸入: explorer.exe . 就可以叫出資料夾
在\wsl$\Ubuntu-16.04\home\你的名稱\你的工作區\src\你的pkg\src這裡,右鍵>新增>文字文件
a. helloworld.py

	#! /usr/bin/env python
	import rospy
	from std_msgs.msg import String
	if __name__ == '__main__':
		rospy.init_node('talker',anonymous=True)
		pub = rospy.Publisher('chat', String, queue_size=10)
		rate = rospy.Rate(10)
		while not rospy.is_shutdown():
			hello = 'hello world ! %s' % rospy.get_time()
			pub.publish(hello)
			rospy.loginfo(hello)
			rate.sleep()
            

b. helloworld_listener.py

	#! /usr/bin/env python
	import rospy
	from std_msgs.msg import String
	def callback(data):
	           rospy.loginfo(rospy.get_caller_id() + 'I heard %s' % data.data)
	if __name__ == '__main__':
		rospy.init_node('listener',anonymous=True)
		rospy.Subscriber('chat', String, callback)
		rospy.spin()

~/catkin_ws$ roscd helloworld_1
cd src
轉成可執行檔: Chmod +x helloworld.py
但我出現>> chmod: cannot access 'helloworld': No such file or directory
搞了一天才發現,隱藏的副檔名也要打出來:
Chmod +x helloworld.py.txt
Chmod +x helloworld_listener.py.txt

記得習慣回工作區來個compiler哈哈
cd ~/catkin_ws
catkin_make
然後 roscore
開新的終端 rosrun helloworld_1 helloworld.py.txt
再開一個新的終端 rosrun helloworld_1 helloworld_listener.py.txt
你可以再開一個終端來看圖示(記得開Xming唷) rqt_graph

• 程式開發起手式(ros::init、ros::NodeHandle…)
以C++撰寫Publisher與Subscriber
來自 https://medium.com/@raymonduchen/ros-%E6%87%B6%E4%BA%BA%E7%AD%86%E8%A8%98-3-%E4%BB%A5c-%E6%92%B0%E5%AF%ABpublisher%E8%88%87subscriber-f3495331b2b1
或ROS自學筆記Day 07

• Publisher vs Subscriber
https://ithelp.ithome.com.tw/upload/images/20190919/20120406sMBwbqknln.png
由以上例子知道,
helloworld這個node是一個Publisher
helloworld_listener這個node是一個Subscriber
中間藉由佈告欄Topic傳遞

之前聽kwea koi講解一個說法還不錯:
Publisher像是youtuber,Topic就像youtube,而Subscriber就是我
Publisher會上傳東西到Topic,而有訂閱的Node也就是Subscriber會收到東西


上一篇
[ROS#3]安裝
下一篇
[ROS#5]於Raspberry pi 3實作
系列文
ROS新手挑戰AI&Data組30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言