在使用ROS的过程中,不可避免地会使用到catkin构建工作区,这是任何项目的前提。我曾经接触过CMake,但并不深入,因此还是花了一些时间的。
首先,我们创建一个文件夹并打开(我的文件夹叫做learn):
mkdir -p ~learn/src
cd ~/learn/src
然后,我们初始化这个工作区:
catkin_init_workplace
这个命令将会帮助你在src下建立CMakeList.txt文件,但这还不够,我们需要:
cd ~/learn
catkin_make
这一步完成后,我们会得到build和devel两个文件夹,对于使用python的我而言,build文件夹下的文件是没有用的,而devel文件夹中的setup文件是非常重要的,因为他的运行是使用工作区文件和代码的基础,我们需要进行配置:
source devel/setup.bash
至此,工作区的建立就完成了。但是,因为ROS是一个由多个子系统协同运行的系统,如果每个子系统我们都用命令行打开再运行显然是非常麻烦的,好在catkin为我们提供了非常方便的工具,也就是包的构建工具。
cd ~/learn/src
catkin_create_pkg basics rospy
这样一个简单的包就完成了,在最后加上rospy是为了产生和rospy包的依赖,如果需要对其他包依赖直接列出即可,就会非常方便。
然后我就想试着在这个工作环境下创建一个话题,一个非常简单的计数器文件:
import rospy
from std_msgs.msg import Int32
rospy.init_node('topic_publisher')
pub=rospy.Publisher('counter',Int32)
rate=rospy.Rate(2)
count=0
while not rospy.is_shutdown():
pub.publish(count)
count+=1
rate.sleep()
保存为a.py,然后在命令行中用
rosrun basics a.py
进行运行,但问题来了:
我又试着用python直接运行,发现没问题。
这其实是写python习惯差的结果,因为在开头没有对解释器进行声明,也就是没有写shebang,加上shebang:
#!/usr/bin/env python
并且用chmod为文件增加权限就可以了。
再运行,可是发现:
但仔细观察发现,在我的shebang最后多了一个r,这是为什么呢?百度以后发现是因为我是采用了文本编辑器进行代码书写,而这样的文件格式是dos格式,与标准的unix不同。我们只需要:
vim a.py
按ESC
:set ff=unix
回车
:wq
回车
就可以了。这时候再运行,就会发现计数器已经跑起来了。