详解在WSL(Windows Subsystem for Linux)上创建并运行一个包含action的ROS节点

在这里插入图片描述

步骤 1: 创建ROS包

  1. 打开WSL终端。

  2. 创建一个新的工作空间(如果你还没有):

    巴什复制代码
    mkdir -p ~/catkin_ws/src
    cd ~/catkin_ws/src
    
    
  3. 使用**catkin_create_pkg**创建一个新的ROS包:

    巴什复制代码
    catkin_create_pkg example_package std_msgs rospy roscpp actionlib_msgs actionlib
    
    

    这将创建一个名为**example_package的包,其中包含对std_msgsrospyroscppactionlib_msgsactionlib**的依赖。

  4. 进入新创建的包目录:

    巴什复制代码
    cd example_package
    
    

步骤 2: 添加Action定义

  1. 在包目录中创建一个**action**文件夹,并定义一个新的action:

    巴什复制代码
    mkdir action
    cd action
    nano Example.action
    
    
  2. 在**Example.action**文件中添加以下内容,然后保存退出:

    yaml复制代码
    # Goal
    int32 number
    ---
    # Result
    int32 result
    ---
    # Feedback
    int32 feedback
    
    

步骤 3: 更新CMakeLists.txt和package.xml

  1. 修改**CMakeLists.txt来包含action文件的构建指令。你需要取消注释相关行,并添加你的.action**文件。
  2. 同样,更新**package.xml**以添加必要的依赖。

步骤 4: 写Action Server和Client

  1. 在包的**src**目录下创建Action Server和Client的Python脚本。

  2. 确保这些脚本可执行:

    巴什复制代码
    chmod +x example_action_server.py
    chmod +x example_action_client.py
    
    

步骤 5: 构建包

  1. 回到工作空间的根目录:

    巴什复制代码
    cd ~/catkin_ws
    
    
  2. 运行**catkin_make**来构建你的包:

    巴什复制代码
    catkin_make
    
    
  3. 源化环境设置:

    巴什复制代码
    source devel/setup.bash
    
    

步骤 6: 运行Action Server和Client

  1. 在一个新的终端中启动ROS核心:

    巴什复制代码
    roscore
    
    
  2. 在另一个终端中运行Action Server:

    巴什复制代码
    rosrun example_package example_action_server.py
    
    
  3. 在第三个终端中运行Action Client:

    巴什复制代码
    rosrun example_package example_action_client.py
    
    

这将启动你的Action Server和Client,你可以看到他们之间的交互。

总结

遵循这些步骤,你可以在WSL上的ROS环境中创建和运行包含自定义action的ROS包。这将帮助你理解ROS中的action机制,并提供编写和运行ROS节点的实践经验。记住,代码逻辑应该简单,只需展示action机制的基本工作原理即可。

第3步不会啊

架构师指南

当然,我可以帮助你完成第3步,即更新**CMakeLists.txtpackage.xml来包含action文件的构建指令。这是确保你的.action**文件被正确处理的关键步骤。

更新 CMakeLists.txt

  1. 打开文件:

    • 使用文本编辑器打开**CMakeLists.txt文件。你可以在WSL中使用nano**或任何其他文本编辑器。
    巴什复制代码
    nano ~/catkin_ws/src/example_package/CMakeLists.txt
    
    
  2. 添加依赖:

    • 找到**find_package这一节,并确保actionlib_msgs**和其他必要的依赖被包含。它应该看起来像这样:
    cmake复制代码
    find_package(catkin REQUIRED COMPONENTS
      actionlib_msgs
      std_msgs
      rospy
      roscpp
    )
    
    
  3. 启用action构建:

    • 向**add_action_files部分添加你的.action**文件。如果这部分被注释了,取消注释它,并添加你的文件:
    cmake复制代码
    add_action_files(
      FILES
      Example.action
    )
    
    
  4. 生成消息:

    • 确保在**generate_messages**部分添加了必要的依赖项:
    cmake复制代码
    generate_messages(
      DEPENDENCIES
      actionlib_msgs
      std_msgs
    )
    
    
  5. 添加运行时和构建时依赖:

    • 在**catkin_package调用中添加CATKIN_DEPENDS**:
    cmake复制代码
    catkin_package(
      CATKIN_DEPENDS actionlib_msgs std_msgs
    )
    
    
  6. 保存并关闭文件。

更新package.xml

  1. 打开文件:

    巴什复制代码
    nano ~/catkin_ws/src/example_package/package.xml
    
    
  2. 添加依赖:

    • 在**<package>标签内,确保你有对actionlib_msgsstd_msgs**的依赖。例如:
    XML复制代码
    <build_depend>actionlib_msgs</build_depend>
    <build_export_depend>actionlib_msgs</build_export_depend>
    <exec_depend>actionlib_msgs</exec_depend>
    
    
    • 重复上述步骤,确保**std_msgs**和其他任何必要的依赖也被包括进来。
  3. 保存并关闭文件。

完成这些步骤后,你的**CMakeLists.txtpackage.xml文件将被正确配置,以支持.action**文件的构建和使用。接下来,你可以继续按照之前的步骤进行构建和测试。

package.xml、CMakeLists.txt、.launch他们之间的区别和联系是什么?不懂为什么要这些

架构师指南

在ROS(Robot Operating System)中,package.xml、**CMakeLists.txt.launch**文件都扮演着重要的角色,它们各自具有特定的功能,并相互协作以构建和运行ROS程序。下面是它们之间的区别和联系的详细解释:

package.xml

  • 功能: 这个文件是ROS包的清单文件,用于描述包的元信息和依赖关系。它包括包的名称、版本、维护者、许可证信息,以及该包所依赖的其他包。
  • 作用:
    • 定义ROS包的元数据。
    • 指定编译和运行该包所需的依赖包。
  • 联系:
    • **package.xml中定义的依赖关系被用于CMakeLists.txt**中,以确保在构建过程中正确处理这些依赖。

CMakeLists.txt

  • 功能: **CMakeLists.txt**是CMake的配置文件,用于指导如何构建ROS包(特别是C++部分)。它包括指令和规则,告诉CMake如何编译代码和链接库。

  • 作用

    :

    • 定义如何构建ROS包中的程序(编译指令、链接库、包含头文件等)。
    • 指定生成可执行文件和/或库。
    • 定制编译过程,如添加自定义构建步骤、处理消息生成(对于**.msg.srv文件)和行动定义(对于.action**文件)。
  • 联系

    :

    • **CMakeLists.txt使用package.xml**中定义的依赖来配置构建环境。
    • 它负责实现**package.xml**声明的依赖项的实际构建逻辑。

.launch文件

  • 功能: **.launch**文件是用于启动ROS节点的XML格式文件。它们允许你一次性启动一个或多个ROS节点,并且可以设置节点的参数。

  • 作用

    :

    • 简化启动过程,通过一个命令同时启动多个节点。
    • 配置节点的运行时参数。
  • 联系

    :

    • **.launch文件通常用于运行CMakeLists.txt**构建的可执行文件。
    • 它不直接与**CMakeLists.txtpackage.xml**交互,但是用于启动和配置由这两个文件构建和配置的程序。

总结

  • **package.xml**定义了包的元数据和依赖。
  • **CMakeLists.txt**指导了如何构建包,包括编译代码、链接库和处理消息/服务/行动定义。
  • **.launch**文件用于运行构建的程序,允许一次性启动多个节点并配置它们的参数。

这三者共同工作,确保ROS包的依赖性、构建过程和运行时行为被正确处理。在开发ROS程序时,通常需要同时修改这三个文件来满足项目需求。

  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aitrainee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值