记录 ROS1 创建工作空间和创建功能包的基本操作

本文详细介绍了ROS(RobotOperatingSystem)的使用,包括创建工作空间、编译、设置环境变量、创建和操作ROS功能包,以及ROS内置命令的概览。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一  ROS 的使用

1  创建ROS工作空间

2  编译ROS工作空间

3  设置环境变量

4  创建ROS功能包

5  操作ROS功能包

二  ROS 功能包

1  目录结构

2  配置文件

3  构建配置文件

         三  ROS 内置命令

         1  ROS Shell 命令

         2  ROS 节点管理

         3  ROS 消息命令

         4  ROS catkin 命令

         5  ROS 功能包命令


一. ROS 的使用

 1. 创建ROS工作空间

# 创建源码文件夹:
mkdir -p ~/catkin_ws/src

# 进入 src 文件夹: 
cd ~/catkin_ws/src

# 初始化文件夹:
catkin_init_workspace

2. 编译ROS工作空间

# 进入工作空间目录
cd ~/catkin_ws/

# 开始编译
catkin_make

3. 设置环境变量

# 设置环境变量
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc

# 让终端生效
source ~/.bashrc

# 查看环境变量
echo $ROS_PACKAGE_PATH

4. 创建ROS功能包

# (A)进入ROS源代码目录
     cd ~/catkin_ws/src/

#(B)创建功能包
#    功能包格式:catkin_create_pkg [功能包名称] [依赖功能包1] ... [依赖功能包n]
#    功能包例子:catkin_create_pkg ros_demo std_msgs roscpp rospy
#              std_msgs:包含常见消息类型
#                roscpp:使用C++实现ROS各种功能
#                 rospy:使用python实现ROS各种功能

#(C)编译功能包
#    会自动生成 CMakeList.txt 和 package.xml 文件
     cd ~/catkin_ws
     catkin_make

5. 操作ROS功能包

# 编译所有的功能包
  catkin_make

# 编译指定的功能包
  catkin_make --pkg your_package_name

# 安装指定的功能包
  catkin_make --pkg your_package_name --install

# 清除安装的功能包
  catkin_make --pkg your_package_name --clean

# 强制生成消息和服务(当消息类型msg和服务类型srv有改动时)
  catkin_make --force-cmake

# 指定编译语言(C++/Python)
  catkin_make --only-pkg-with-deps <你的功能包>

二. ROS 功能包

 1. 目录结构

# package_dir:
    CMakeLists.txt 	 → 构建配置文件
    package.xml      → 功能包配置文件
    include 	     → include 目录
    src 		     → 源代码目录

2. 配置文件

# package.xml: 它包含功能包信息,包括功能包名称、作者、许可证和依赖功能包。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<?xml version="1.0"?>
<package format="2">
  <name></name>
  <version>1.0</version>
  <description></description>
  <maintainer email="link@163.com">link</maintainer>

  <license>TODO</license>
  <buildtool_depend>catkin</buildtool_depend>

  <build_depend>roscpp</build_depend>
  <build_depend>std_msgs</build_depend>

  <build_export_depend>roscpp</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>

  <exec_depend>roscpp</exec_depend>
  <exec_depend>std_msgs</exec_depend>
  <export></export>
</package>

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<package>           这个语句到</package>的部分是ROS功能包的配置部分。
<name>              功能包名称,默认为创建时的名称,可以随时更改。
<version>           功能包的版本可以自由指定。
<description>       功能包的简要说明。
<maintainer>        功能包维护者的姓名和电子邮建地址。
<license>           记录版权许可证。
<url>               记录描述功能包的说明,如网页、错误管理、存储库的地址等。
<author>            记录参与功能包开发的开发人员的姓名和电子邮件地址。
<build_depend>      构建依赖关系,使用某种特定的依赖关系来构建包。
<build_export_depend>  导出头文件,当其他包需要依赖这个包,使用这个标签用来传递声明。
<exec_depend>       程序包运行中所需的依赖,如:动态库、可执行文件、Python模块、脚本等。
<depend>            以上三种depend的合集,通常使用它添加ROS功能包,是常用而简便的方法。
<buildtool_depend>  构建工具依赖的软件包。通常唯一的构建工具是catkin。
<test_depend>       测试依赖关系仅指定单元测试的附加依赖项
<doc_depend>        文档工具依赖关系指定此软件包需要生成文档的文档工具。

3. 构建配置文件

# ROS 在 CMakeList.txt 文件中描述环境构建,
# 它以设置可执行文件的创建、依赖包优先构建、连接器的创建等等。

#(A)添加要使用的对应的目录下的文件的选项:
# 其中 XXXX 可以是 message、service、actions,xxx 对应 msg、srv、action。
  add_XXXX_files (
      FILES
      XXXX1.xxx
      XXXX1.xxx
  )

#(B)设置依赖的消息的选项:
  generate_messages(
      DEPENDENCIES
      std_msgs
  }

#(C)动态参数配置:
  generate_dynamic_reconfigure_options(
      cfg/DynReconf1.cfg
      cfg/DynReconf2.cfg
  }

#(D)指定包含目录的选项:
  include_directories(${catkin_INCLUDE_DIRS})

