ubuntu16.04安装激光雷达ce30d ROS驱动以及调用的教程

第一步:先去官网下载ros驱动包
第二步:将ros驱动包里得ce30_driver-master进行编译,过程:

cd ce30_driver-master
mkdir build 
cd build
cmake ..
make
sudo make install

第三步:将ros驱动包里得ce30_driver_ros-master放在ROS里的工作空间下,进行编译

catkin_make

这样驱动已经安装完成。
如何运作还需进行进一步得实验!
补充:如果是利用ROS,则在接上雷达后直接运行ros节点即可
如果是linux,则直接运行ce30_demo即可,
调用教程:
第一个:调用点云教程

#include //C++输入输出头文件
#include //ce30调用都需要的头文件,包括ce30的所有驱动

using namespace std;
using namespace ce30_driver;

void DataReceiveCB(shared_ptr<PointCloud> cloud) {
  for (Point& point : cloud->points) {
    cout << point.x << " " << point.y << " " << point.z << endl;
  }
}//输出点云子函数

int main() {
  UDPServer server;//先实例化一个UDPServer类
  server.RegisterCallback(DataReceiveCB);//注册数据接收器功能。 每当扫描点云数据准备就绪时,就会调用接收器函数。
  if (!server.Start()) {//boll函数,返回的是0,1//若是启动线程函数,则值为1//实质为判断传感器是否启动
    return -1;
  }
  while (true) {
   	server.SpinOnce();//,当点云准备就绪是,在spinonce中调用此函数将雷达传过来的数据放入cloud中
  }
}

第二个:控制激光雷达教程

#include 
#include 

using namespace std;
using namespace ce30_driver;

int main() {
  UDPSocket socket;//实例化一个“ UDPSocket”对象
  if (!Connect(socket)) {
    return -1;//,然后创建与设备的连接,连接失败返回-1
  }
  VersionRequestPacket version_request;//实例化一个请求数据类
  if (!SendPacket(version_request, socket)) {
    return -1;//发送请求数据包以获取设备版本,并立即收听响应
  }
  VersionResponsePacket version_response;//实例化一个接受响应类
  if (!GetPacket(version_response, socket)) {
    return -1;//获得设备版本时,表明我们能够与该设备进行交互
  }
  cout << "CE30-D Version: " << version_response.GetVersionString() << endl;//输出版本号
  /* 到目前为止,激光雷达还没有开始工作
  /*下面发送开始命令使其开始工作*/
  StartRequestPacket start_request;//实例化一个开始请求的类
  if (!SendPacket(start_request, socket)) {
    return -1;//过发送`StartRequestPacket`来让其正常工作
  }
  // Now it's ready to receive measurement data
  /*以下为接受测量的数据包的代码块*/
  Packet packet;
  while (true) {
    if (!GetPacket(packet, socket)) {
      continue;
    }
    unique_ptr<ParsedPacket> parsed = packet.Parse();//对接收到的数据包进行解析
    if (parsed) {
      for (Column& column : parsed->columns) {
        for (Channel& channel : column.channels) {
          // Print "(distance, amplitude) [x, y, z]"
          cout << 
              "(" << channel.distance << ", " << channel.amplitude << ") "
              "[" << 
                  channel.point().x << ", " << 
                  channel.point().y << ", " << 
                  channel.point().z << "]" << endl;
        }//输出该幅图像的距离,幅度,坐标
      }
    }
  }
  /*上面具体的写法见下一个教程*/
  StopRequestPacket stop_request;//希望CE30-D停止测量,发送一个“ StopRequestPacket”
  SendPacket(stop_request, socket);
}

第三个教程:处理接收到的数据信息(承接上一个教程的接受测量数据方法)

#include 
#include 

using namespace std;
using namespace ce30_driver;

int main() {
  ... ...
  // Now it's ready to receive measurement data
  Packet packet;
  Scan scan;//实例化一个完整的数据类
  while (true) {
    if (!GetPacket(packet, socket)) {
      continue;
    }//得到数据包
    unique_ptr<ParsedPacket> parsed = packet.Parse();//对接收到的数据进行解析
    if (parsed) {
      scan.AddColumnsFromPacket(*parsed);//讲数据包的信息传入SCAN类中
      if (!scan.Ready()) {
        continue;
      }
      for (int x = 0; x < scan.Width(); ++x) {
        for (int y = 0; y < scan.Height(); ++y) {
          Channel channel = scan.at(x, y);
          cout << 
              "(" << channel.distance << ", " << channel.amplitude << ") "
              "[" << 
                  channel.point().x << ", " << 
                  channel.point().y << ", " << 
                  channel.point().z << "]" << endl;
        }
      }//输出所有通道的距离,幅度,以及点坐标
      scan.Reset();
    }
  }
  ... ...
}

补充:关于激光雷达结构的一些信息:
CE30-D具有一个3D-ToF成像器芯片,带有320 * 20个感光单元。 每个单元都可以通过距离和幅度来射线追踪对象。 同样,每个单元所感测到的射线都有方向。 我们通过水平方位角和垂直方位角分解方向。 为简单起见,我们将水平方位角称为“方位角”,而垂直方位角仍保留其自己的名称。 给定水平方位角,垂直方位角和距离,我们能够计算出指示物体存在的3D点。 我们将距离,幅度和3D点捆绑在一起,并为此集合命名:通道。 对于由具有相同垂直对齐方式的单元所测量的通道的集合,我们称为“列”。 根据前面的上下文,我们知道一列包含20个通道。 然后将320列的集合称为“扫描”。 下图显示了扫描的所有通道的索引组织。

Channel [0, 0] Channel [1, 0] Channel [318, 0] Channel [319, 0]
Channel [0, 1] Channel [1, 1] Channel [318, 1] Channel [319, 1]
Channel [0, 18] Channel [1, 18] Channel [318, 18] Channel [319, 18]
Channel [0, 19] Channel [1, 19] Channel [319, 19] Channel [319, 19]

你可能感兴趣的:(ubuntu16.04安装激光雷达ce30d ROS驱动以及调用的教程)