1. 打开终端,创建工作空间(例如命名为 catkin_ws)及其源代码目录 src:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
2. 初始化并构建工作空间:
在 ~/catkin_ws 目录下执行
catkin_make
该命令会生成以下目录:
setup.bash),用于设置 ROS 环境变量。3. (可选)安装到指定目录:
如果需要将工程安装到系统指定目录,可执行
catkin_make install
这样会生成 install/ 目录,存放安装后的文件。
在 catkin_ws/src 中,每个 ROS 包通常遵循如下目录结构
my_package/
├── package.xml # 包描述文件,记录包名称、版本、依赖、作者等信息
├── CMakeLists.txt # 编译构建规则,定义如何编译、链接、安装包内的代码
├── src/ # 存放源代码(例如 C++ 的 .cpp 文件或 Python 脚本)
├── include/ # 存放公共头文件(主要用于 C++),便于模块间共享接口
├── launch/ # 存放 ROS 启动文件(.launch),用于配置和启动多个节点
├── msg/ # 自定义消息定义文件(.msg),用于节点间数据通信
├── srv/ # 自定义服务定义文件(.srv),用于同步请求-响应交互
├── action/ # 自定义动作定义文件(.action),用于长时间任务并提供反馈
├── config/ # 存放配置文件(如 YAML 格式),在节点启动时加载参数
└── scripts/ # 存放可执行脚本(如 Python 脚本),需赋予可执行权限
rosrun 命令启动时直接执行。切换到工作空间的 src 目录:
cd ~/catkin_ws/src
使用 catkin_create_pkg 命令创建包(本例中命名为 my_package,依赖 rospy 和 std_msgs)
catkin_create_pkg my_package rospy std_msgs
该命令会在 my_package 下生成基本的包结构,包括 package.xml 和 CMakeLists.txt。
你可以根据需要在包内手动添加目录(如 scripts/、launch/ 等)
以 Python 节点为例:
在 my_package 下创建 scripts 目录:
cd ~/catkin_ws/src/my_package
mkdir scripts
在 scripts 目录中创建一个名为 hello_node.py 的文件,并写入如下代码:
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def talker():
# 初始化节点,节点名为 'hello_node'
rospy.init_node('hello_node', anonymous=True)
# 创建一个发布者,向主题 'chatter' 发布 String 类型消息
pub = rospy.Publisher('chatter', String, queue_size=10)
rate = rospy.Rate(1) # 1Hz 发布频率
while not rospy.is_shutdown():
hello_str = "Hello ROS at %s" % rospy.get_time()
rospy.loginfo(hello_str)
pub.publish(hello_str)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
保存后,为该脚本赋予可执行权限:
chmod +x scripts/hello_node.py
返回工作空间根目录:
cd ~/catkin_ws
编译
catkin_make
如果包中新增了 Python 脚本,不需要额外编译,但最好编译以确保包的其他部分无误。
每次开启终端时需 source 工作空间的环境变量:
source ~/catkin_ws/devel/setup.bash
rosrun my_package hello_node.py
在 my_package 下创建 launch 目录:
cd ~/catkin_ws/src/my_package
mkdir launch
在 launch 目录下创建文件 hello_launch.launch,内容如下:
启动 launch 文件:
roslaunch my_package hello_launch.launch
catkin_ws 及其 src 目录,使用 catkin_make 初始化生成 build/ 与 devel/。package.xml 与 CMakeLists.txt 定义包信息和构建规则;src/ 存源代码;include/ 存头文件;launch/ 存放启动文件;msg/、srv/、action/ 分别定义自定义通信接口;config/ 存参数配置;scripts/ 存可执行脚本。catkin_create_pkg my_package rospy std_msgs 创建包;scripts/hello_node.py 节点(示例为发布简单消息的 Python 节点),记得赋予可执行权限。rosrun 或 roslaunch 启动节点。