ROS自主导航机器人

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

2020-03-11  本文已影响0人  PIBOT导航机器人

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

下位机

1.读取数据命令

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

//消息id定义
enum MESSAGE_ID
{
    ....
    ID_GET_IMU_DATA = 7,            // 获取imu值
    ID_MESSGAE_MAX
};
    //更新接收到的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. 执行动作

    frame->register_notify(ID_CLEAR_ODOM, this);
  ...
    case ID_CLEAR_ODOM:   // 清除里程计信息
        clear_odom();
        break;
  ...
上一篇下一篇

猜你喜欢

热点阅读