10.2.3 动态参数服务端 B python

优质
小牛编辑
126浏览
2023-12-01

10.2.3 动态参数服务端B(Python)

需求:

编写两个节点,一个节点可以动态修改参数,另一个节点时时解析修改后的数据。

服务端实现流程:

  • 新建并编辑 Python 文件;
  • 编辑CMakeLists.txt;
  • 编译并执行。

0.vscode配置

需要像之前自定义 msg 实现一样配置settings.json 文件,如果以前已经配置且没有变更工作空间,可以忽略,如果需要配置,配置方式与之前相同:

{
    "python.autoComplete.extraPaths": [
        "/opt/ros/noetic/lib/python3/dist-packages",
        "/xxx/yyy工作空间/devel/lib/python3/dist-packages"
    ]
}

1.服务器代码实现

新建python文件,内容如下:

#! /usr/bin/env python
import rospy
from dynamic_reconfigure.server import Server
from demo02_dr.cfg import drConfig

"""
    动态参数服务端: 参数被修改时直接打印
    实现流程:
        1.导包
        2.初始化 ros 节点
        3.创建服务对象
        4.回调函数处理
        5.spin
"""
# 回调函数
def cb(config,level):
    rospy.loginfo("python 动态参数服务解析:%d,%.2f,%d,%s,%d",
            config.int_param,
            config.double_param,
            config.bool_param,
            config.string_param,
            config.list_param
    )
    return config

if __name__ == "__main__":
    # 2.初始化 ros 节点
    rospy.init_node("dr_p")
    # 3.创建服务对象
    server = Server(drConfig,cb)
    # 4.回调函数处理
    # 5.spin
    rospy.spin()

2.编辑配置文件

先为 Python 文件添加可执行权限:chmod +x *.py

catkin_install_python(PROGRAMS
  scripts/demo01_dr_server_p.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

3.执行

先启动roscore

启动服务端:rosrun 功能包 xxxx.py

启动客户端:rosrun rqt_gui rqt_gui -s rqt_reconfigurerosrun rqt_reconfigure rqt_reconfigure

最终可以通过客户端提供的界面修改数据,并且修改完毕后,服务端会即时输出修改后的结果,最终运行结果与示例类似。

PS:ROS版本较新时,可能没有提供客户端相关的功能包导致rosrun rqt_reconfigure rqt_reconfigure调用会抛出异常。