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


写在最前

此篇博客为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相关,公-众-号搜索 ”机器人小站"。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值