qbo 点云数据(距离)的获取

CSrf10Controller 控制器中,创建了CDistanceSensor对象。

在CSrf10Controller::timerCallback回调函数中

srf10 sensor    new CDistanceSensor

首先调用device_p_->getDistanceSensors(updatedDistances);//先从物理传感器读取到真实的距离信息

然后遍历 (*it).second->publish((float)updatedDistances[(*it).first], now);//调用CDistanceSensor的publish函数,将距离信息sensor_msgs::PointCloud通过topic发布出去。

举例信息作为cloud_.point[0].x传递出去。

adc value new CDistanceSensor (若传感器为gp2d12,gp2d120或GP2Y0A21YK时使用)

首先调用device_p_->getAdcReads获取采样值

然后依次发布adc值。同样调用的是CDistanceSensor的publish,以PointCloud消息发布出去。

以下参考传感器消息的定义:

std::map<uint8_t, CDistanceSensor *> srf10Sensors_;

std::map<uint8_t, uint8_t >srf10SensorsUpdateGRoup_; 用以管理srf10Sensors_,用作key.

std::map<uint8_t, CDistance *> adcSensors_;

std::vector<uint8_t> adcSensorsAddresses_; 用以管理adcSensors_,用作key.

共三个传感器:front,back,floor.具体类型,根据参数表来配置。代码中仅给出通用的处理办法。

下面再来分析,最重要的驱动函数接口;

int CQboduinoDriver::getDistanceSensors(std::map<uint8_t,unsigned short>& sensorsDistances)//参数类型按接口约定同为map
{
    dataUnion d;
    std::vector<dataUnion> data,sent;
    sensorsDistances.clear();
    
    CComando comand=comandosSet_.distanceSensors;   //命令集中有获取距离信息的命令结构体,提前按命令协议约定填充好。
    int code=lockAndSendComand("base",comand,data,sent);   //sent作为入参,并没有初始化。data作为出参。
    if (code<0) return code;
    for (unsigned int i=0;i<data.size()/2;i++)
    {
      sensorsDistances[data[2*i].b]=data[2*i+1].h;//依据key填充map的value.注意这里的data.  看起来偶数为索引,奇数为值。
    }
    return code;
}


再来看adc value的获取

int CQboduinoDriver::getAdcReads(std::vector<uint8_t> addreses, std::vector<unsigned int>& readedValues)
{
    dataUnion d;
    std::vector<dataUnion> recived,sent;
    readedValues.clear();
    if(addreses.size()==0)
      return 1;
    for(int i=0;i<addreses.size();i++)
    {
      d.b=addreses[i];
      sent.push_back(d);  //首先依次填充addresses向量
    }
    
    CComando comand=comandosSet_.adcReads;
    int code=lockAndSendComand("base",comand,recived,sent);//这里用到了sent向量作为入参,received作为出参传递。
    if (code<0) return code;
    for (unsigned int i=0;i<recived.size();i++)
    {
      readedValues.push_back(recived[i].h);//返回值填充readedValues向量
    }
    return code;
 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值