ros腳本學習
A. 如何編寫ros的python程序
ROS Indigobeginner_Tutorials-10編寫ROS話題版的Hello World程序(Python版)
我使用的虛擬機軟體:VMware Workstation 11
使用的Ubuntu系統:Ubuntu 14.04.4 LTS
ROS版本:ROS Indigo
1. 前言 :
Hello world程序,在我們編程界,代表學習某種語言編寫的第一個程序。對於ROS機器人操作系統來說,這個Hello World程序就是 : 寫一個簡單的消息發布器(發送) 和 訂閱器(接收)。
2. 准備工作 :
C++的程序都會存放在每個程序包的src文件夾里。Python不同,Python程序都存放在scripts文件夾中, 反正意思都是源文件包。
Step 1 .所以,先在beginner_tutorials軟體包中創建一個scripts文件夾:
$ roscd beginner_tutorials$ mkdir scripts$ cd scripts123
3. 編寫消息發布器節點程序:
如果你懶得去寫的話,你可以使用wget命令, 在github上獲取一個talker.py源代碼。如何獲取呢 ?
Step 2 .開一個終端,輸入下面的命令就可以獲取talker.py:
$ wget
-devel/rospy_tutorials/001_talker_listener/talker.py$ ls
talker.py123
但是我建議你親自動手,寫一寫:手動創建一個talker.py文件在/scripys文件夾里:
$ roscd beginner_tutorials/scripts$ gedit talker.py12
將這上面鏈接里的代碼手動輸入到talker.py文件中。(我就不將代碼貼上來了)
下面我來講解一下代碼:
這些足以說明,hello_world_topic.launch啟動腳本文件,啟動成功。
總結:發布器和訂閱器是很簡單的, 就是簡單的發布一個 自定義的話題。
我之前使用說過:節點之間通訊的方式有兩種 : 話題(rostopic) 和 服務(rosservice)
所以,接下來,我們會講:使用ROS服務來完成ROS版Hello World程序的例子。但是在這之前,我們需要學一學:如何創建自定義的ROS消息和ROS服務,以便ROS服務版的Hello World程序的編寫。
所以下一講,我們來學習:如何創建自定義的ROS消息和ROS服務。
B. ros腳本命令中get命令和find命令的具體格式和用法是什麼
在網上的很多資料中對find命令的解釋是查找字元串或數組中第一個出現查找內容的位置.
如::put[:find abcdcba cd] 屏幕返回:2 這個不難理解但下面find的用法本人實在理解不來,命令如下::put [/interface :find name=pppoe-out]
C. ROS 開機自動運行腳本。如何實現
/system scheler add start-time=startup name=start on-event=腳本名字/system script job remove
D. ros腳本怎麼用
進入winbox
在菜單中選system-script-
跳出一對話框,script list
點+
在跳出的對話框中的source,即較大的空白處
將ros腳本粘貼進去,腳本名字可以任意,其它選項可以保持不動。
如自動綁定arp,就是讓ip為靜態的的腳本
:foreach i in [/ip arp find dynamic yes ] do={/ip arp add -from $i}
就是將一行粘貼後,點OK
然後,在script list對話框中,選擇建好的腳本,點run script 按鈕即可。
其它的就不展開講了
E. 想做個Ros5.25的動態限速腳本,請高手幫助!
如果自己玩可以用ROS,學校不建議用ROS,省錢不討好的事,
推薦一款集客網關有免費版,中文的可以滿足你的要求
ros手動限速
winbox---queues----simple queues
點「+」,NAME里隨便填,下面是IP地址的確定
①Target Address 不管,Dst. Address里填 你要限制的內網機器的IP,比如我這里有個 1號機器 IP為 192.168.1.101,那dst.address 里就填 192.168.1.101 然後是/32(這里的32不是指掩碼了,個人理解為指定的意思)!
②interface里 記著要選你連接外網那個卡,我這里分了「local和public」,所以選public
③ 其他的不管,我們來看最重要的東西拉,Max limit ,這個東西是你限制的上限,注意的是 這里的數值是比特位,比如我要限制 下載的速度為 500K 那麼就填入多少呢? 500 X 1000 X 8=400 0000=4M。
④ 另外,很多朋友都有個疑問,到底一般的用戶會有多大流量呢?一般的網路游戲,如 夢幻西遊 傳奇 封神榜 等等,其下行在 20Kbps以內! 最耗網路資源的就是下載-----我們就是為了限制它拉,其次是VOD點播,一般DVD格式的大約要 2M多吧,所以你看情況限制拉 別搞的太絕!!!
限速腳本:
:for aaa from 2 to 254 do={/queue simple add name=(queue . $aaa) dst-address=(192.168.0. . $aaa) limit-at=0/0 max-limit=2000000/2000000} 說明:
aaa是變數
2 to 254是2~254
192.168.0. . $aaa是IP
上兩句加起來是192.168.0.2~192.168.0.254
connection-limit=50是線程數這里為50
max-limit=2000000/2000000是上行/下行
使用:
WinBox-System-Scripts-+
Name(腳本名程)
Source(腳本)
OK-選擇要運行的腳本-Run Script
ROS限速的極致應用
一般我們用ros限速只是使用了max-limit,其實ros限速可以更好的運用。比如我們希望客戶打開網頁時速度可以快一些,下載時速度可以慢一些。ros2.9就可以實現。
max-limit------我們最常用的地方,最大速度
burst-limit--------突破速度的最大值
burst-thershold--------突破速度的閥值
burst-time-------突破速度的時間值
解釋一下圖片的限制意義
當客戶機在30秒(burst-time)內的平均值小於突破速度閥值(burst-thershold)180K時,客戶機的最大下載速率可以超過最大限速值(max-limit)200K,達到突破最大值(burst-limit)400K,如果30秒內平均值大於180K,那客戶機的最大速度只能達到200K。
這樣也就是當我們開網頁時可以得到一個更大的速度400K,長時間下載時速度只能得到200K,使我們的帶寬可以更有效的利用
動態限速
ROS動態限速(檢測外網總速度進行限速開關)廢話不說先看腳本原理:
以下操作全部在WINBOX界面里完成
介紹:可以實現在總速度不超過9M的情況下自動關閉所有生成的限速規則在總速度超過18M的時候自動啟動所有生成的限速規則。
說明:在輸入腳本內容時不要把兩邊的()帶上,那個是為了區分非腳本字元。
總速度=你的外網網卡當前速度。
打開 /system/scripts
腳本:
:for aaa from 1 to 254 do={/queue simple add name=(ip_ . $aaa) dst-address=(192.168.0. . $aaa) interface=wan max-limit=256000/800000 burst-limit=1000000/3000000 burst-threshold=128000/512000 burst-time=30s/1m }
上面是生成限速樹,對網段內所有IP的限速列表!
下面進入正題:
腳本名:node_on
腳本內容:(:for aaa from 1 to 254 do={/queue sim en [find name=(ip_ . $aaa)]})
腳本名:node_off
腳本內容:(:for aaa from 1 to 254 do={/queue sim dis [find name=(ip_ . $aaa)]})
scripts(腳本部分)以完成
打開 /tools/traffic monitor
新建:
名:node_18M traffic=received trigger=above on event=node_on threshold:18000000
新建:
名:node_9M traffic=received trigger=below on event=node_off threshold:9000000
在輸入腳本內容時不要把兩邊的()帶上,那個是為了區分非腳本字元。
F. ros 任務計劃腳本
不用任務計劃腳本的,只需要
在firewall設幾條規則就可以了。
在filter rules中,增加
general中,chain選擇forward,其實,就這值是默認值。在src. address中,寫入你要控制的IP,如
192.168.0.9-192.168.0.251,注意都要半形的,中間可以使用一個減號表示一段。
重點是extra中,有一項是time,展開後,可以選擇時間,還可以選擇周一至周日。
action中,你根據你寫入的時間選擇accept或就drop。
如前面增加了accept,再增加一條drop就可以了。
其實,在winbox中操作很簡單的,用文字描述還真麻煩啊。
注意:你的ROS的時間要准確,在system---clock中調整你的時間。
網路中有校對你ROS時間的設置教程的。
在clock中,time zone,即時區,我們選擇+08:00。
不知你使用的ros的版本是什麼,我記得老一點的ROS時區是要寫0的,不然時間執行上有問題的,是ros中的一個bug。這個你可以試試就可以了。反正,這里加了8,你就按標准時間來,不加8,你就在extra中的time中計算入就可以了。新一些的版本沒有。
另外,你一定要使用計劃腳本,在system ---scheler加入腳本,具體我就細說了,太麻煩了。
有簡單的,我就不喜歡煩的東西。