美文网首页ROS自主导航机器人
ROS机器人底盘(40)-通讯协议的补充

ROS机器人底盘(40)-通讯协议的补充

作者: PIBOT导航机器人 | 来源:发表于2020-03-11 23:24 被阅读0次

    前文ROS机器人底盘(3)-通讯协议说明了PIBOT机器人小车使用的通讯协议的定义,本文介绍下如何添加新的命令
    协议通过一个字节的msg id区分消息类型,其中各个消息大概可以分为三类

    • 读取数据
      如读取版本,读取odom
    • 设置数据
      如设置参数
    • 执行动作
      如控制速度,控制电机等

    下位机

    1.读取数据命令

    例如需要新增一条获取imu的命令,涉及到哪些修改呢?

    • dataframe.h新增命令id
    //消息id定义
    enum MESSAGE_ID
    {
        ....
        ID_GET_IMU_DATA = 7,            // 获取imu值
        ID_MESSGAE_MAX
    };
    
    • simple_dataframe_slave.cpp,新增对该命令的处理
        //更新接收到的id执行响应操作,一般分为读取,写入,和执行动作3个操作
        switch (id) {
        ...
    case ID_GET_IMU_DATA://获取imu数据
            send_message(id, (unsigned char*)&dh->imu_data, sizeof(dh->imu_data));
            break;
        default:
            break;
        }
    

    这里&dh->imu_data为数据存储的地址

    只需步即可以完成一个数据的获取实现

    2. 写入数据(设置)

    写入跟读取类似,只是第二步有所区别

        case ID_SET_VELOCITY: //设置数据
            memcpy(&dh->velocity, active_rx_msg.data, sizeof(dh->velocity));
            send_message(id);
            break;
    

    active_rx_msg.data就是发送来的数据,我们把他保存到我们希望存储的变量即可

    3. 执行动作

    • 同上添加id
    • robot.cppinit_trans函数添加对该id的接收关注
        frame->register_notify(ID_CLEAR_ODOM, this);
    
    • robot.cppupdate回调函数处理
      ...
        case ID_CLEAR_ODOM:   // 清除里程计信息
            clear_odom();
            break;
      ...
    

    相关文章

      网友评论

        本文标题:ROS机器人底盘(40)-通讯协议的补充

        本文链接:https://www.haomeiwen.com/subject/joyfkhtx.html