C++ WEBOTS-将控制器数据写入外部CSV文件

C++ WEBOTS-将控制器数据写入外部CSV文件,c++,webots,C++,Webots,我从webots lidar.wbt获得了这段代码。我需要得到一些激光雷达数据,以绘制使用opengl的另一个项目 #include <webots/distance_sensor.h> #include <webots/lidar.h> #include <webots/motor.h> #include <webots/robot.h> #include <stdio.h> #define TIME_STEP 32 #defin

我从webots lidar.wbt获得了这段代码。我需要得到一些激光雷达数据,以绘制使用opengl的另一个项目

#include <webots/distance_sensor.h>
#include <webots/lidar.h>
#include <webots/motor.h>
#include <webots/robot.h>

#include <stdio.h>

#define TIME_STEP 32
#define LEFT 0
#define RIGHT 1

using namespace std;

int main(int argc, char **argv) {
  // iterator used to parse loops
  int i, k;

  // init Webots stuff
  wb_robot_init();

  // init camera
  WbDeviceTag lidar = wb_robot_get_device("lidar");
  wb_lidar_enable(lidar, TIME_STEP);
  wb_lidar_enable_point_cloud(lidar);

  // init distance sensors
  WbDeviceTag us[2];
  double us_values[2];
  us[LEFT] = wb_robot_get_device("us0");
  us[RIGHT] = wb_robot_get_device("us1");
  for (i = 0; i < 2; ++i)
    wb_distance_sensor_enable(us[i], TIME_STEP);

  // get a handler to the motors and set target position to infinity (speed control).
  WbDeviceTag left_motor = wb_robot_get_device("left wheel motor");
  WbDeviceTag right_motor = wb_robot_get_device("right wheel motor");
  wb_motor_set_position(left_motor, INFINITY);
  wb_motor_set_position(right_motor, INFINITY);
  wb_motor_set_velocity(left_motor, 0.0);
  wb_motor_set_velocity(right_motor, 0.0);

  // set empirical coefficients for collision avoidance
  double coefficients[2][2] = {{12.0, -6.0}, {-10.0, 8.0}};
  double base_speed = 6.0;



  // init speed values
  double speed[2];

  while (wb_robot_step(TIME_STEP) != -1) {
    // read sensors
    for (i = 0; i < 2; ++i)
      us_values[i] = wb_distance_sensor_get_value(us[i]);

    // compute speed
    for (i = 0; i < 2; ++i) {
      speed[i] = 0.0;
      for (k = 0; k < 2; ++k)
        speed[i] += us_values[k] * coefficients[i][k];
    }

    // set actuators
    wb_motor_set_velocity(left_motor, base_speed + speed[LEFT]);
    wb_motor_set_velocity(right_motor, base_speed + speed[RIGHT]);
  }

  wb_robot_cleanup();

  return 0;
}
#包括
#包括
#包括
#包括
#包括
#第32步定义时间
#定义左0
#定义权利1
使用名称空间std;
int main(int argc,字符**argv){
//用于分析循环的迭代器
int i,k;
//初始化Webots的东西
wb_robot_init();
//初始化照相机
WbDeviceTag激光雷达=wb_机器人_获取_设备(“激光雷达”);
wb_激光雷达启用(激光雷达,时间步长);
wb_激光雷达_启用点云(激光雷达);
//初始距离传感器
WbDeviceTag us[2];
双us_值[2];
us[左]=wb_机器人_获取_设备(“us0”);
us[右]=wb_robot_get_设备(“us1”);
对于(i=0;i<2;++i)
wb距离传感器启用(us[i],时间步长);
//让一个处理器连接电机,并将目标位置设置为无穷大(速度控制)。
WbDeviceTag left_电机=wb_robot_get_设备(“左轮电机”);
WbDeviceTag右_电机=wb_机器人获取设备(“右轮电机”);
wb_电机设置_位置(左_电机,无限大);
wb_电机设置_位置(右_电机,无限大);
wb_电机设置_速度(左电机,0.0);
wb_电机设置_速度(右电机,0.0);
//为避免碰撞设置经验系数
双系数[2][2]={{12.0,-6.0},{-10.0,8.0};
双基_速度=6.0;
//初始速度值
双速[2];
while(wb_机器人_步(时间步)!=-1){
//读取传感器
对于(i=0;i<2;++i)
us_值[i]=wb_距离_传感器_获取_值(us[i]);
//计算速度
对于(i=0;i<2;++i){
速度[i]=0.0;
对于(k=0;k<2;++k)
速度[i]+=us_值[k]*系数[i][k];
}
//设置执行器
wb_电机设置_速度(左电机,基本_速度+速度[左]);
wb_电机设置_速度(右电机,基本_速度+速度[右]);
}
wb_机器人_清理();
返回0;
}
数据应该存储在
us\u值[i]
中。因此,我需要将数组中的数据
us\u值[I]
转换为csv文件


我尝试了coutprintf,但没有给出任何输出。请提供解决方案。谢谢

您提供的代码中没有
printf
std::cout
。 如果您只是在寻找一种创建CSV文件的方法,那么下面是一个示例,介绍我如何使用
std::fstream
创建CSV文件,它与您使用
std::cout
的方式非常相似,只是有一点额外的开销

#include <fstream>

int main(int argc, char* argv[]) {
    //generate values to be stored in CSV
    constexpr size_t arraySize(100);
    double values[arraySize];
    for(int i = 0; i < arraySize; i++) {
        values[i] = 1.0 / (i + 1);
    }

    //actually store those values...
    std::fstream file;
    file.open("Output.csv", std::fstream::out);
    for(int i = 0; i < arraySize; i++) {
        file << values[i] << ", ";
    }
    file.close();

    return 0;
}
#包括
int main(int argc,char*argv[]){
//生成要存储在CSV中的值
constexpr size\u t arraySize(100);
双值[排列];
for(int i=0;i文件您提供的代码中没有
printf
std::cout
。 如果您只是在寻找一种创建CSV文件的方法,那么下面是一个示例,介绍我如何使用
std::fstream
创建CSV文件,它与您使用
std::cout
的方式非常相似,只是有一点额外的开销

#include <fstream>

int main(int argc, char* argv[]) {
    //generate values to be stored in CSV
    constexpr size_t arraySize(100);
    double values[arraySize];
    for(int i = 0; i < arraySize; i++) {
        values[i] = 1.0 / (i + 1);
    }

    //actually store those values...
    std::fstream file;
    file.open("Output.csv", std::fstream::out);
    for(int i = 0; i < arraySize; i++) {
        file << values[i] << ", ";
    }
    file.close();

    return 0;
}
#包括
int main(int argc,char*argv[]){
//生成要存储在CSV中的值
constexpr size\u t arraySize(100);
双值[排列];
for(int i=0;i文件您试图在何处打印
us\u值
?请显示您的实际尝试。我尝试使用
printf(“数据%f\n”,us\u值[I]);
以下
us\u值[I]=wb\u距离传感器获取值(us[I]);
但是控制台没有显示任何内容请编辑您的问题以更新。更好的问题是:如何用C创建CSV文件。我相信有很多关于这方面的资源。您尝试在哪里打印
us\u值的值
?请显示您的实际尝试。我尝试使用
printf(“数据%f\n”),us_values[i]);
下面的
us_values[i]=wb_distance_sensor_get_value(us[i]);
但是控制台没有显示任何内容请编辑您的问题以更新。更好的问题是:如何用C创建CSV文件。我相信关于这方面有很多资源。