11.1写一个发布器节点
“节点”是ROS网络中的可执行文件,现在我们创建一个不断广播一条信息的发布器(命名为talker)的节点
首先进入之前创建的beginner_tutorials程序包
roscd beginner_tutorials
创建一个python脚本文件目录
mkdir scripts
进入刚创建的目录
cd scripts
下载发布器例子脚本(talker.py)
wget https://raw.github.com/ros/ros_tutorials/kinetic-devel/rospy_tutorials/001_talker_listener/talker.py
wget是一个从网络上自动下载文件的自由工具。
使下载的文件可执行
chmod +x talker.py
chmod是用于修改linux系统下文件或目录的访问权限。
+表示增加,-表示减少
x表示可执行权限
talker.py的文件大致如下
~~
11.1.1代码解析
第1行是python惯用宣言,用于确保该文件作为python脚本执行。(必须有,尤其在linux中)
第39行,引入 rospy模块(听说使用rospy不需要catkin_make就可以运行,官方解释是你写节点就需要import rospy)
第40行,从std_msgs.msg模块中引入String类(这个引入就是为了使用到字符串消息类型)
第43行,调用了rospy类中的publisher方法,括号中分别是话题(chatter),消息类型(String),消息大小(queue_size)
第44行,是初始化节点,官方解释是给节点赋予了名字(名字不能包含/),没有这步,它无法和ROS管理器通信。anonimous翻译是匿名。
第45行,定义了rospy每秒发布10次的频率。
第46行,是个循环,如果rospy.is_shutdown没有被关闭则进行循环中的内容(被关闭的情况比如Ctrl+c等)
第47行,赋值给hello_str这个变量
第48行,这个loginfo(str)有3个作用,第一,打印消息,第二,被写入节点日志文件中,第三,被写入rosout中(这样就可以通过rqt_console查看)。
第49行,发布消息hello_str
50行,sleep函数,等待到下一次发布时间。(10HZ,也就是等1/10秒)
因为string是一个简单的消息类型,你会想知道它是怎么发布复杂的数据类型。其实容器参数的排序是根据msg中的排序一样。你也可以直接不输入参数并直接初始化该域(暂时不知道这个域指的是啥,感觉就是创建实例的意思。)。
例子是这样的(感觉就是string是一个class,然后创建了个实例赋值给了msg,然后对实例中的变量进行赋值这样)
msg=String()
msg.data = str
或者你可以初始化部分域和让剩下的使用默认值
String(data =str)