vscode开发ROS(16)-python实现自定义动作action

本文通过自定义heatWater.action服务,介绍了如何用Python创建ROS行动通信的Server与Client节点,并详细展示了实现加热过程模拟的代码。
部署运行你感兴趣的模型镜像


写在最前

此篇博客为vscode开发系列ros第11篇vscode开发ROS(11)-ROS动作通信机制(action)的python实现版本, 请对照进行查看.

自定义动作

此处是直接采用第11篇中的, 自定义heatWater.action服务, 具体过程, 请查看该篇, 此处不再赘述.

新建Server节点

1, 在scripts文件夹中, 新建pyHeatWaterServer.py文件.
2, 粘贴以下代码

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import rospy
import actionlib #导入动作库
import time 
from ros_test.msg import heatWaterAction,heatWaterGoal,heatWaterResult,heatWaterFeedback #导入自定义动作
def execute(goal):#动作服务回调
    feedback = heatWaterFeedback() #反馈
    result = heatWaterResult() #最终结果
    rospy.loginfo("目标水温[%f]℃."%goal.tempTarget) #打印目标温度
    TTemp = goal.tempTarget #目标温度
    NTemp = 0               #临时变量
    deltaTemp = 5.5         #增量

    while(True):
        time.sleep(1)       #模拟加热耗时
        NTemp+=deltaTemp    #加热
        feedback.tempNow = NTemp #更新反馈
        if NTemp > TTemp :   #如果达到目标温度
            result.tempFinal = NTemp #给最终结果赋值
            break
        action_server.publish_feedback(feedback) #反馈中间结果
    
    rospy.loginfo("水烧开了...") #提示
    action_server.set_succeeded(result) #反馈最终结果

rospy.init_node("heatWaterServer") #初始化节点
action_server=actionlib.SimpleActionServer("heatWater",heatWaterAction,execute,auto_start=False)#初始化动作服务,动作名heatWaterAction,回调函数execute
action_server.start()#启动动作服务
rospy.spin() #循环等待

新建Client节点

1, 在scripts文件夹中, 新建pyHeatWaterClient.py文件.
2, 粘贴以下代码

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import rospy
import actionlib#导入动作库

from ros_test.msg import heatWaterAction,heatWaterGoal,heatWaterResult,heatWaterFeedback#导入自定义动作

#激活动作回调
def active():
    rospy.loginfo("开始烧水....")

#动作服务完成回调
def done(d,result):
    rospy.loginfo("水烧开了,开水温度[%f]"%result.tempFinal)

#中间过程回调
def feedback(msg):
    rospy.loginfo("当前水温[%f]℃"%msg.tempNow)

def client():
    rospy.init_node("heatWaterClient") #初始化节点

    action_client=actionlib.SimpleActionClient("heatWater",heatWaterAction)#初始化动作客户端

    rospy.loginfo("等待烧水服务...")
    action_client.wait_for_server() #等待动作服务
    rospy.loginfo("烧水服务已启用...")

    goal = heatWaterGoal() #目标

    goal.tempTarget = 100 #设置目标温度

    action_client.send_goal(goal,done,active,feedback)#申请服务

    rospy.spin() #循环等待

if __name__ == '__main__':
    try:
        client()
    except rospy.ROSInterruptException:
        pass

3, 具体介绍请看注释, 同样比较简单.
4, 使用vscode的终端中cd命令,定位到pyHeatWaterClient.py,pyHeatWaterServer.py文件

cd src/ros_test/scripts/

5, 执行指令, 这一步是为了让pyHeatWaterClient.py pyHeatWaterServer.py文件具有可执行权限, 不可缺少

chmod 0777 pyHeatWaterClient.py pyHeatWaterServer.py

运行Server和Client

1, 使用快捷键Ctrl + Shift + T 弹出系统终端,输入roscore,启用整个ROS总节点。
2, 使用快捷键Ctrl + Shift + T 弹出系统终端,输入rosrun ros_test pyHeatWaterServer.py,启用talker节点。
3, 使用快捷键Ctrl + Shift + T 弹出系统终端,输入rosrun ros_test pyHeatWaterClient.py,启用listener节点,
在这里插入图片描述

后记

