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加入脚本,具体我就细说了,太麻烦了。
有简单的,我就不喜欢烦的东西。