#(E)指定要创建的库文件:
  add_library(${PROJECT_NAME} src/${PROJECT_NAME}/demo_ros_pkg.cpp)

#(F)提前生成依赖
# add_dependencies 是在代码生成库之前,提前生成一些依赖,比如:消息生成或者动态的参数。
  add_dependencies(
      ${PROJECT_NAME} 
      ${${PROJECT_NAME}_EXPORTED_TARGETS} 
      ${catkin_EXPORTED_TARGETS}
  )

#(G)构建可执行文件
  add_executable(${PROJECT_NAME}_node src/demo_ros_pkg_node.cpp)

#(H)生成的可执行文件重命名
# 生成的可执行文件重命名,简化操作,
# 比如使用 rosrun demo_pkg node 代替 rosrun demo_pkg demo_pkg_node
  set_target_properties(
      ${PROJECT_NAME}_node 
      PROPERTIES OUTPUT_NAME node PREFIX "")

#(I)添加可执行文件的依赖项:
  target_link_libraries(${PROJECT_NAME}_node
      ${catkin_LIBRARIES}
  )

 三、ROS 内置命令

1. ROS Shell 命令

2. ROS 节点管理

3. ROS 消息命令

4. ROS catkin 命令

5. ROS 功能包命令

要在ROS 2中创建一个专门处理串口通讯的功能,您可以按照以下步骤来进行操作。这里我们将一步步指导您完成从创建工作空间到最后编写及编译代码的过程。 ### 步骤一:创建工作空间功能结构 首先确认已安装好ROS 2环境,并选择合适的版本(如Humble)。然后开启终端窗口执行下列命令建立一个新的ROS 2工作区并生成初始目录架构: ```bash mkdir -p ~/ros2_ws/src cd ~/ros2_ws/ ``` 接着利用`ros2 pkg create`工具快速建立起名为`serial_interface`的基础功能框架,其中含必要的C++模板文件其他资源。请注意,在此过程中我们会添加对某些特定依赖的支持,比如用于管理串口设备访问权限的库。 ```bash source /opt/ros/humble/setup.bash # 根据实际安装路径调整 ros2 pkg create --build-type ament_cmake serial_interface \ --dependencies rclcpp std_msgs serial ``` > 注意: 上述命令中的“humble”应替换为您使用的具体ROS 2发行版名称;而`serial`则是指之前提到过的第三方跨平台C++串口库[wjwwood/serial](https://github.com/wjwwood/serial),请确保已在系统环境中成功安装该库及其对应的开发文档。 此时您的项目树应该看起来像这样: ``` ~/ros2_ws/ ├── build ├── install └── src └── serial_interface ├── CMakeLists.txt ├── package.xml ├── resource │   └── serial_interface.urdf ├── setup.cfg ├── test └── src └── main.cpp (自动生成) ``` ### 步骤二:修改功能描述 编辑位于`package.xml`内的元数据记录有关于本软件的基本信息——括作者姓名邮箱、许可证声明等等。同时增加对于额外外部依赖项的需求列表: ```xml <!-- ...其余保持不变... --> <maintainer email="you@example.com">Your Name</maintainer> <!-- Add dependency on the 'serial' library used for handling RS232 ports --> <depend>wjwwood_serial</depend> <exec_depend>rclcpp</exec_depend> <exec_depend>std_msgs</exec_depend> <test_depend>ament_catchall</test_depend> <!-- ...其余保持不变... --> ``` 接下来更新`CMakeLists.txt` 文件以指示编译器找到所需的头文件位置并且链接正确的静态或共享库。这一步非常重要,因为如果没有正确配置的话就无法正常使用第三方API函数! ```cmake # 修改后的部分内容如下所示: find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED) find_package(wjwwood_serial REQUIRED COMPONENTS thread) add_executable(serial_node src/main.cpp) ament_target_dependencies(serial_node wjwwood_serial rclcpp std_msgs ) # 确保可以定位到wjwwood/serial.h这样的头部文件 target_include_directories(serial_node PRIVATE ${wjwwood_SERIAL_INCLUDE_DIRS}) target_link_libraries(serial_node ${wjwwood_SERIAL_LIBRARIES}) install(DIRECTORY launch rviz config DESTINATION share/${PROJECT_NAME}/ ) install(TARGETS serial_node EXPORT export_${PROJECT_NAME} RUNTIME DESTINATION lib/${PROJECT_NAME} ) ``` ### 步骤三:实现核心业务逻辑 现在进入最激动人心的部分——编码!在刚才由`ros2 pkg create`自动生成出来的`src/main.cpp`基础上进一步补充具体的交互流程控制代码,使之成为一个完整的应用程序入口点。参考前一个问题的回答内容来设计如何通过串口发送指令以及接收返回结果的相关算法吧~ ### 编译部署验证成果 当所有准备工作完成后就可以开始编译整个工程项目了~只需切换回根级`ros2_ws`目录并在里面输入两条简单的命令即可触发自动化的构建过程: ```bash cd ~/ros2_ws/ colcon build --packages-select serial_interface source ./install/local_setup.bash ``` 最后别忘了启动刚做好的节点测试一下效果呀!看看是否真的能顺利连通指定的硬件外设并与之交换有用的信息咯~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值