更多机器人, ROS相关,公-众-号搜索 ”机器人小站"。

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>嗯,用户询问的是VSCode ROS插件被弃用的原因和替代方案。用户可能正在使用ROS进行开发,遇到了插件无法使用的问题,需要寻找替代工具来维持开发效率。 从引用内容来看,用户之前似乎在配置ROS环境时遇到了一些问题,比如版本兼容性和调试设置。这说明用户可能是个ROS初学者或者中级开发者,正在搭建开发环境。用户对工具链的稳定性比较关注,因为ROS版本和工具兼容性确实是个常见痛点。 关于插件弃用原因,需要从几个方面解释:首先是ROS社区转向新的工具标准,比如LSP协议;其次是旧插件维护成本高。用户可能更关心的是“为什么突然不能用了”,所以需要强调社区决策和技术迭代的背景。 替代方案部分,用户最需要的是具体可操作的解决方案。基于引用[4]提到的编译命令配置,以及引用[3]的语法提示问题,应该重点推荐VSCode原生C++插件配合ROS设置。特别是要说明如何解决用户可能遇到的NULL报错问题——这正好和引用[3]的内容呼应。 用户可能还会遇到ROS版本兼容性问题,引用[2]提到ubuntu22.04安装ROS的困难,所以在替代方案中需要补充版本适配说明。考虑到用户环境,建议同时提供ROS1和ROS2的配置差异。 最后要预判用户的后续问题:配置细节、调试方法(引用[1]涉及调试)、多版本管理等。在相关问题里埋下这些点,既能帮助用户深入探索,也减少重复提问。</think>好的,关于 VSCodeROS 插件显示“已弃用”的原因以及替代方案,以下是详细解答: ## 原因分析 1. **ROS 社区转向 Language Server Protocol (LSP)**: 这是最主要的原因。ROS 社区(特别是 ROS 2)正在积极拥抱现代开发工具标准。LSP 是一种协议,允许代码编辑器或 IDE(如 VSCode)与提供编程语言特定功能(如自动补全、跳转到定义、错误检查等)的独立服务器(Language Server)进行通信。 * **优势**: LSP 使得开发体验更加标准化、语言支持更加独立于编辑器。开发者可以在自己喜欢的编辑器(VSCode、Vim、Emacs 等)中获得一致的 ROS 开发体验,而无需依赖某个特定编辑器的专有插件。 * **影响**: 这意味着专门为 VSCode 开发的、功能相对独立和封闭的“ROS 插件”不再是社区的首选发展方向。维护该插件的资源被转移到了支持 LSP 的工具链上。 2. **维护负担**: 维护一个功能全面的、与特定编辑器深度绑定的插件需要持续投入大量精力。随着 ROS 2 的演进和 LSP 方案的成熟,维护旧插件的优先级降低。 3. **功能整合与标准化**: 许多原来由 ROS 插件提供的核心功能(如构建、运行、调试 ROS 节点)可以通过更通用的机制(如 `tasks.json`, `launch.json`)或新的基于 LSP 的工具(如 `ros2 cli` 集成)来实现。像 `colcon` 这样的构建工具也提供了更好的与编辑器集成的接口(如生成 `compile_commands.json`)。 ## 替代方案与推荐工作流 虽然官方 ROS 插件被弃用,但通过配置 VSCode 的标准功能和安装其他通用插件,你仍然可以获得甚至超越原插件的强大开发体验。核心思路是**利用 LSP 和 VSCode 强大的原生 C++/Python 支持,结合 ROS 命令行工具和特定的配置**。 1. **核心语言支持 (必备)**: * **C++**: 安装 Microsoft 官方的 **[C/C++](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools)** 扩展。这是提供 C++ 智能感知(IntelliSense)、代码导航、调试等功能的基础。 * **Python**: 安装 Microsoft 官方的 **[Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python)** 扩展。对于开发 ROS Python 节点至关重要。 * **XML**: 安装 **[XML](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-xml)** 扩展 (Red Hat 提供)。用于编辑 `package.xml` 和 `.launch` 文件的高亮和验证。 2. **ROS 智能感知与语言支持 (关键替代)**: * **ROS 的 Language Server**: 这是替代原插件的核心智能感知功能的关键组件。 * **安装**: 在 VSCode 扩展商店搜索并安装 **[ROS](https://marketplace.visualstudio.com/items?itemName=ms-iot.vscode-ros)** 扩展 (由 Microsoft 开发维护)。**注意**:虽然名字里也有“ROS”,但这*不是*被弃用的那个旧插件,而是一个**基于 LSP 的 Language Client**。 * **功能**: 这个扩展会启动一个后台的 ROS Language Server (`ros_lsp`)。它提供了: * ROS 包、节点、消息、服务、动作等的自动补全。 * 跳转到定义 (例如 `#include <ros/ros.h>` 中的 `ros.h`)。 * 查找引用。 * 对 `CMakeLists.txt` 和 `package.xml` 的特定支持(依赖项补全、验证)。 * 悬停提示 (Hover) 显示 ROS 类型的信息。 * **CMake 支持**: 安装 **[CMake Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools)** 扩展。它提供强大的 CMake 配置、构建、调试支持,与 `colcon`/`catkin_make` 结合使用效果很好。它能理解 `CMakeLists.txt` 中的 `find_package(ros)` 等指令。 3. **配置智能感知 (C++)**: * 为了让 C/C++ 扩展能正确理解 ROS 头文件路径和宏定义,**必须**配置 `compile_commands.json`。 * **生成 `compile_commands.json`**: * **`catkin_make`**: 在构建命令中添加 `-DCMAKE_EXPORT_COMPILE_COMMANDS=1`。例如: ```bash catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1 ``` * **`colcon`**: `colcon build` 默认会在每个包的 `build` 目录下生成 `compile_commands.json`。为了方便 VSCode 查找,通常建议创建一个指向它们的合并文件: ```bash colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON # 安装compdb工具 (可选但推荐) sudo apt-get install python3-colcon-common-extensions # 或 pip install compdb # 在workspace根目录生成合并的compile_commands.json compdb -p build/ list > compile_commands.json ``` * **配置 VSCode**: * 在 VSCode 中打开你的 ROS workspace 文件夹。 * 按 `Ctrl+Shift+P` 打开命令面板,输入 `C/C++: Edit Configurations (UI)`,选择进入设置 UI。 * 在 **`Configuration Provider`** 下拉框中,选择 **`compileCommands`**。这会告诉 C/C++ 扩展使用你 workspace 根目录下的 `compile_commands.json` 文件来获取编译信息。如果合并文件不在根目录,可以在 `c_cpp_properties.json` 中手动指定路径(如引用[4]所示)[^4]: ```json "configurations": [ { "name": "ROS", "configurationProvider": "ms-vscode.cmake-tools", // 如果用了CMake Tools也可以选这个 "compileCommands": "${workspaceFolder}/build/compile_commands.json", // 显式指定路径 // ... 其他设置 ... } ] ``` * 确保 `IntelliSense Mode` 设置为 `linux-gcc-x64` (或对应你的系统/编译器) 且 `C++ Standard` (如 `c++17`) 正确。 4. **构建、运行与调试**: * **构建**: 主要依赖命令行 (`colcon build` / `catkin_make`) 或 CMake Tools 扩展提供的构建面板。可以在 `tasks.json` 中定义自定义构建任务方便一键调用。 * **运行节点/Launch 文件**: 推荐使用命令行 (`ros2 run`, `ros2 launch` / `rosrun`, `roslaunch`)。可以在 `tasks.json` 中定义运行特定节点或 launch 文件的任务,方便在 VSCode 中通过快捷键启动。 * **调试**: * **C++**: 使用 C/C++ 扩展强大的调试功能。配置 `launch.json` 文件。 * 对于 `catkin_make`: 通常配置为 `"type": "cppdbg"`, `"program"` 指向编译出的可执行文件路径 (在 `devel/lib/<package>/` 下),`"args"` 可传入 ROS 参数,`"environment"` 设置 `ROS_MASTER_URI`, `ROS_HOSTNAME` 等(ROS1)或 source setup 文件(ROS1/2)。 * 对于 `colcon` (ROS2): 配置类似,可执行文件在 `install/<package>/lib/<package>/` 下。一个关键点是在 `launch.json` 的配置项中添加 `"setupFiles": ["${workspaceFolder}/install/setup.bash"]` (或 `.zsh`) 来初始化 ROS 2 环境[^1]。 * **Python**: 使用 Python 扩展调试。配置 `launch.json`, `"type": "python"`, `"program"` 指向你的 Python 节点脚本,同样需要配置环境变量或 `setupFiles`。 5. **其他有用扩展 (可选但推荐)**: * **[ROS Snippets](https://marketplace.visualstudio.com/items?itemName=minhthuan-2011.ros-snippets)**: 提供常用 ROS 代码片段的快速插入(如创建节点、发布者、订阅者、服务等模板)。 * **[Msg Language Support](https://marketplace.visualstudio.com/items?itemName=ajshort.msg)**: 为 `.msg`, `.srv`, `.action` 文件提供语法高亮。 * **[YAML](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml)**: 用于编辑 YAML 配置文件(参数文件等)。 * **[Docker](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker)**: 如果使用 Docker 开发 ROS。 * **[GitLens](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens)**: 增强 Git 功能。 ## 总结 * **弃用原因**: ROS 社区拥抱 LSP 标准,旧插件维护资源转向新方向。 * **核心替代方案**: 1. **语言支持**: C/C++ 扩展 + Python 扩展 + XML 扩展。 2. **ROS 智能感知**: **ROS (ms-iot.vscode-ros)** 扩展 (基于 LSP)。 3. **构建支持**: CMake Tools 扩展 + 命令行 / `tasks.json`。 4. **调试支持**: C/C++ 扩展 / Python 扩展 + 精心配置 `launch.json` (特别是 `setupFiles` 或环境变量)。 5. **关键配置**: 正确生成并配置 `compile_commands.json`。 * **工作流**: 结合 VSCode 原生强大功能 (IntelliSense, 调试) + ROS 命令行工具 (`ros2`/`ros`, `colcon`/`catkin_make`) + 基于 LSP 的 ROS 语言服务器 + 必要的配置文件 (`c_cpp_properties.json`, `tasks.json`, `launch.json`)。 这种新的工作流虽然初始配置比一键安装旧插件稍显复杂,但它基于更现代、更标准化的技术(LSP),功能更强大、更灵活,并且能得到 ROS 社区更持续的支持。一旦配置完成,开发体验非常流畅。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值