步骤 1: 创建ROS包
-
打开WSL终端。
-
创建一个新的工作空间(如果你还没有):
巴什复制代码 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src
-
使用**
catkin_create_pkg
**创建一个新的ROS包:巴什复制代码 catkin_create_pkg example_package std_msgs rospy roscpp actionlib_msgs actionlib
这将创建一个名为**
example_package
的包,其中包含对std_msgs
,rospy
,roscpp
,actionlib_msgs
和actionlib
**的依赖。 -
进入新创建的包目录:
巴什复制代码 cd example_package
步骤 2: 添加Action定义
-
在包目录中创建一个**
action
**文件夹,并定义一个新的action:巴什复制代码 mkdir action cd action nano Example.action
-
在**
Example.action
**文件中添加以下内容,然后保存退出:yaml复制代码 # Goal int32 number --- # Result int32 result --- # Feedback int32 feedback
步骤 3: 更新CMakeLists.txt和package.xml
- 修改**
CMakeLists.txt
来包含action文件的构建指令。你需要取消注释相关行,并添加你的.action
**文件。 - 同样,更新**
package.xml
**以添加必要的依赖。
步骤 4: 写Action Server和Client
-
在包的**
src
**目录下创建Action Server和Client的Python脚本。 -
确保这些脚本可执行:
巴什复制代码 chmod +x example_action_server.py chmod +x example_action_client.py
步骤 5: 构建包
-
回到工作空间的根目录:
巴什复制代码 cd ~/catkin_ws
-
运行**
catkin_make
**来构建你的包:巴什复制代码 catkin_make
-
源化环境设置:
巴什复制代码 source devel/setup.bash
步骤 6: 运行Action Server和Client
-
在一个新的终端中启动ROS核心:
巴什复制代码 roscore
-
在另一个终端中运行Action Server:
巴什复制代码 rosrun example_package example_action_server.py
-
在第三个终端中运行Action Client:
巴什复制代码 rosrun example_package example_action_client.py
这将启动你的Action Server和Client,你可以看到他们之间的交互。
总结
遵循这些步骤,你可以在WSL上的ROS环境中创建和运行包含自定义action的ROS包。这将帮助你理解ROS中的action机制,并提供编写和运行ROS节点的实践经验。记住,代码逻辑应该简单,只需展示action机制的基本工作原理即可。
你
第3步不会啊
架构师指南
当然,我可以帮助你完成第3步,即更新**CMakeLists.txt
和package.xml
来包含action文件的构建指令。这是确保你的.action
**文件被正确处理的关键步骤。
更新 CMakeLists.txt
-
打开文件:
- 使用文本编辑器打开**
CMakeLists.txt
文件。你可以在WSL中使用nano
**或任何其他文本编辑器。
巴什复制代码 nano ~/catkin_ws/src/example_package/CMakeLists.txt
- 使用文本编辑器打开**
-
添加依赖:
- 找到**
find_package
这一节,并确保actionlib_msgs
**和其他必要的依赖被包含。它应该看起来像这样:
cmake复制代码 find_package(catkin REQUIRED COMPONENTS actionlib_msgs std_msgs rospy roscpp )
- 找到**
-
启用action构建:
- 向**
add_action_files
部分添加你的.action
**文件。如果这部分被注释了,取消注释它,并添加你的文件:
cmake复制代码 add_action_files( FILES Example.action )
- 向**
-
生成消息:
- 确保在**
generate_messages
**部分添加了必要的依赖项:
cmake复制代码 generate_messages( DEPENDENCIES actionlib_msgs std_msgs )
- 确保在**
-
添加运行时和构建时依赖:
- 在**
catkin_package
调用中添加CATKIN_DEPENDS
**:
cmake复制代码 catkin_package( CATKIN_DEPENDS actionlib_msgs std_msgs )
- 在**
-
保存并关闭文件。
更新package.xml
-
打开文件:
巴什复制代码 nano ~/catkin_ws/src/example_package/package.xml
-
添加依赖:
- 在**
<package>
标签内,确保你有对actionlib_msgs
和std_msgs
**的依赖。例如:
XML复制代码 <build_depend>actionlib_msgs</build_depend> <build_export_depend>actionlib_msgs</build_export_depend> <exec_depend>actionlib_msgs</exec_depend>
- 重复上述步骤,确保**
std_msgs
**和其他任何必要的依赖也被包括进来。
- 在**
-
保存并关闭文件。
完成这些步骤后,你的**CMakeLists.txt
和package.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.txt
或package.xml
**交互,但是用于启动和配置由这两个文件构建和配置的程序。
- **
总结
- **
package.xml
**定义了包的元数据和依赖。 - **
CMakeLists.txt
**指导了如何构建包,包括编译代码、链接库和处理消息/服务/行动定义。 - **
.launch
**文件用于运行构建的程序,允许一次性启动多个节点并配置它们的参数。
这三者共同工作,确保ROS包的依赖性、构建过程和运行时行为被正确处理。在开发ROS程序时,通常需要同时修改这三个文件来满足项目需求。