7.00node.py文档
概述
这个代码文件包含了一个 ROS 节点ROS节点的介绍,用于订阅名为 “sub_param” 的主题,并根据接收到的消息执行相应的操作。节点通过 Modbus Modbus的介绍与设备通信。
导入的模块
- rospy:ROS Python 客户端库。
- ros_modbus_msg.msg:用于导入自定义消息。
- wrapper_modbus.d12_modbus_client:自定义的 D12 Modbus 客户端。
- wrapper_modbus.d12_controller_mapping:包含设备控制映射。
- wrapper_modbus.ROS_Modbus:自定义的 ROS Modbus 包。
主要函数和方法
-
speed_ms(ch_x:list) -> tuple
获取速度和微步参数。
参数:
ch_x (list)
:通道参数列表,包括寄存器地址等。
返回值:
tmp_speed
,tmp_ms
(类型:tuple):包含速度和微步参数。
-
callback_sub_param(msg)
这是一个回调函数回调函数的介绍,用于处理从名为 “sub_param” 的 ROS 主题接收到的消息。在此函数中,根据接收到的消息执行相应的操作。具体而言,该函数执行以下步骤:
- 参数:
msg
:接收到的消息对象,类型为operation
operation的介绍。消息对象包含了一系列操作和参数值,需要根据实际情况解析。
- 解析消息:
- 从消息对象中提取出各个操作所需的参数值,包括操作类型 (
oper
)、各轴的位置 (A_x
、A_y
、A_z
),以及各轴的速度 (x_speed
、y_speed
、z_speed
)。 - 如果速度为零,记录日志指示接收到了没有速度参数的消息。
- 从消息对象中提取出各个操作所需的参数值,包括操作类型 (
- 根据操作类型执行相应操作:
- 如果操作类型为
0
,执行多轴急停操作,调用client.multiAxis_EMERGENCYSTOP()
方法。 - 如果操作类型为
1
,执行多轴状态读取操作,调用opc.ROS_multiAxis_StateRead()
方法。 - 如果操作类型为
2
,执行多轴停止操作,调用opc.ROS_multiAxis_Stop()
方法。 - 如果操作类型为
3
,执行多轴相对运动操作,调用opc.ROS_multiAxis_RelativeMove()
方法。 - 如果操作类型为
4
,执行多轴绝对运动操作,调用opc.ROS_multiAxis_AbsoluteMove()
方法。 - 如果操作类型为
5
,执行多轴相对运动速度操作,调用opc.ROS_multiAxis_RelMoveSpeed()
方法。 - 如果操作类型为
6
,执行多轴绝对运动速度操作,调用opc.ROS_multiAxis_AbsMoveSpeed()
方法。 - 如果操作类型为
7
,执行指定轴以指定速度回原点操作,调用opc.ROS_multiAxis_Origin()
方法。 - 如果操作类型为
9
,目前不支持的操作。
- 如果操作类型为
- 参数传递:
- 根据不同操作类型,将提取出的参数值传递给相应的操作方法。
- 日志记录:
- 在执行操作前后,记录日志以指示收到的消息内容和执行的操作。
这个函数是整个 ROS 节点中最核心的部分之一,负责根据接收到的消息确定执行的操作,并将参数传递给相应的操作方法。
- 参数:
-
主程序:__main__ 部分
- 初始化 ROS 节点,命名为 “
modbus_subscriber_client
“。 - 创建 Modbus 客户端Modbus客户端的介绍。
- 订阅 “
sub_param
” 话题,并指定回调函数为 callback_sub_param。 - 进入 ROS 主循环,等待消息。
- 初始化 ROS 节点,命名为 “
常量和变量
host (str)
:Modbus 设备的 IP 地址。ch0
,ch1 (list)
:通道参数列表,包括通道名称、寄存器地址等。multiAxis_EMERGENCYSTOP_data
,multiAxis_OriginAll_data (list)
:多轴急停和原点初始化数据。client (D12ModbusClient)
:Modbus客户端对象,用于与设备通信。opc (OperCommand)
:OperCommand 对象,包含执行命令的方法。sub_param (rospy.Subscriber)
:订阅 “sub_param” 主题的订阅者对象。
注意事项
- 在运行之前,请确保正确配置了相关参数,包括 Modbus 设备的 IP 地址和通道参数。
- 某些操作可能受到设备状态的影响,需要确保设备处于正确的状态下执行操作。
- 特定功能可能受到设备支持情况的限制,如多轴原点初始化功能。