2.00ros_modbus_msg - 基于ROS和Modbus协议构建的通信功能包

1. 概述

ros_modbus_msg 是基于ROS架构ROS架构介绍和Modbus协议Modbus协议介绍实现的在本项目——农业多功能机器人中滑台操控部分的控制部分;是通过ROS的话题通讯方式,和具有modbus/TCP协议modbus/TCP协议介绍的制器进行通信,进而控制机器人的滑台移动。

滑台部分充当了机器人的执行机构,作为一个整体看待,完成自动化除草等功能。

整个执行机构中包括3条滑台,1个推杆,1个主轴电机,代表了执行机构的 X、Y、Z 3个方向上的移动和工作。其中2条平行的滑台负责X轴向的移动,在控制器中为ch0,ch1通道控制;1条滑台负责Y轴向的移动,在控制器中为ch2通道控制;1个推杆负责Z轴向的移动,在控制器中为ch3通道控制;1个主轴电机负责机器人最终的除草工作的实现,由控制器控制器介绍转发的I/O控制I/O控制介绍

当前版本为最基础的版本:release-v1.0

本模块大量参考了ros-modbus-device-driver项目,该项目地址:bitmeal/ros-modbus-device-driver (github.com)

依赖项依赖项介绍

find_package(catkin REQUIRED COMPONENTS
  rospy
  std_msgs
  message_generation
)

catkin_python_setup()

配置setup.py

#!/usr/bin/env python
from distutils.core import setup
from catkin_pkg.python_setup import generate_distutils_setup

d = generate_distutils_setup()
d['packages'] = ['wrapper_modbus']
d['package_dir'] = {'': 'src'}

setup(**d)

安装 install with Github

  • 本功能包基于python3;

  • 本功能包基于Ubuntu20.04.06 和 ROS noetic 1.16.0

  • 本版本基于pymodbus版本为3.5.2

    pymodbus的安装流程可参考本版本README.md

  • 本版本地址为:HMXF/ros_modbus_msg 版本 v1.0 (github.com)

    cd ~/catkin_ws
    mkdir src
    cd src
    git clone 功能包.git
    

编译

cd ~/catkin_ws
catkin build --pre-clean

  • 编译时可以使用catkin_make,但推荐为catkin build,此工具更加灵活高效。
  • 参数--pre-clean表示开始构建之前先执行清理操作,以避免可能存在的旧文件对新构建的影响:删除先前生成的builddevel 目录。

功能包文件树

├── CMakeLists.txt                      # 配置文件
├── doc                                 # 设备文档
├── examples                            # 简单的示例
├── launch
│   └── control.launch                  # launch启动文件
├── LICENSE                             # 版权说明
├── msg                                 
│   ├── operation.msg                   # Modbus控制器的命令消息
│   └── spindle_argument.msg            # 主轴电机的控制命令消息
├── package.xml                     
├── README.md
├── scripts                             # ROS控制节点 
│   ├── listen.py                       # 监听节点
│   ├── node.py                         # Modbus控制节点
│   └── Spindle_motor.py                # 主轴电机控制节点
├── setup.py                            # python功能包引用设置
├── src             
│   └── wrapper_modbus                  # Modbus通讯数据设置包
│       ├── BaseModbusClient.py         # Modbus协议的基本应用
│       ├── d12_controller_mapping.py   # Modbus设备映射表
│       ├── d12_modbus_client.py        # Modbus设备的使用模块 
│       ├── __init__.py                 # 功能包的初始化设置模块
│       ├── post_threading.py           # 
│       ├── __pycache__     
│       └── ROS_Modbus.py               # ROS命令消息转换为Modbus设备命令的切割封装模块
└── Version.md                          # 版本信息

ros_modbus_msg功能包中主要由 3 个部分组成:

  1. scripts,基于ROS通信ROS通信介绍方式的对pymodbus的使用;

    ​ 包括命令接受、解析,调用相应控制器包的函数(node.py);

    ​ 还包括控制器参数控制器参数介绍变化的监听(listern.py);

    ​ 还包括I/O信号的转发(Spindle_motor.py);

  2. src/wrapper_modbus,对pymodbus模块的包装,使得更方便于本项目的应用(wrapper_modbus);

  3. msg,基于ROS通讯的自定义消息类型ROS通讯的自定义消息类型介绍

2. 使用方法

使用前准备

  1. 连接佳信通控制器设备

    • 本功能包基于佳信通控制设备,使用Modbus/TCP协议在PC(或工控机)与控制器控制器介绍之间通信;

    • 设备与PC通过通用网线连接:

      • 工控机可以直接通过网口网线与设备连接;
      • 个人PC也可以如上连接,如果仅有一个网口,可以通过转换器/扩展坞转换器/扩展坞介绍使用USB方式连接;
    • 硬件连接后,需要在Ubuntu系统Ubuntu系统介绍中进行网络配置:

      1. 在Ubuntu系统中,打开Settings设置的Network设置

      2. 在设备连接后会弹出新的网络设置:

        • 选择Connected-100Mb/s的网络设置;

        • IPv4 Method 选为 Manual

        • 将IP地址配置为设备IP:192.168.1.222;Netmask:255.255.255.0;
        • 选择Apply

使用

  • 使用Ctrl+Alt+T打开终端:启动roscore

    roscore
    
  • 控制命令节点启动

    1. 使用Ctrl+Alt+T打开另一个终端:

      cd ~/catkin_ws
      
    2. 刷新环境变量:

      source ./devel/setup.bash 
      
    3. 运行节点:

      rosrun ros_modbus_msg node.py
      
    4. 发布命令:

      rostopic pub /
      

      注:命令参数含义可以参考msg文档代码中内容;

  • 监听节点启动

    1. 使用Ctrl+Alt+T打开另一个终端:

      cd ~/catkin_ws
      
    2. 刷新环境变量:

      source ./devel/setup.bash 
      
    3. 运行节点:

      rosrun ros_modbus_msg listen.py
      
  • 主轴电机节点启动

    1. 使用Ctrl+Alt+T打开另一个终端:

      cd ~/catkin_ws
      
    2. 刷新环境变量:

      source ./devel/setup.bash 
      
    3. 运行节点:

      rosrun ros_modbus_msg Spindle_motor.py