1.00ros_ht_msg - 基于ROS和CAN网络的机器人底盘控制程序

1. 概述

ros_ht_msg是用于控制四轮四转机器人底盘的功能包,基于ROSROS介绍和CANCAN介绍网络通讯;

ros_ht_msg功能包提供了以ROS话题通讯ROS话题通信介绍的消息控制机器人底盘的功能。

ros_ht_msg功能包主要由四轮四转底盘供应商提供,功能包中包括了必要的文档、示例、消息类型等文件夹;

依赖项依赖项介绍

find_package(catkin REQUIRED COMPONENTS
  roscpp
  tf
  std_msgs
  message_generation
  geometry_msgs
)

安装 install with Github

编译

cd ~/catkin_ws
catkin build --pre-clean

  • 编译时可以使用catkin_make,但推荐为catkin build,此工具更加灵活高效。

  • 参数--pre-clean表示开始构建之前先执行清理操作,以避免可能存在的旧文件对新构建的影响:删除先前生成的builddevel 目录。

2. 使用方法

使用前准备

  1. 确认编译的系统架构,选择合适的动态链接库文件libcontrolcan.so动静态链接库介绍

    • 在功能包lib文件夹下已经设置好四种系统架构下的相应的文件,同时还有相应的静态链接库文件,因为四种动态链接库文件均为同名文件libcontrolcan.so,本功能包采用软链接软链接介绍的方式调用该文件;

      lib文件夹tree:
      .
      ├── libcontrolcan.so -> linux/x86_64/libcontrolcan.so
      └── linux
          ├── aarch64
          │   ├── libcontrolcan.a
          │   └── libcontrolcan.so
          ├── arm32
          │   ├── libcontrolcan.a
          │   └── libcontrolcan.so
          ├── controlcan.h
          ├── README.md
          ├── x86
          │   ├── libcontrolcan.a
          │   └── libcontrolcan.so
          └── x86_64
              ├── libcontrolcan.a
              └── libcontrolcan.so
      

      注:当前展示的文件树为软链接连接在X86_64系统架构下的动态链接库文件上;

    • 编译运行时,需要确认动态链接库文件是否和自己的系统架构适配,否则会编译失败:
      • 查看自己系统架构:

        uname -m
        
      • 查看当前软连接连接的文件:

        cd ~/catkin_ws/src/ros_ht_msg/lib
        ll
        

        注:libcontrolcan.so -> linux/x86_64/libcontrolcan.sox86_64表示目前连接在X86的64位系统的动态链接库文件上。

      • 修改方式:

        ln -s linux/相应架构/libcontrolcan.so libcontrolcan.so
        
    • 在底盘的工控机上编译运行本功能包时,需要将软连接修改到aarch64中的动态链接文件上;

      在个人PC上编译编译运行本功能包时,需要将软连接修改到x86_64中的动态链接文件上。

  2. 连接CAN网络设备

    • 本项目使用 创芯科技 提供的 CANalyst-Ⅱ分析仪CANalyst-Ⅱ分析仪介绍作为CAN网络通讯设备,设备自身接线方式有对应手册,位于功能包doc文件夹中,文件名为:USBCAN_Test_Process_V1.70.pdf
    • CAN网络通讯设备通过TCP协议TCP介绍和主机通讯主机通讯介绍
    • 使用该设备时,涉及到USB底层驱动协议USB底层驱动协议介绍,在运行时需要加sudo获取权限,否则 USB设备没有权限操作;也可以增加新的udev规则udev规则介绍,使得后续调用不用频繁获取权限,具体方式可参考doc文件夹中的HT01_ROS_Comm_Package_Instructions.pdf文件。

使用

  • 方式一:单一文件启动功能包(可用于前期基础测试):

    1. 刷新环境变量:

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

      rosrun ros_ht_msg ros_ht_msg 
      
    3. 发布命令:

      rostopic pub /HT_Control ros_ht_msg/ht_control "mode: 0
      x: 0
      y: 0
      z: 0" 
      

      注:命令参数含义可以参考doc文件夹中的HT01_CAN_Communication_Protocol_20210722 .pdf文件。

    4. 此时可以通过如下命令查看底盘各系统状态:

      rostopic echo /HT_Drive_Motor   # 驱动电机状态
      rostopic echo /HT_Motion        # 运动状态
      rostopic echo /HT_Steer_Motor   # 转向电机状态
      rostopic echo /HT_System        # 系统状态
      
  • 方式二:roslaunch启动多个节点:方式基本同上,

    1. 启动节点时,需启动:

      roslaunch ros_ht_msg ros_ht_start.launch
      

      当编写其余命令发布节点后,可以将节点添加在launch文件中,在启动launch文件时一次全部启动;

  • 示例:

    1. examples文件夹中包含多个测试样例:

      • example_1:实验一:同一指令间隔 1s 以上发送两次;
      • example_2:实验二:同一指令间隔 50ms,发送两次;
      • example_3:实验三:第一指令发送后间隔 50ms,发送相反指令;
      • example_4:将三个实验整合在一个测试文件中;
    2. scripts文件夹中保存目前编写的两个简单机器人运行demo:

      分别使用了四轮四转底盘的两种运动方式

      • 实验一:前进 20s 后,左平移 2s,后退 20s;
      • 实验二:前进 20s 后,原地旋转,继续前进20s;

3. 节点信息

节点名称:/publish_ht_msg

该节点接受到工控机发布的命令,转换为CAN帧转发给底盘电机,并收集地盘电机相关状态帧状态帧介绍,转换为设定好的信息展示;

订阅的话题:

  • /HT_Control
    • 消息类型:ros_ht_msg/ht_control;具体消息格式可参看功能包中msg文件夹下ht_control.msg文件。
    • 作用:接受工控机发布的运动指令
  • /HT_Drive_Motor
    • 消息类型:ros_ht_msg/ht_drive_motor;具体消息格式可参看功能包中msg文件夹下ht_drive_motor.msg文件。
    • 作用:接受驱动电机发布的运动状态信息,通过回调函数设置可以配合rostopic echo命令展示在屏幕上
  • /HT_Motion
    • 消息类型:ros_ht_msg/ht_motion;具体消息格式可参看功能包中msg文件夹下ht_motion.msg文件。
    • 作用:接受运动状态信息,通过回调函数设置可以配合rostopic echo命令展示在屏幕上
  • /HT_Steering_Motor
    • 消息类型:ros_ht_msg/ht_steering_motor;具体消息格式可参看功能包中msg文件夹下ht_steering_motor.msg文件。
    • 作用:接受转向电机转向电机介绍发布的状态信息,通过回调函数回调函数介绍设置可以配合rostopic echo命令展示在屏幕上
  • /HT_System
    • 消息类型:ros_ht_msg/ht_system;具体消息格式可参看功能包中msg文件夹下ht_system.msg文件。
    • 作用:接受底盘系统发布的状态信息,通过回调函数设置可以配合rostopic echo命令展示在屏幕上