Ubuntu 系统下如何搭建 ROS 工程

创建 Catkin 工作空间

建立工作空间目录

1. 打开终端,创建工作空间(例如命名为 catkin_ws)及其源代码目录 src

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws

2. 初始化并构建工作空间:
~/catkin_ws 目录下执行

catkin_make

该命令会生成以下目录:

  • build/:保存编译过程中生成的中间文件和构建文件。
  • devel/:开发空间,存放编译后生成的可执行文件、库、配置脚本(如 setup.bash),用于设置 ROS 环境变量。

3. (可选)安装到指定目录:
如果需要将工程安装到系统指定目录,可执行

catkin_make install

这样会生成 install/ 目录,存放安装后的文件。

ROS 工程的目录结构及作用

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 脚本),需赋予可执行权限
 

  • package.xml 与 CMakeLists.txt:ROS 系统通过这两个文件来识别包、解析依赖以及完成编译链接工作。
  • src/:放置实际的源代码,实现功能的主要逻辑。
  • include/:主要放置头文件,方便其他源文件调用共享接口。
  • launch/:集中管理启动多个节点的配置,便于调试和部署整个系统。
  • msg/srv/action/:分别用于定义消息、服务和动作接口,以便不同节点之间实现自定义通信。
  • config/:保存程序运行时所需的参数配置文件。
  • scripts/:适合存放 Python 脚本或其它解释型语言的程序,通过 rosrun 命令启动时直接执行。

添加一个包和一个节点

创建 ROS 包

切换到工作空间的 src 目录:

cd ~/catkin_ws/src

使用 catkin_create_pkg 命令创建包(本例中命名为 my_package,依赖 rospystd_msgs

catkin_create_pkg my_package rospy std_msgs

该命令会在 my_package 下生成基本的包结构,包括 package.xmlCMakeLists.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 脚本,不需要额外编译,但最好编译以确保包的其他部分无误。

配置 ROS 环境

每次开启终端时需 source 工作空间的环境变量:

source ~/catkin_ws/devel/setup.bash

启动节点

方式一:使用 rosrun 启动节点

rosrun my_package hello_node.py

方式二:使用 launch 文件启动

my_package 下创建 launch 目录:

cd ~/catkin_ws/src/my_package
mkdir launch

launch 目录下创建文件 hello_launch.launch,内容如下:

<launch>
    <node pkg="my_package" type="hello_node.py" name="hello_node" output="screen"/>
</launch>

启动 launch 文件:

roslaunch my_package hello_launch.launch

总结

  • 工作空间搭建
    • 创建 catkin_ws 及其 src 目录,使用 catkin_make 初始化生成 build/devel/
  • ROS 包目录结构
    • package.xmlCMakeLists.txt 定义包信息和构建规则;src/ 存源代码;include/ 存头文件;launch/ 存放启动文件;msg/srv/action/ 分别定义自定义通信接口;config/ 存参数配置;scripts/ 存可执行脚本。
  • 添加包和节点
    • 使用 catkin_create_pkg my_package rospy std_msgs 创建包;
    • 在包中新增 scripts/hello_node.py 节点(示例为发布简单消息的 Python 节点),记得赋予可执行权限。
  • 编译与启动
    • 编译工作空间,source 环境变量,然后使用 rosrunroslaunch 启动节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值