  DWAPlannerROS::DWAPlannerROS() : initialized_(false),
      odom_helper_("odom"), setup_(false) {
  }
  void DWAPlannerROS::initialize(
      std::string name,
      tf2_ros::Buffer* tf,
      costmap_2d::Costmap2DROS* costmap_ros) {
    if (! isInitialized()) {
      ros::NodeHandle private_nh("~/" + name);
      g_plan_pub_ = private_nh.advertise<nav_msgs::Path>("global_plan", 1);
      l_plan_pub_ = private_nh.advertise<nav_msgs::Path>("local_plan", 1);
      tf_ = tf;
      costmap_ros_ = costmap_ros;
      costmap_ros_->getRobotPose(current_pose_);
      // make sure to update the costmap we'll use for this cycle
      costmap_2d::Costmap2D* costmap = costmap_ros_->getCostmap();
      planner_util_.initialize(tf, costmap, costmap_ros_->getGlobalFrameID());
      //create the actual planner that we'll use.. it'll configure itself from the parameter server
      dp_ = boost::shared_ptr<DWAPlanner>(new DWAPlanner(name, &planner_util_));
      if( private_nh.getParam( "odom_topic", odom_topic_ ))
      {
        odom_helper_.setOdomTopic( odom_topic_ );
      }

      initialized_ = true;
      // Warn about deprecated parameters -- remove this block in N-turtle
      nav_core::warnRenamedParameter(private_nh, "max_vel_trans", "max_trans_vel");
      nav_core::warnRenamedParameter(private_nh, "min_vel_trans", "min_trans_vel");
      nav_core::warnRenamedParameter(private_nh, "max_vel_theta", "max_rot_vel");
      nav_core::warnRenamedParameter(private_nh, "min_vel_theta", "min_rot_vel");
      nav_core::warnRenamedParameter(private_nh, "acc_lim_trans", "acc_limit_trans");
      nav_core::warnRenamedParameter(private_nh, "theta_stopped_vel", "rot_stopped_vel");
      dsrv_ = new dynamic_reconfigure::Server<DWAPlannerConfig>(private_nh);
      dynamic_reconfigure::Server<DWAPlannerConfig>::CallbackType cb = [this](auto& config, auto level){ reconfigureCB(config, level); };
      dsrv_->setCallback(cb);
    }
    else{
      ROS_WARN("This planner has already been initialized, doing nothing.");
    }
  }


    /**
    * @brief  This method used for configuring the accelerometer full scale range.
    * Check accel_full_scale_range_t for available scales.
    * @param  accelScale Accelerometer scale value to be set
    * @retval i2c_status_t
    */
    i2c_status_t SetAccelFullScale(Accel_FS_t accelScale);


  // Update left side of sonar cone
  mx = ox + cos(theta - max_angle_) * d * 1.2;
  my = oy + sin(theta - max_angle_) * d * 1.2;
  worldToMapNoBounds(mx, my, Ax, Ay);
  bx0 = std::min(bx0, Ax);
  bx1 = std::max(bx1, Ax);
  by0 = std::min(by0, Ay);
  by1 = std::max(by1, Ay);
  touch(mx, my, &min_x_, &min_y_, &max_x_, &max_y_);


We can combine our knowledge in projecting into cartesian coordinates and
destaggering using the following function:


  dsrv_ = new dynamic_reconfigure::Server<range_sensor_layer::RangeSensorLayerConfig>(nh);
  dynamic_reconfigure::Server<range_sensor_layer::RangeSensorLayerConfig>::CallbackType cb =
    boost::bind(&RangeSensorLayer::reconfigureCB, this, _1, _2);
  dsrv_->setCallback(cb);
  global_frame_ = layered_costmap_->getGlobalFrameID();
}


To run this example:


  boost::to_upper(sensor_type_name);
  ROS_INFO("%s: %s as input_sensor_type given", name_.c_str(), sensor_type_name.c_str());


tf_->transform(in, out, global_frame_);


    auto lut_extrinsics = make_xyz_lut(
        w, h, sensor::range_unit, info.beam_to_lidar_transform, transformation,
        info.beam_azimuth_angles, info.beam_altitude_angles);

    std::cerr << "Calculating 3d Points of with special transform provided.."
              << std::endl;
    auto cloud_adjusted = cartesian(range, lut_extrinsics);


void RangeSensorLayer::processFixedRangeMsg(sensor_msgs::Range& range_message)
{
  if (!std::isinf(range_message.range))
  {
    ROS_ERROR_THROTTLE(1.0,
                       "Fixed distance ranger (min_range == max_range) in frame %s sent invalid value. "
                       "Only -Inf (== object detected) and Inf (== no object detected) are valid.",
                       range_message.header.frame_id.c_str());
    return;
  }


        // Barycentric coordinates inside area threshold; this is not mathematically sound at all, but it works!
        float bcciath = -inflate_cone_ * area(Ax, Ay, Bx, By, Ox, Oy);
        update_xy_cell = w0 >= bcciath && w1 >= bcciath && w2 >= bcciath;
      }


If there are no errors, you should see a printout in five parts.


    /**
    * @brief This function gets the current sensor digital low pass filter configuration.
    * @param error Result of the operation
    * @retval dlpf_config_t
    */
    DLPF_t GetSensor_DLPF_Config(i2c_status_t* error);


  // calculate target props
  double dx = tx - ox, dy = ty - oy, theta = atan2(dy, dx), d = sqrt(dx * dx + dy * dy);


  buffered_readings_ = 0;
  current_ = true;
}


    /**
    * @brief  This method used for getting the gyroscope Y axis offset value.
    * @param error Result of the operation
    * @retval int16_t
    */
    int16_t GetGyro_Y_Offset(i2c_status_t* error);


Command Line Utility Guide


   updateCostmap(range_message, clear_sensor_cone);
 }

 void RangeSensorLayer::processVariableRangeMsg(sensor_msgs::Range& range_message)
 {
   if (range_message.range < range_message.min_range || range_message.range > range_message.max_range)
     return;

   bool clear_sensor_cone = false;

   if (range_message.range == range_message.max_range && clear_on_max_reading_)
     clear_sensor_cone = true;

   updateCostmap(range_message, clear_sensor_cone);
 }

 void RangeSensorLayer::updateCostmap(sensor_msgs::Range& range_message, bool clear_sensor_cone)
 {
   max_angle_ = range_message.field_of_view / 2;

   geometry_msgs::PointStamped in, out;
   in.header.stamp = range_message.header.stamp;
   in.header.frame_id = range_message.header.frame_id;

   if (!tf_->canTransform(global_frame_, in.header.frame_id, in.header.stamp, ros::Duration(transform_tolerance_)))
   {
     ROS_ERROR_THROTTLE(1.0, "Range sensor layer can't transform from %s to %s at %f",
                        global_frame_.c_str(), in.header.frame_id.c_str(),
                        in.header.stamp.toSec());
     return;
   }

   tf_->transform(in, out, global_frame_);

   double ox = out.point.x, oy = out.point.y;

   in.point.x = range_message.range;

   tf_->transform(in, out, global_frame_);


double delta = resolution_;


unsigned char old_cost = master_array[it];


void RangeSensorLayer::reconfigureCB(range_sensor_layer::RangeSensorLayerConfig &config, uint32_t level)
{
  phi_v_ = config.phi;
  inflate_cone_ = config.inflate_cone;
  no_readings_timeout_ = config.no_readings_timeout;
  clear_threshold_ = config.clear_threshold;
  mark_threshold_ = config.mark_threshold;
  clear_on_max_reading_ = config.clear_on_max_reading;


  if (topic_names.size() < 1)
  {
    // This could be an error, but I keep it as it can be useful for debug
    ROS_WARN("Empty topic names list: range sensor layer will have no effect on costmap");
  }


  worldToMapNoBounds(mx, my, Bx, By);
  bx0 = std::min(bx0, Bx);
  bx1 = std::max(bx1, Bx);
  by0 = std::min(by0, By);
  by1 = std::max(by1, By);
  touch(mx, my, &min_x_, &min_y_, &max_x_, &max_y_);


The source code of ` representations_example  ` is available [ on the github
](https://github.com/ouster-
lidar/ouster_example/blob/master/examples/representations_example.cpp) .


    /**
    * @brief This function gets the sensor FIFO enable bit in USER_CTRL register.
    * @param error Result of the operation
    * @retval bool True if FIFO enabled
    */
    bool GetSensor_FIFO_Enable(i2c_status_t* error);


Here we will cover slightly more sophisticated ways of working with the data
also demonstrated in that example.


void RangeSensorLayer::resetRange()
{
  min_x_ = min_y_ =  std::numeric_limits<double>::max();
  max_x_ = max_y_ = -std::numeric_limits<double>::max();
}


  /* Accelerometer full scale ranges in G's */
  enum class Accel_FS_t
  {
    FS_2G = 0,
    FS_4G = 1,
    FS_8G = 2,
    FS_16G = 3
  };


  * [ Overview ](../cli/overview.html)
  * [ Getting Started ](../cli/getting-started.html)
  * [ Sample Sessions ](../cli/sample-sessions.html)
  * [ Common Use Cases ](../cli/common-use-cases.html)
  * [ Mapping Sessions ](../cli/mapping-sessions.html)


    /**
    * @brief  This method used for getting the gyroscope Z axis offset value.
    * @param error Result of the operation
    * @retval int16_t
    */
    int16_t GetGyro_Z_Offset(i2c_status_t* error);


    /**
    * @brief  This method used for getting the latest temperature value from the sensor.
    * scale range is set to desired range, before reading the values.
    * @param  error Error state of process
    * @retval float Temperature in celcius-degrees
    */
    float GetTemperature_Celcius(i2c_status_t* error);


         mapToWorld(x, y, wx, wy);
         update_cell(ox, oy, theta, range_message.range, wx, wy, clear_sensor_cone);
       }
     }
   }

   buffered_readings_++;
   last_reading_time_ = ros::Time::now();
   if (use_decay_)
     removeOutdatedReadings();
 }

 void RangeSensorLayer::removeOutdatedReadings()
 {
   std::map<std::pair<unsigned int, unsigned int>, double>::iterator it_map;

   double removal_time = last_reading_time_.toSec() - pixel_decay_;
   for (it_map = marked_point_history_.begin() ; it_map != marked_point_history_.end() ; it_map++ )
   {
     if (it_map->second < removal_time)
     {
       marked_point_history_.erase(it_map);
       setCost(std::get<0>(it_map->first), std::get<1>(it_map->first), costmap_2d::FREE_SPACE);
     }
   }
 }

 void RangeSensorLayer::update_cell(double ox, double oy, double ot, double r, double nx, double ny, bool clear)
 {
   unsigned int x, y;
   if (worldToMap(nx, ny, x, y))
   {
     double dx = nx - ox, dy = ny - oy;
     double theta = atan2(dy, dx) - ot;
     theta = angles::normalize_angle(theta);
     double phi = sqrt(dx * dx + dy * dy);
     double sensor = 0.0;
     if (!clear)
       sensor = sensor_model(r, phi, theta);
     double prior = to_prob(getCost(x, y));


bool clear_sensor_cone = false;


  class MPU6050
  {
  public:


In the second step, we create a new config:


    /**
    * @brief This function gets the INT_ENABLE register value.
    * @param error Result of the operation
    * @retval uint8_t Enabled/Disabled sensor interrupts. Use Regbits_INT_ENABLE namespace as bitmask to check enabled interrupts.
    */
    uint8_t GetSensor_InterruptEnable(i2c_status_t* error);


double mx, my;


      if (old_cost == NO_INFORMATION || old_cost < current)
        master_array[it] = current;
      it++;
    }
  }


The core destaggering and projection to 3D capabilities are demonstrated in
the ` representations_example  ` executable.


    /**
    * @brief  This method used for setting the gyroscope Z axis offset value. Offset is
    * using in the sensor calibration routine.
    * @param offset
    * @retval i2c_status_t
    */
    i2c_status_t SetGyro_Z_Offset(int16_t offset);


  namespace Regbits_USER_CTRL {
    SensorConst BIT_SIG_CONF_RESET = BIT_0;
    SensorConst BIT_I2C_MST_RESET = BIT_1;
    SensorConst BIT_FIFO_RESET = BIT_2;
    SensorConst BIT_I2C_IF_DIS = BIT_4;
    SensorConst BIT_I2C_MST_EN = BIT_5;
    SensorConst BIT_FIFO_EN = BIT_6;
  }


    setCost(x, y, c);
    if (use_decay_)
    {
      std::pair<unsigned int, unsigned int> coordinate_pair(x, y);
      // If the point has a score high enough to be marked in the costmap, we add it's time to the marked_point_history
      if (c > to_cost(mark_threshold_))
        marked_point_history_[coordinate_pair] = last_reading_time_.toSec();
      // If the point score is not high enough, we try to find it in the mark history point.
      // In the case we find it in the marked_point_history
      // we clear it from the map so we won't checked already cleared point
      else if (c < to_cost(clear_threshold_))
      {
        std::map<std::pair<unsigned int, unsigned int>, double>::iterator it_clear;
        it_clear = marked_point_history_.find(coordinate_pair);
        if (it_clear != marked_point_history_.end())
          marked_point_history_.erase(it_clear);
      }
    }
  }
}


 void RangeSensorLayer::deactivate()
 {
   range_msgs_buffer_.clear();
 }

 void RangeSensorLayer::activate()
 {
   range_msgs_buffer_.clear();
 }

 }  // namespace range_sensor_layer


   updateCostmap();

   *min_x = std::min(*min_x, min_x_);
   *min_y = std::min(*min_y, min_y_);
   *max_x = std::max(*max_x, max_x_);
   *max_y = std::max(*max_y, max_y_);

   resetRange();

   if (!enabled_)
   {
     current_ = true;
     return;
   }

   if (buffered_readings_ == 0)
   {
     if (no_readings_timeout_ > 0.0 &&
         (ros::Time::now() - last_reading_time_).toSec() > no_readings_timeout_)
     {
       ROS_WARN_THROTTLE(2.0, "No range readings received for %.2f seconds, " \
                         "while expected at least every %.2f seconds.",
                         (ros::Time::now() - last_reading_time_).toSec(), no_readings_timeout_);
       current_ = false;
     }
   }
 }

 void RangeSensorLayer::updateCosts(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j)
 {
   if (!enabled_)
     return;

   unsigned char* master_array = master_grid.getCharMap();
   unsigned int span = master_grid.getSizeInCellsX();
   unsigned char clear = to_cost(clear_threshold_), mark = to_cost(mark_threshold_);

   for (int j = min_j; j < max_j; j++)
   {


namespace range_sensor_layer
{


    /**
    * @brief This function gets the gyroscope sample rate divider.
    *        Actual sample rate = Gyroscope Output Rate / (1 + sampleRate)
    *        Keep in mind that Gyroscope Output Rate = 8kHz when the DLPF (digital low pass filter) is disabled
    *        (DLPF_CFG = 0 or 7), and 1kHz when the DLPF is enabled. Accel sample rate is constantly 1 kHz.
    * @param error Result of the operation
    * @retval uint8_t
    */
    uint8_t GetGyro_SampleRateDivider(i2c_status_t* error);


void RangeSensorLayer::get_deltas(double angle, double *dx, double *dy)
{
  double ta = tan(angle);
  if (ta == 0)
    *dx = 0;
  else
    *dx = resolution_ / ta;


      std::vector<geometry_msgs::PoseStamped> transformed_plan;
      publishGlobalPlan(transformed_plan);
      publishLocalPlan(local_plan);
      base_local_planner::LocalPlannerLimits limits = planner_util_.getCurrentLimits();
      return latchedStopRotateController_.computeVelocityCommandsStopRotate(
          cmd_vel,
          limits.getAccLimits(),
          dp_->getSimPeriod(),
          &planner_util_,
          odom_helper_,
          current_pose_,
          [this](auto pos, auto vel, auto vel_samples){ return dp_->checkTrajectory(pos, vel, vel_samples); });
    } else {
      bool isOk = dwaComputeVelocityCommands(current_pose_, cmd_vel);
      if (isOk) {
        publishGlobalPlan(transformed_plan);
      } else {
        ROS_WARN_NAMED("dwa_local_planner", "DWA planner failed to produce path.");
        std::vector<geometry_msgs::PoseStamped> empty_plan;
        publishGlobalPlan(empty_plan);
      }
      return isOk;
    }
  }
};


  // Integer Bounds of Update
  int bx0, by0, bx1, by1;


  if (range_message.range == range_message.max_range && clear_on_max_reading_)
    clear_sensor_cone = true;


bool clear_sensor_cone = false;


  namespace Sensor_Regs {
    SensorConst USER_CTRL = 0x6A;
    SensorConst PWR_MGMT_1 = 0x6B;
    SensorConst GYRO_CONFIG = 0x1B;
    SensorConst ACCEL_CONFIG = 0x1C;
    SensorConst INT_ENABLE = 0x38;
    SensorConst INT_PIN_CFG = 0x37;
    SensorConst INT_STATUS = 0x3A;


  buffered_readings_++;
  last_reading_time_ = ros::Time::now();
  if (use_decay_)
    removeOutdatedReadings();
}


  // Traverse the topic names list subscribing to all of them with the same callback method
  for (int i = 0; i < topic_names.size(); i++)
  {
    if (topic_names[i].getType() != XmlRpc::XmlRpcValue::TypeString)
    {
      ROS_WARN("Invalid topic names list: element %d is not a string, so it will be ignored", i);
    }
    else
    {
      std::string topic_name(topics_ns);
      if ((topic_name.size() > 0) && (topic_name.at(topic_name.size() - 1) != '/'))
        topic_name += "/";
      topic_name += static_cast<std::string>(topic_names[i]);


double ox = out.point.x, oy = out.point.y;


  /* Define default MPU6050 address as 0x68 (AD0 pin low) */
  #if AD0
  #define MPU6050_ADDRESS MPU6050_ADDRESS_AD0
  #else
  #define MPU6050_ADDRESS MPU6050_ADDRESS_AD1
  #endif


double RangeSensorLayer::delta(double phi)
{
  return 1 - (1 + tanh(2 * (phi - phi_v_))) / 2;
}


    /**
    * @brief  This method used for getting the latest accelerometer Z axis RAW value from
    * the sensor. Make sure that sensor is not in sleeping mode and accelerometer full
    * scale range is set to desired range, before reading the values.
    * @param  error Error state of process
    * @retval int16_t Z axis RAW acceleration value
    */
    int16_t GetAccel_Z_Raw(i2c_status_t* error);


  /* define sensor register type here to write it easily */
  #define SensorConst static constexpr uint8_t
  /* bit masks */
  #define BIT_0 (1 << 0)
  #define BIT_1 (1 << 1)
  #define BIT_2 (1 << 2)
  #define BIT_3 (1 << 3)
  #define BIT_4 (1 << 4)
  #define BIT_5 (1 << 5)
  #define BIT_6 (1 << 6)
  #define BIT_7 (1 << 7)


range_message.range = range_message.min_range;


  /* TODO: Make a setter for device address. Use enum for 2 possible sensor address! */
  #define AD0 1


    /**
    * @brief This function gets the sensor FIFO configuration. Use Regbits_FIFO_EN as bitmask to check which
    *        samples enabled in the FIFO reading.
    * @param error Result of the operation
    * @retval uint8_t Sensor fifo configuration value, use Regbits_FIFO_EN to check fifo config.
    */
    uint8_t GetSensor_FIFO_Config(i2c_status_t* error);


     double prob_occ = sensor * prior;
     double prob_not = (1 - sensor) * (1 - prior);
     double new_prob = prob_occ / (prob_occ + prob_not);

     ROS_DEBUG("%f %f | %f %f = %f", dx, dy, theta, phi, sensor);
     ROS_DEBUG("%f | %f %f | %f", prior, prob_occ, prob_not, new_prob);
     unsigned char c = to_cost(new_prob);

     setCost(x, y, c);
     if (use_decay_)
     {
       std::pair<unsigned int, unsigned int> coordinate_pair(x, y);
       // If the point has a score high enough to be marked in the costmap, we add it's time to the marked_point_history
       if (c > to_cost(mark_threshold_))
         marked_point_history_[coordinate_pair] = last_reading_time_.toSec();
       // If the point score is not high enough, we try to find it in the mark history point.
       // In the case we find it in the marked_point_history
       // we clear it from the map so we won't checked already cleared point
       else if (c < to_cost(clear_threshold_))
       {
         std::map<std::pair<unsigned int, unsigned int>, double>::iterator it_clear;
         it_clear = marked_point_history_.find(coordinate_pair);
         if (it_clear != marked_point_history_.end())
           marked_point_history_.erase(it_clear);
       }
     }
   }
 }

 void RangeSensorLayer::resetRange()
 {
   min_x_ = min_y_ =  std::numeric_limits<double>::max();
   max_x_ = max_y_ = -std::numeric_limits<double>::max();
 }

 void RangeSensorLayer::updateBounds(double robot_x, double robot_y, double robot_yaw,
                                     double* min_x, double* min_y, double* max_x, double* max_y)
 {
   if (layered_costmap_->isRolling())
     updateOrigin(robot_x - getSizeInMetersX() / 2, robot_y - getSizeInMetersY() / 2);


     unsigned int it = j * span + min_i;
     for (int i = min_i; i < max_i; i++)
     {
       unsigned char prob = costmap_[it];
       unsigned char current;
       if (prob == costmap_2d::NO_INFORMATION)
       {
         it++;
         continue;
       }
       else if (prob > mark)
         current = costmap_2d::LETHAL_OBSTACLE;
       else if (prob < clear)
         current = costmap_2d::FREE_SPACE;
       else
       {
         it++;
         continue;
       }

       unsigned char old_cost = master_array[it];

       if (old_cost == NO_INFORMATION || old_cost < current)
         master_array[it] = current;
       it++;
     }
   }

   buffered_readings_ = 0;
   current_ = true;
 }

 void RangeSensorLayer::reset()
 {
   ROS_DEBUG("Reseting range sensor layer...");
   deactivate();
   resetMaps();
   current_ = true;
   activate();
 }


  * [ Developer Quick Start ](../python/quickstart.html)
  * [ Examples ](../python/examples/index.html)
  * [ SLAM Quickstart ](../python/slam-api-example.html)
  * [ Point Cloud Visualizer ](../python/viz/index.html)
  * [ Developing ](../python/devel.html)


    /**
    * @brief  This method used for getting the latest gyroscope Y axis RAW value from
    * the sensor. Make sure that sensor is not in sleeping mode and gyroscope full
    * scale range is set to desired range before reading the values.
    * @param  error Error state of process
    * @retval int16_t Y axis RAW gyroscope value
    */
    int16_t GetGyro_Y_Raw(i2c_status_t* error);


    /**
    * @brief  Class constructor. In order to make the class communicate with sensor
    * user should pass a valid I2C_Interface class instance!
    * @param  comInterface I2C interface pointer
    * @retval none
    */
    MPU6050(I2C_Interface* comInterface);


Letâs look at the first step, where we get the configuration of the sensor
as it starts:


range_subs_.push_back(nh.subscribe(topic_name, 100, &RangeSensorLayer::bufferIncomingRangeMsg, this));


  for (std::list<sensor_msgs::Range>::iterator range_msgs_it = range_msgs_buffer_copy.begin();
       range_msgs_it != range_msgs_buffer_copy.end(); range_msgs_it++)
  {
    processRangeMessageFunc_(*range_msgs_it);
  }
}


   {
     // This could be an error, but I keep it as it can be useful for debug
     ROS_WARN("Empty topic names list: range sensor layer will have no effect on costmap");
   }

   // Traverse the topic names list subscribing to all of them with the same callback method
   for (int i = 0; i < topic_names.size(); i++)
   {
     if (topic_names[i].getType() != XmlRpc::XmlRpcValue::TypeString)
     {
       ROS_WARN("Invalid topic names list: element %d is not a string, so it will be ignored", i);
     }
     else
     {
       std::string topic_name(topics_ns);
       if ((topic_name.size() > 0) && (topic_name.at(topic_name.size() - 1) != '/'))
         topic_name += "/";
       topic_name += static_cast<std::string>(topic_names[i]);

       if (input_sensor_type == VARIABLE)
         processRangeMessageFunc_ = boost::bind(&RangeSensorLayer::processVariableRangeMsg, this, _1);
       else if (input_sensor_type == FIXED)
         processRangeMessageFunc_ = boost::bind(&RangeSensorLayer::processFixedRangeMsg, this, _1);
       else if (input_sensor_type == ALL)
         processRangeMessageFunc_ = boost::bind(&RangeSensorLayer::processRangeMsg, this, _1);
       else
       {
         ROS_ERROR(
           "%s: Invalid input sensor type: %s. Did you make a new type and forgot to choose the subscriber for it?",
           name_.c_str(), sensor_type_name.c_str());
       }

       range_subs_.push_back(nh.subscribe(topic_name, 100, &RangeSensorLayer::bufferIncomingRangeMsg, this));

       ROS_INFO("RangeSensorLayer: subscribed to topic %s", range_subs_.back().getTopic().c_str());
     }
   }

   dsrv_ = new dynamic_reconfigure::Server<range_sensor_layer::RangeSensorLayerConfig>(nh);
   dynamic_reconfigure::Server<range_sensor_layer::RangeSensorLayerConfig>::CallbackType cb =


    /**
    * @brief  This method used for getting the acceleromteter full scale range.
    * Check accel_full_scale_range_t for available scales. It basically reads the
    * Accel configuration register and returns the full scale range.
    * @param  error Result of the sensor reading process
    * @retval accel_full_scale_range_t
    */
    Accel_FS_t GetAccelFullScale(i2c_status_t* error);


double tx = out.point.x, ty = out.point.y;


    /**
    * @brief  This method used for configuring the gyroscope full scale range.
    * Check gyro_full_scale_range_t for available scales.
    * @param  gyroScale Gyroscope scale value to be set
    * @retval i2c_status_t
    */
    i2c_status_t SetGyroFullScale(Gyro_FS_t gyroScale);


  * [ Lidar Scan API ](../reference/lidar-scan.html)
  * [ Python API Reference ](../python/api/index.html)
  * [ C++ API Reference ](api.html)
  * [ Changelog ](../reference/changelog.html)


    SensorConst SMPRT_DIV = 0x19; // sample rate divider
    SensorConst CONFIG = 0x1A;    // digital low passand extra sync configutation
  };


    sensor::sensor_config config;
    config.azimuth_window = std::make_pair<int>(90000, 270000);
    config.ld_mode = sensor::lidar_mode::MODE_512x10;

    // If relevant, use config_flag to set udp dest automatically
    uint8_t config_flags = 0;
    const bool udp_dest_auto = true;  // whether or not to use auto destination
    const bool persist =
        false;  // whether or not we will persist the settings on the sensor

    if (udp_dest_auto) config_flags |= ouster::sensor::CONFIG_UDP_DEST_AUTO;
    if (persist) config_flags |= ouster::sensor::CONFIG_PERSIST;


Python Guide


    /**
    * @brief  This method used for setting the accelerometer X axis offset value. Offset is
    * using in the sensor calibration routine.
    * @param offset
    * @retval i2c_status_t
    */
    i2c_status_t SetAccel_X_Offset(int16_t offset);


  /* MPU6050 I2C Device Address */
  #define MPU6050_ADDRESS_AD0 0x68 // AD0 pin low
  #define MPU6050_ADDRESS_AD1 0x69 // AD0 pin high


     boost::bind(&RangeSensorLayer::reconfigureCB, this, _1, _2);
   dsrv_->setCallback(cb);
   global_frame_ = layered_costmap_->getGlobalFrameID();
 }

 double RangeSensorLayer::gamma(double theta)
 {
   if (fabs(theta) > max_angle_)
     return 0.0;
   else
     return 1 - pow(theta / max_angle_, 2);
 }

 double RangeSensorLayer::delta(double phi)
 {
   return 1 - (1 + tanh(2 * (phi - phi_v_))) / 2;
 }

 void RangeSensorLayer::get_deltas(double angle, double *dx, double *dy)
 {
   double ta = tan(angle);
   if (ta == 0)
     *dx = 0;
   else
     *dx = resolution_ / ta;

   *dx = copysign(*dx, cos(angle));
   *dy = copysign(resolution_, sin(angle));
 }

 double RangeSensorLayer::sensor_model(double r, double phi, double theta)
 {
   double lbda = delta(phi) * gamma(theta);

   double delta = resolution_;

   if (phi >= 0.0 && phi < r - 2 * delta * r)
     return (1 - lbda) * (0.5);
   else if (phi < r - delta * r)


  // Update right side of sonar cone
  mx = ox + cos(theta + max_angle_) * d * 1.2;
  my = oy + sin(theta + max_angle_) * d * 1.2;


In this example we show various ways to work with the sensor configuration
interface. The [ ` ouster::sensor::sensor_config  `
](ouster_client/types.html#_CPPv4N6ouster6sensor13sensor_configE
"ouster::sensor::sensor_config") struct can be found defined in ` types.h  ` .
` get_config  ` and ` set_config  ` are in ` client.h  ` .


      // Unless inflate_cone_ is set to 100 %, we update cells only within the (partially inflated) sensor cone,
      // projected on the costmap as a triangle. 0 % corresponds to just the triangle, but if your sensor fov is
      // very narrow, the covered area can become zero due to cell discretization. See wiki description for more
      // details
      if (inflate_cone_ < 1.0)
      {
        // Determine barycentric coordinates
        int w0 = orient2d(Ax, Ay, Bx, By, x, y);
        int w1 = orient2d(Bx, By, Ox, Oy, x, y);
        int w2 = orient2d(Ox, Oy, Ax, Ay, x, y);


The [ ` ouster::LidarScan  `
](ouster_client/lidar_scan.html#_CPPv4N6ouster9LidarScanE "ouster::LidarScan")
is explained in depth conceptually in the [ LidarScan reference
](reference/lidar-scan) . Here we cover some specifics that will be useful for
C++ developers.


tf_->transform(in, out, global_frame_);


In the following code, ` transformation  ` represents the extrinsincs
transform:


Migration Guides


###  Reshaping XYZ to 2D  ï


  * [ Ouster SDK Overview ](../index.html)
  * [ Installation ](../installation.html)
  * [ Download and Visualize Sample Data ](../sample-data.html)


  updateCostmap(range_message, clear_sensor_cone);
}


  if (sensor_type_name == "VARIABLE")
    input_sensor_type = VARIABLE;
  else if (sensor_type_name == "FIXED")
    input_sensor_type = FIXED;
  else if (sensor_type_name == "ALL")
    input_sensor_type = ALL;
  else
  {
    ROS_ERROR("%s: Invalid input sensor type: %s", name_.c_str(), sensor_type_name.c_str());
  }


   // Default topic names list contains a single topic: /sonar
   // We use the XmlRpcValue constructor that takes a XML string and reading start offset
   const char* xml = "<value><array><data><value>/sonar</value></data></array></value>";
   int zero_offset = 0;
   std::string topics_ns;
   XmlRpc::XmlRpcValue topic_names(xml, &zero_offset);

   nh.param("ns", topics_ns, std::string());
   nh.param("topics", topic_names, topic_names);

   InputSensorType input_sensor_type = ALL;
   std::string sensor_type_name;
   nh.param("input_sensor_type", sensor_type_name, std::string("ALL"));

   nh.param("use_decay", use_decay_, false);
   nh.param("pixel_decay", pixel_decay_, 10.0);
   nh.param("transform_tolerance_", transform_tolerance_, 0.3);

   boost::to_upper(sensor_type_name);
   ROS_INFO("%s: %s as input_sensor_type given", name_.c_str(), sensor_type_name.c_str());

   if (sensor_type_name == "VARIABLE")
     input_sensor_type = VARIABLE;
   else if (sensor_type_name == "FIXED")
     input_sensor_type = FIXED;
   else if (sensor_type_name == "ALL")
     input_sensor_type = ALL;
   else
   {
     ROS_ERROR("%s: Invalid input sensor type: %s", name_.c_str(), sensor_type_name.c_str());
   }

   // Validate topic names list: it must be a (normally non-empty) list of strings
   if ((topic_names.valid() == false) || (topic_names.getType() != XmlRpc::XmlRpcValue::TypeArray))
   {
     ROS_ERROR("Invalid topic names list: it must be a non-empty list of strings");
     return;
   }

   if (topic_names.size() < 1)


    /* MG constant to convert raw register value to gravity (9.81 m/s2). The index of the values are
    * adjusted to have corresponding values with the accel_full_scale_range_t enum. So, we can just get
    * the MG value by "mgConstantArr[ACCEL_SCALE_2G]"" for ACCEL_SCALE_2G. */
    const float mgCostantArr[4] = {2.0f / 32767.0f, 4.0f / 32767.0f, 8.0f / 32767.0f, 16.0f / 32767.0f};


    sensor::sensor_config original_config;
    if (!sensor::get_config(sensor_hostname, original_config)) {
        std::cerr << "..error: could not connect to sensor!" << std::endl;
        return EXIT_FAILURE;
    }


  namespace Regbits_PWR_MGMT_1 {
    SensorConst BIT_CLKSEL_0 = BIT_0;
    SensorConst BIT_CLKSEL_1 = BIT_1;
    SensorConst BIT_CLKSEL_2 = BIT_2;
    SensorConst BIT_TEMP_DIS = BIT_3;
    SensorConst BIT_CYCLE = BIT_5;
    SensorConst BIT_SLEEP = BIT_6;
    SensorConst BIT_DEVICE_RESET = BIT_7;
  };


##  Working with LidarScans  ï


  *dx = copysign(*dx, cos(angle));
  *dy = copysign(resolution_, sin(angle));
}


double RangeSensorLayer::sensor_model(double r, double phi, double theta)
{
  double lbda = delta(phi) * gamma(theta);


void RangeSensorLayer::updateCostmap()
{
  std::list<sensor_msgs::Range> range_msgs_buffer_copy;


    /**
    * @brief  This method used for setting the gyroscope X axis offset value. Offset is
    * using in the sensor calibration routine.
    * @param offset
    * @retval i2c_status_t
    */
    i2c_status_t SetGyro_X_Offset(int16_t offset);


SDK Reference


      if (input_sensor_type == VARIABLE)
        processRangeMessageFunc_ = boost::bind(&RangeSensorLayer::processVariableRangeMsg, this, _1);
      else if (input_sensor_type == FIXED)
        processRangeMessageFunc_ = boost::bind(&RangeSensorLayer::processFixedRangeMsg, this, _1);
      else if (input_sensor_type == ALL)
        processRangeMessageFunc_ = boost::bind(&RangeSensorLayer::processRangeMsg, this, _1);
      else
      {
        ROS_ERROR(
          "%s: Invalid input sensor type: %s. Did you make a new type and forgot to choose the subscriber for it?",
          name_.c_str(), sensor_type_name.c_str());
      }


  * [ Build ](building.html)
  * Examples
    * Sensor Configuration
    * Working with LidarScans
      * LidarScan constructors
    * 2D Representations and 3D representations
      * Reshaping XYZ to 2D
      * Adjusting XYZLut With External Matrix


  matchSize();
  resetRange();


  // Triangle that will be really updated; the other cells within bounds are ignored
  // This triangle is formed by the origin and left and right sides of sonar cone
  int Ox, Oy, Ax, Ay, Bx, By;


    /**
    * @brief  This method used for getting the accelerometer Z axis offset value.
    * @param error Result of the operation
    * @retval int16_t
    */
    int16_t GetAccel_Z_Offset(i2c_status_t* error);


    /**
    * @brief This function sets the sensor INT_ENABLE register with given value.
    * @param enabledInterrupts Enabled/Disabled sensor interrupts. Use Regbits_INT_ENABLE namespace.
    * @retval i2c_status_t
    */
    i2c_status_t SetSensor_InterruptEnable(uint8_t enabledInterrupts);


RangeSensorLayer::RangeSensorLayer() {}


C++ Guide


Built with [ Sphinx ](https://www.sphinx-doc.org/) using a [ theme
](https://github.com/readthedocs/sphinx_rtd_theme) provided by [ Read the Docs
](https://readthedocs.org) .


  range_message_mutex_.lock();
  range_msgs_buffer_copy = std::list<sensor_msgs::Range>(range_msgs_buffer_);
  range_msgs_buffer_.clear();
  range_message_mutex_.unlock();


The simplest (and most common) method is to construct one to contain all data
coming from your sensor. You can do this by specifying the ` udp_proflie_lidar
` in your ` sensor_info  ` , or by directly specifying the profile you care
about.


    /**
    * @brief This function sets the sensor FIFO configuration.
    * @param fifoConfigVal FIFO config value, use Regbits_FIFO_EN as bitmask to configure.
    * @retval i2c_status_t
    */
    i2c_status_t SetSensor_FIFO_Config(uint8_t fifoConfigVal);


__ [ Ouster Sensor SDK ](../index.html)


void RangeSensorLayer::update_cell(double ox, double oy, double ot, double r, double nx, double ny, bool clear)
{
  unsigned int x, y;
  if (worldToMap(nx, ny, x, y))
  {
    double dx = nx - ox, dy = ny - oy;
    double theta = atan2(dy, dx) - ot;
    theta = angles::normalize_angle(theta);
    double phi = sqrt(dx * dx + dy * dy);
    double sensor = 0.0;
    if (!clear)
      sensor = sensor_model(r, phi, theta);
    double prior = to_prob(getCost(x, y));
    double prob_occ = sensor * prior;
    double prob_not = (1 - sensor) * (1 - prior);
    double new_prob = prob_occ / (prob_occ + prob_not);


To run this example:


      if (update_xy_cell)
      {
        double wx, wy;
        mapToWorld(x, y, wx, wy);
        update_cell(ox, oy, theta, range_message.range, wx, wy, clear_sensor_cone);
      }
    }
  }


#include <pluginlib/class_list_macros.hpp>
#include <base_local_planner/goal_functions.h>
#include <nav_msgs/Path.h>
#include <tf2/utils.h>
#include <nav_core/parameter_magic.h>
//register this planner as a BaseLocalPlanner plugin
PLUGINLIB_EXPORT_CLASS(dwa_local_planner::DWAPlannerROS, nav_core::BaseLocalPlanner)
namespace dwa_local_planner {
  void DWAPlannerROS::reconfigureCB(DWAPlannerConfig &config, uint32_t level) {
      if (setup_ && config.restore_defaults) {
        config = default_config_;
        config.restore_defaults = false;
      }
      if ( ! setup_) {
        default_config_ = config;
        setup_ = true;
      }
      // update generic local planner params
      base_local_planner::LocalPlannerLimits limits;
      limits.max_vel_trans = config.max_vel_trans;
      limits.min_vel_trans = config.min_vel_trans;
      limits.max_vel_x = config.max_vel_x;
      limits.min_vel_x = config.min_vel_x;
      limits.max_vel_y = config.max_vel_y;
      limits.min_vel_y = config.min_vel_y;
      limits.max_vel_theta = config.max_vel_theta;
      limits.min_vel_theta = config.min_vel_theta;
      limits.acc_lim_x = config.acc_lim_x;
      limits.acc_lim_y = config.acc_lim_y;
      limits.acc_lim_theta = config.acc_lim_theta;
      limits.acc_lim_trans = config.acc_lim_trans;
      limits.xy_goal_tolerance = config.xy_goal_tolerance;
      limits.yaw_goal_tolerance = config.yaw_goal_tolerance;
      limits.prune_plan = config.prune_plan;
      limits.trans_stopped_vel = config.trans_stopped_vel;
      limits.theta_stopped_vel = config.theta_stopped_vel;
      planner_util_.reconfigureCB(limits, config.restore_defaults);
      // update dwa specific configuration
      dp_->reconfigure(config);
  }


   my = oy + sin(theta + max_angle_) * d * 1.2;

   worldToMapNoBounds(mx, my, Bx, By);
   bx0 = std::min(bx0, Bx);
   bx1 = std::max(bx1, Bx);
   by0 = std::min(by0, By);
   by1 = std::max(by1, By);
   touch(mx, my, &min_x_, &min_y_, &max_x_, &max_y_);

   // Limit Bounds to Grid
   bx0 = std::max(0, bx0);
   by0 = std::max(0, by0);
   bx1 = std::min(static_cast<int>(size_x_), bx1);
   by1 = std::min(static_cast<int>(size_y_), by1);

   for (unsigned int x = bx0; x <= (unsigned int)bx1; x++)
   {
     for (unsigned int y = by0; y <= (unsigned int)by1; y++)
     {
       bool update_xy_cell = true;

       // Unless inflate_cone_ is set to 100 %, we update cells only within the (partially inflated) sensor cone,
       // projected on the costmap as a triangle. 0 % corresponds to just the triangle, but if your sensor fov is
       // very narrow, the covered area can become zero due to cell discretization. See wiki description for more
       // details
       if (inflate_cone_ < 1.0)
       {
         // Determine barycentric coordinates
         int w0 = orient2d(Ax, Ay, Bx, By, x, y);
         int w1 = orient2d(Bx, By, Ox, Oy, x, y);
         int w2 = orient2d(Ox, Oy, Ax, Ay, x, y);

         // Barycentric coordinates inside area threshold; this is not mathematically sound at all, but it works!
         float bcciath = -inflate_cone_ * area(Ax, Ay, Bx, By, Ox, Oy);
         update_xy_cell = w0 >= bcciath && w1 >= bcciath && w2 >= bcciath;
       }

       if (update_xy_cell)
       {
         double wx, wy;


    /**
    * @brief  This method used for getting the latest gyroscope X axis RAW value from
    * the sensor. Make sure that sensor is not in sleeping mode and gyroscope full
    * scale range is set to desired range before reading the values.
    * @param  error Error state of process
    * @retval int16_t X axis RAW gyroscope value
    */
    int16_t GetGyro_X_Raw(i2c_status_t* error);


}  // namespace range_sensor_layer


    /**
    * @brief  This method wakes the sensor up by cleraing the REG_PWR_MGMT_1
    * BIT_SLEEP. Power management 1 sensors default values is 0x40 so it will
    * be in sleep mode when it's powered up.
    * @param  none
    * @retval i2c_status_t
    */
    i2c_status_t WakeUpSensor(void);


PLUGINLIB_EXPORT_CLASS(range_sensor_layer::RangeSensorLayer, costmap_2d::Layer)


  * [ Migrating from 20220927/0.5.1 to 20230114/0.7.1 ](../migration/migration-20220927-20230114.html)
  * [ Migrating from 20230114/0.7.1 to 20230403/0.8.1 ](../migration/migration-20230114-20230403.html)


// Copyright 2018 David V. Lu!!
#include <range_sensor_layer/range_sensor_layer.h>
#include <boost/algorithm/string.hpp>
#include <geometry_msgs/PointStamped.h>
#include <pluginlib/class_list_macros.h>
#include <angles/angles.h>
#include <algorithm>
#include <list>
#include <limits>
#include <map>
#include <string>
#include <utility>


void RangeSensorLayer::removeOutdatedReadings()
{
  std::map<std::pair<unsigned int, unsigned int>, double>::iterator it_map;


void RangeSensorLayer::reset()
{
  ROS_DEBUG("Reseting range sensor layer...");
  deactivate();
  resetMaps();
  current_ = true;
  activate();
}


  * [ ](../index.html) »
  * C++ Examples
  * [ Edit on GitHub ](https://github.com/ouster-lidar/ouster_example/blob/master/docs/cpp/examples.rst)


void RangeSensorLayer::processVariableRangeMsg(sensor_msgs::Range& range_message)
{
  if (range_message.range < range_message.min_range || range_message.range > range_message.max_range)
    return;


    /**
    * @brief  This method used for getting the accelerometer X axis offset value.
    * @param error Result of the operation
    * @retval int16_t
    */
    int16_t GetAccel_X_Offset(i2c_status_t* error);


#include "i2c_interface.h"


    /**
    * @brief  This method used for getting the gyroscope full scale range.
    * Check gyro_full_scale_range_t for available scales. It basically reads the
    * Gyro configuration register and returns the full scale range.
    * @param  error Result of the sensor reading process
    * @retval gyro_full_scale_range_t
    */
    Gyro_FS_t GetGyroFullScale(i2c_status_t* error);


    /**
    * @brief  This method returns the DPS (Degree Per Second) coversion value depending on
    * the gyroscope full scale range. DPS value is used to convert raw sensor value to angular
    * velocity for orientation related calculations.
    * @param gyroRange Configured gyro full scale range
    * @retval float
    */
    float GetGyro_DPS_Constant(Gyro_FS_t gyroRange);


      ROS_INFO("RangeSensorLayer: subscribed to topic %s", range_subs_.back().getTopic().c_str());
    }
  }


    /**
    * @brief  This method resets the sensor by simply setting the REG_PWR_MGMT_1
    * Device_Reset bit. After the sensor reset this bit will be cleared automatically.
    * @param  none
    * @retval i2c_status_t
    */
    i2c_status_t ResetSensor(void);


    clear_sensor_cone = true;
  }


  // Limit Bounds to Grid
  bx0 = std::max(0, bx0);
  by0 = std::max(0, by0);
  bx1 = std::min(static_cast<int>(size_x_), bx1);
  by1 = std::min(static_cast<int>(size_y_), by1);


    /**
    * @brief  This method used for calibrating the gyroscope registers to given target values.
    * @param targetX target value for gyroscope X axis register
    * @param targetY target value for gyroscope Y axis register
    * @param targetZ target value for gyroscope Z axis register
    * @retval i2c_status_t
    */
    i2c_status_t Calibrate_Gyro_Registers(int16_t targetX = 0, int16_t targetY = 0, int16_t targetZ = 0);


double RangeSensorLayer::gamma(double theta)
{
  if (fabs(theta) > max_angle_)
    return 0.0;
  else
    return 1 - pow(theta / max_angle_, 2);
}


resetRange();


    /* Gyro offset register constant to compensate 1 DPS (degree per second) offset.
  * Check sensor datasheet for more info about the offset procedure! */
    const float gyro_offset_1dps = 32.8f;
  };


    for(unsigned int i = 0; i < path.getPointsSize(); ++i) {
      double p_x, p_y, p_th;
      path.getPoint(i, p_x, p_y, p_th);
      geometry_msgs::PoseStamped p;
      p.header.frame_id = costmap_ros_->getGlobalFrameID();
      p.header.stamp = ros::Time::now();
      p.pose.position.x = p_x;
      p.pose.position.y = p_y;
      p.pose.position.z = 0.0;
      tf2::Quaternion q;
      q.setRPY(0, 0, p_th);
      tf2::convert(q, p.pose.orientation);
      local_plan.push_back(p);
    }
    //publish information to the visualizer
    publishLocalPlan(local_plan);
    return true;
  }
  bool DWAPlannerROS::computeVelocityCommands(geometry_msgs::Twist& cmd_vel) {
    // dispatches to either dwa sampling control or stop and rotate control, depending on whether we have been close enough to goal
    if ( ! costmap_ros_->getRobotPose(current_pose_)) {
      ROS_ERROR("Could not get robot pose");
      return false;
    }
    std::vector<geometry_msgs::PoseStamped> transformed_plan;
    if ( ! planner_util_.getLocalPlan(current_pose_, transformed_plan)) {
      ROS_ERROR("Could not get local plan");
      return false;
    }
    //if the global plan passed in is empty... we won't do anything
    if(transformed_plan.empty()) {
      ROS_WARN_NAMED("dwa_local_planner", "Received an empty transformed plan.");
      return false;
    }
    ROS_DEBUG_NAMED("dwa_local_planner", "Received a transformed plan with %zu points.", transformed_plan.size());
    // update plan in dwa_planner even if we just stop and rotate, to allow checkTrajectory
    dp_->updatePlanAndLocalCosts(current_pose_, transformed_plan, costmap_ros_->getRobotFootprint());
    if (latchedStopRotateController_.isPositionReached(&planner_util_, current_pose_)) {
      //publish an empty plan because we've reached our goal position
      std::vector<geometry_msgs::PoseStamped> local_plan;


  /* Digital low pass filter config bandwidth values in Hz*/
  enum class DLPF_t
  {
    BW_260Hz = 0,
    BW_184Hz = 1,
    BW_94Hz = 2,
    BW_44Hz = 3,
    BW_21Hz = 4,
    BW_10Hz = 5,
    BW_5Hz = 6,
    RESERVED = 7
  };


    /**
    * @brief  This method used for setting the gyroscope Y axis offset value. Offset is
    * using in the sensor calibration routine.
    * @param offset
    * @retval i2c_status_t
    */
    i2c_status_t SetGyro_Y_Offset(int16_t offset);


$ lidar_scan_example $SAMPLE_DUAL_RETURNS_PCAP $SAMPLE_DUAL_RETURNS_JSON


For example, see the two snippets below:


    /**
    * @brief This function sets the gyroscope sample rate divider. Once the sample rate divider set, actual sample rate
    *        can be found with this formula:
    *        Actual sample rate = Gyroscope Output Rate / (1 + sampleRate)
    *        Keep in mind that Gyroscope Output Rate = 8kHz when the DLPF (digital low pass filter) is disabled
    *        (DLPF_CFG = 0 or 7), and 1kHz when the DLPF is enabled. Accel sample rate is constantly 1 kHz.
    * @param sampleRate Gyroscope sample rate divider.
    * @retval i2c_status_t
    */
    i2c_status_t SetGyro_SampleRateDivider(uint8_t sampleRate);


  namespace Regbits_FIFO_EN {
    SensorConst BIT_SLV0_FIFO_EN = BIT_0;
    SensorConst BIT_SLV1_FIFO_EN = BIT_1;
    SensorConst BIT_SLV2_FIFO_EN = BIT_2;
    SensorConst BIT_ACCEL_FIFO_EN = BIT_3;
    SensorConst BIT_ZG_FIFO_EN = BIT_4;
    SensorConst BIT_YG_FIFO_EN = BIT_5;
    SensorConst BIT_XG_FIFO_EN = BIT_6;
    SensorConst BIT_TEMP_FIFO_EN = BIT_7;
  };


    auto profile_scan = ouster::LidarScan(w, h, info.format.udp_profile_lidar);

    auto dual_returns_scan = ouster::LidarScan(
        w, h, UDPProfileLidar::PROFILE_RNG19_RFL8_SIG16_NIR16_DUAL);


  namespace Regbits_INT_PIN_CFG {
    SensorConst BIT_I2C_BYPASS_EN = BIT_1;
    SensorConst BIT_FSYNC_INT_EN = BIT_2;
    SensorConst BIT_FSYNC_INT_LEVEL = BIT_3;
    SensorConst BIT_INT_RD_CLEAR = BIT_4;
    SensorConst BIT_LATCH_INT_EN = BIT_5;
    SensorConst BIT_INT_OPEN = BIT_6;
    SensorConst BIT_INT_LEVEL = BIT_7;
  }


  if (buffered_readings_ == 0)
  {
    if (no_readings_timeout_ > 0.0 &&
        (ros::Time::now() - last_reading_time_).toSec() > no_readings_timeout_)
    {
      ROS_WARN_THROTTLE(2.0, "No range readings received for %.2f seconds, " \
                        "while expected at least every %.2f seconds.",
                        (ros::Time::now() - last_reading_time_).toSec(), no_readings_timeout_);
      current_ = false;
    }
  }
}


  * [ Source Code ](https://github.com/ouster-lidar/ouster_example)
  * [ Issue Tracker ](https://github.com/ouster-lidar/ouster_example/issues)
  * [ Sensor Documentation ](https://static.ouster.dev/sensor-docs/)
  * [ More Sample Data ](https://ouster.com/resources/lidar-sample-data/)


  // Update Map with Target Point
  unsigned int aa, ab;
  if (worldToMap(tx, ty, aa, ab))
  {
    setCost(aa, ab, 233);
    touch(tx, ty, &min_x_, &min_y_, &max_x_, &max_y_);
  }


namespace MPU6050_Driver {


representations_example $SAMPLE_DUAL_RETURNS_PCAP $SAMPLE_DUAL_RETURNS_JSON


  /* Gyroscope full scale ranges in degrees per second */
  enum class Gyro_FS_t
  {
    FS_250_DPS = 0,
    FS_500_DPS = 1,
    FS_1000_DPS = 2,
    FS_2000_DPS = 3
  };


void RangeSensorLayer::onInitialize()
{
  ros::NodeHandle nh("~/" + name_);
  current_ = true;
  buffered_readings_ = 0;
  last_reading_time_ = ros::Time::now();
  default_value_ = to_cost(0.5);


updateCostmap();


This demonstrates the functionality with ` x  ` , but it can be easily
expanded to cover ` y  ` and ` z  ` as well.


[ ![Logo](../_static/Ouster_Logo_TM_Stacked_White_RGB.svg) ](../index.html)


  if (enabled_ != config.enabled)
  {
    enabled_ = config.enabled;
    current_ = false;
  }
}


##  2D Representations and 3D representations  ï


  double removal_time = last_reading_time_.toSec() - pixel_decay_;
  for (it_map = marked_point_history_.begin() ; it_map != marked_point_history_.end() ; it_map++ )
  {
    if (it_map->second < removal_time)
    {
      marked_point_history_.erase(it_map);
      setCost(std::get<0>(it_map->first), std::get<1>(it_map->first), costmap_2d::FREE_SPACE);
    }
  }
}


  updateCostmap(range_message, clear_sensor_cone);
}


/*********************************************************************
*
* Software License Agreement (BSD License)
*
*  Copyright (c) 2009, Willow Garage, Inc.
*  All rights reserved.
*
*  Redistribution and use in source and binary forms, with or without
*  modification, are permitted provided that the following conditions
*  are met:
*
*   * Redistributions of source code must retain the above copyright
*     notice, this list of conditions and the following disclaimer.
*   * Redistributions in binary form must reproduce the above
*     copyright notice, this list of conditions and the following
*     disclaimer in the documentation and/or other materials provided
*     with the distribution.
*   * Neither the name of Willow Garage, Inc. nor the names of its
*     contributors may be used to endorse or promote products derived
*     from this software without specific prior written permission.
*
*  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
*  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
*  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
*  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
*  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
*  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
*  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
*  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
*  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
*  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
*  POSSIBILITY OF SUCH DAMAGE.
*
* Author: Eitan Marder-Eppstein
*********************************************************************/
#include <dwa_local_planner/dwa_planner_ros.h>
#include <Eigen/Core>
#include <cmath>
#include <ros/console.h>


void RangeSensorLayer::updateCostmap(sensor_msgs::Range& range_message, bool clear_sensor_cone)
{
  max_angle_ = range_message.field_of_view / 2;


##  Sensor Configuration  ï


    /**
    * @brief  This method used for getting the accelerometer Y axis offset value.
    * @param error Result of the operation
    * @retval int16_t
    */
    int16_t GetAccel_Y_Offset(i2c_status_t* error);


void RangeSensorLayer::updateCosts(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j)
{
  if (!enabled_)
    return;


  *min_x = std::min(*min_x, min_x_);
  *min_y = std::min(*min_y, min_y_);
  *max_x = std::max(*max_x, max_x_);
  *max_y = std::max(*max_y, max_y_);


  unsigned char* master_array = master_grid.getCharMap();
  unsigned int span = master_grid.getSizeInCellsX();
  unsigned char clear = to_cost(clear_threshold_), mark = to_cost(mark_threshold_);


    /**
    * @brief  This method wakes up the sensor and configures the accelerometer and
    * gyroscope full scale renges with given parameters. It returns the result of
    * the process.
    * @param  gyroScale Gyroscope scale value to be set
    * @param  accelScale Accelerometer scale value to be set
    * @retval i2c_status_t Success rate
    */
    i2c_status_t InitializeSensor(
        Gyro_FS_t gyroScale = Gyro_FS_t::FS_250_DPS,
        Accel_FS_t accelScale = Accel_FS_t::FS_2G);


The ` sensor_config  ` struct consists of several ` std::optional  ` members,
which can be set directly. Members which are not set will not set sensor
configuration parameters when sent to the sensor. In addition, there are two
config flags, for automatic udp destination setting and config persistence
which can be set as above. The automatic udp destination flag cannot be set
when ` config.udp_dest  ` is set, as those conflict.


    /**
    * @brief This function returns sensor interrupt pin config register value.
    * @param error Result of the operation.
    * @retval uint8_t Interrupt pin config register value.
    */
    uint8_t GetSensor_InterruptPinConfig(i2c_status_t* error);


    /**
    * @brief  This method returns the MG (Gravity) coversion value depending on
    * the accelerometer full scale range. MG value is used to convert raw sensor value to Gravity
    * for acceleration related calculations.
    * @param accelRange Configured accelerometer full scale range
    * @retval float
    */
    float GetAccel_MG_Constant(Accel_FS_t accelRange);


    /**
    * @brief  This method used for getting the gyroscope X axis offset value.
    * @param error Result of the operation
    * @retval int16_t
    */
    int16_t GetGyro_X_Offset(i2c_status_t* error);


  // Default topic names list contains a single topic: /sonar
  // We use the XmlRpcValue constructor that takes a XML string and reading start offset
  const char* xml = "<value><array><data><value>/sonar</value></data></array></value>";
  int zero_offset = 0;
  std::string topics_ns;
  XmlRpc::XmlRpcValue topic_names(xml, &zero_offset);


    /**
    * @brief This function reads 1 byte from sensor FIFO data register.
    * @param error Result of the operation.
    * @retval uint8_t FIFO data.
    */
    uint8_t GetSensor_FIFO_Data(i2c_status_t* error);


void RangeSensorLayer::processRangeMsg(sensor_msgs::Range& range_message)
{
  if (range_message.min_range == range_message.max_range)
    processFixedRangeMsg(range_message);
  else
    processVariableRangeMsg(range_message);
}


  bool DWAPlannerROS::setPlan(const std::vector<geometry_msgs::PoseStamped>& orig_global_plan) {
    if (! isInitialized()) {
      ROS_ERROR("This planner has not been initialized, please call initialize() before using this planner");
      return false;
    }
    //when we get a new plan, we also want to clear any latch we may have on goal tolerances
    latchedStopRotateController_.resetLatching();
    ROS_INFO("Got new plan");
    return dp_->setPlan(orig_global_plan);
  }
  bool DWAPlannerROS::isGoalReached() {
    if (! isInitialized()) {
      ROS_ERROR("This planner has not been initialized, please call initialize() before using this planner");
      return false;
    }
    if ( ! costmap_ros_->getRobotPose(current_pose_)) {
      ROS_ERROR("Could not get robot pose");
      return false;
    }
    if(latchedStopRotateController_.isGoalReached(&planner_util_, odom_helper_, current_pose_)) {
      ROS_INFO("Goal reached");
      return true;
    } else {
      return false;
    }
  }
  void DWAPlannerROS::publishLocalPlan(std::vector<geometry_msgs::PoseStamped>& path) {
    base_local_planner::publishPlan(path, l_plan_pub_);
  }
  void DWAPlannerROS::publishGlobalPlan(std::vector<geometry_msgs::PoseStamped>& path) {
    base_local_planner::publishPlan(path, g_plan_pub_);
  }
  DWAPlannerROS::~DWAPlannerROS(){
    //make sure to clean things up
    delete dsrv_;
  }
  bool DWAPlannerROS::dwaComputeVelocityCommands(geometry_msgs::PoseStamped &global_pose, geometry_msgs::Twist& cmd_vel) {
    // dynamic window sampling approach to get useful velocity commands
    if(! isInitialized()){


    /**
    * @brief This function gets the sensor interrput status (INT_STATUS) register.
    * @param error Result of the operation
    * @retval uint8_t Register value.
    */
    uint8_t GetSensor_InterruptStatus(i2c_status_t* error);


    // Finally, you can construct by specifying fields directly
    static const std::array<std::pair<ChanField, ChanFieldType>, 2>
        reduced_slots{{{ChanField::RANGE, ChanFieldType::UINT32},
                       {ChanField::NEAR_IR, ChanFieldType::UINT16}}};
    auto reduced_fields_scan =
        ouster::LidarScan(w, h, reduced_slots.begin(), reduced_slots.end());


  geometry_msgs::PointStamped in, out;
  in.header.stamp = range_message.header.stamp;
  in.header.frame_id = range_message.header.frame_id;


vBulletin ©2000 - 2024, Jelsoft Enterprises Ltd. Ubuntu Logo, Ubuntu and
Canonical © Canonical Ltd. Tango Icons © Tango Desktop Project.
User contributions on this site are licensed under the [ Creative Commons
Attribution Share Alike 4.0 International License
](https://creativecommons.org/licenses/by-sa/4.0/) . For details and our forum
data attribution, retention and privacy policy, see [ here
](http://ubuntuforums.org/showthread.php?t=2231107)


Copy link


* Download the latest package for Windows, e.g., ` ros2-humble-*-windows-release-amd64.zip  ` .


**[ Akshat220302 ](/Akshat220302) ** commented  Jan 11, 2024


In a command shell, set up the ROS 2 environment as described above and then
run a C++ ` talker  ` :


Author


>                The pointer size of the build machine (in bits; since dpkg
> 1.15.4).
>
>            DEB_BUILD_ARCH_ENDIAN
>                The endianness of the build machine (little / big; since dpkg
>                1.15.4).
>
>            DEB_BUILD_GNU_CPU
>                The GNU CPU part of DEB_BUILD_GNU_TYPE.
>
>            DEB_BUILD_GNU_SYSTEM
>                The GNU system part of DEB_BUILD_GNU_TYPE.
>
>            DEB_BUILD_GNU_TYPE
>                The GNU system type of the build machine.
>
>            DEB_BUILD_MULTIARCH
>                The clarified GNU system type of the build machine, used for
>                filesystem paths (since dpkg 1.16.0).
>
>            DEB_HOST_ARCH
>                The Debian architecture of the host machine.
>
>            DEB_HOST_ARCH_ABI
>                The Debian ABI name of the host machine (since dpkg 1.18.11).
>
>            DEB_HOST_ARCH_LIBC
>                The Debian libc name of the host machine (since dpkg
> 1.18.11).
>
>            DEB_HOST_ARCH_OS
>                The Debian system name of the host machine (since dpkg
> 1.13.2).
>
>            DEB_HOST_ARCH_CPU
>                The Debian CPU name of the host machine (since dpkg 1.13.2).
>
>            DEB_HOST_ARCH_BITS
>                The pointer size of the host machine (in bits; since dpkg
> 1.15.4).


Skip to content


[ ![TheFu's Avatar](customavatars/avatar1037685_1.gif)
](member.php?u=1037685&s=183b410f8bf182b9c678d2e3bd622085 "TheFu is offline")


[ ![@MMM-
Jasmin](https://avatars.githubusercontent.com/u/85670520?s=80&u=d7b4ede6adff336d8b085682e85fd69ca86107c1&v=4)
](/MMM-Jasmin)


Search or jump to...


[
![@kuralme](https://avatars.githubusercontent.com/u/17882644?s=80&u=9cac6c85045a3e2b0232b4870f3068f3907511e4&v=4)
](/kuralme)


[ ** Doug S  ** ](member.php?u=1245983&s=183b410f8bf182b9c678d2e3bd622085
"Doug S is online now")


Open a Command Prompt and type the following to install Python via Chocolatey:


Sadly i am not an expert on nodejs and hopefully someone can help me
Kind regards,
Nils

---

The text was updated successfully, but these errors were encountered:


>             dpkg-architecture -ai386 -ilinux-any
>
>        Usage in debian/rules
>            The environment variables set by dpkg-architecture are passed to
>            debian/rules as make variables (see make documentation). However,
> you
>            should not rely on them, as this breaks manual invocation of the
>            script. Instead, you should always initialize them using dpkg-
>            architecture with the -q option. Here are some examples, which
> also
>            show how you can improve the cross compilation support in your
> package:
>
>            Retrieving the GNU system type and forwarding it to ./configure:
>
>             DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture
> -qDEB_BUILD_GNU_TYPE)
>             DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture
> -qDEB_HOST_GNU_TYPE)
>             [...]
>             ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
>               confflags += --build=$(DEB_HOST_GNU_TYPE)
>             else
>               confflags += --build=$(DEB_BUILD_GNU_TYPE) \
>                            --host=$(DEB_HOST_GNU_TYPE)
>             endif
>             [...]
>             ./configure $(confflags)
>
>            Doing something only for a specific architecture:
>
>             DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
>
>             ifeq ($(DEB_HOST_ARCH),alpha)
>               [...]
>             endif
>
>            or if you only need to check the CPU or OS type, use the
>            DEB_HOST_ARCH_CPU or DEB_HOST_ARCH_OS variables.
>


Ubuntu Development Release


#  ROS Humble install dependancy issue on Ubuntu 22.04.2  #1433


{{ message }}


Clear


![custra is offline](images/ubuntu-VB4/statusicon/user-offline.png) Ubuntu
Green Coffee Beans


[ @kuralme ](https://github.com/kuralme) sorry I don't have the setup to
reproduce locally, so I am just trying to help with hints. My idea was to
follow dependencies with apt-get install one by one. The approach from [
https://askubuntu.com/questions/707333/how-to-debug-an-unmet-dependencies-
problem ](https://askubuntu.com/questions/707333/how-to-debug-an-unmet-
dependencies-problem) but at this point I would try with the


* Product


To see all available qualifiers, see our [ documentation
](https://docs.github.com/search-github/github-code-search/understanding-
github-code-search-syntax) .


Sorry, something went wrong.


![](images/ubuntu-VB4/misc/progress.gif) [ ![Advanced reply](clear.gif) Adv
Reply ](newreply.php?s=183b410f8bf182b9c678d2e3bd622085&p=14096207&noquote=1)


  * Site Areas
  * [ Settings ](usercp.php?s=183b410f8bf182b9c678d2e3bd622085)
  * [ Private Messages ](private.php?s=183b410f8bf182b9c678d2e3bd622085)
  * [ Subscriptions ](subscription.php?s=183b410f8bf182b9c678d2e3bd622085)
  * [ Who's Online ](online.php?s=183b410f8bf182b9c678d2e3bd622085)
  * [ Search Forums ](search.php?s=183b410f8bf182b9c678d2e3bd622085)
  * [ Forums Home ](index.php?s=183b410f8bf182b9c678d2e3bd622085)
  * Forums
  * [ The Ubuntu Forum Community ](forumdisplay.php?f=130&s=183b410f8bf182b9c678d2e3bd622085)
    1. [ Ubuntu Official Flavours Support ](forumdisplay.php?f=327&s=183b410f8bf182b9c678d2e3bd622085)
      1. [ New to Ubuntu ](forumdisplay.php?f=326&s=183b410f8bf182b9c678d2e3bd622085)
      2. [ General Help ](forumdisplay.php?f=331&s=183b410f8bf182b9c678d2e3bd622085)
      3. [ Installation & Upgrades ](forumdisplay.php?f=333&s=183b410f8bf182b9c678d2e3bd622085)
      4. [ Hardware ](forumdisplay.php?f=332&s=183b410f8bf182b9c678d2e3bd622085)
      5. [ Desktop Environments ](forumdisplay.php?f=329&s=183b410f8bf182b9c678d2e3bd622085)
      6. [ Networking & Wireless ](forumdisplay.php?f=336&s=183b410f8bf182b9c678d2e3bd622085)
      7. [ Multimedia Software ](forumdisplay.php?f=334&s=183b410f8bf182b9c678d2e3bd622085)
    2. [ Ubuntu Specialised Support ](forumdisplay.php?f=125&s=183b410f8bf182b9c678d2e3bd622085)
      1. [ Ubuntu Development Version ](forumdisplay.php?f=427&s=183b410f8bf182b9c678d2e3bd622085)
      2. [ Security ](forumdisplay.php?f=338&s=183b410f8bf182b9c678d2e3bd622085)
      3. [ Virtualisation ](forumdisplay.php?f=308&s=183b410f8bf182b9c678d2e3bd622085)
      4. [ Ubuntu Servers, Cloud and Juju ](forumdisplay.php?f=441&s=183b410f8bf182b9c678d2e3bd622085)
        1. [ Server Platforms ](forumdisplay.php?f=339&s=183b410f8bf182b9c678d2e3bd622085)
        2. [ Ubuntu Cloud and Juju ](forumdisplay.php?f=392&s=183b410f8bf182b9c678d2e3bd622085)
      5. [ Gaming & Leisure ](forumdisplay.php?f=93&s=183b410f8bf182b9c678d2e3bd622085)
        1. [ Emulators ](forumdisplay.php?f=413&s=183b410f8bf182b9c678d2e3bd622085)
      6. [ Wine ](forumdisplay.php?f=313&s=183b410f8bf182b9c678d2e3bd622085)
      7. [ Development & Programming ](forumdisplay.php?f=310&s=183b410f8bf182b9c678d2e3bd622085)
        1. [ Packaging and Compiling Programs ](forumdisplay.php?f=44&s=183b410f8bf182b9c678d2e3bd622085)
        2. [ Development CD/DVD Image Testing ](forumdisplay.php?f=201&s=183b410f8bf182b9c678d2e3bd622085)
        3. [ Ubuntu Application Development ](forumdisplay.php?f=417&s=183b410f8bf182b9c678d2e3bd622085)
        4. [ Ubuntu Dev Link Forum ](forumdisplay.php?f=307&s=183b410f8bf182b9c678d2e3bd622085)
        5. [ Programming Talk ](forumdisplay.php?f=39&s=183b410f8bf182b9c678d2e3bd622085)
        6. [ Repositories & Backports ](forumdisplay.php?f=41&s=183b410f8bf182b9c678d2e3bd622085)
          1. [ Ubuntu Backports ](forumdisplay.php?f=47&s=183b410f8bf182b9c678d2e3bd622085)
            1. [ Bug Reports / Support ](forumdisplay.php?f=82&s=183b410f8bf182b9c678d2e3bd622085)
      8. [ System76 Support ](forumdisplay.php?f=341&s=183b410f8bf182b9c678d2e3bd622085)
      9. [ Apple Hardware Users ](forumdisplay.php?f=328&s=183b410f8bf182b9c678d2e3bd622085)
    3. [ Ubuntu Community Discussions ](forumdisplay.php?f=175&s=183b410f8bf182b9c678d2e3bd622085)
      1. [ Ubuntu, Linux and OS Chat ](forumdisplay.php?f=434&s=183b410f8bf182b9c678d2e3bd622085)


          21. [ Idaho Team - US ](forumdisplay.php?f=398&s=183b410f8bf182b9c678d2e3bd622085)
          22. [ Iowa Team - US ](forumdisplay.php?f=381&s=183b410f8bf182b9c678d2e3bd622085)
          23. [ Jordan Team ](forumdisplay.php?f=320&s=183b410f8bf182b9c678d2e3bd622085)
          24. [ Kansas Team - US ](forumdisplay.php?f=275&s=183b410f8bf182b9c678d2e3bd622085)
          25. [ Libya Team ](forumdisplay.php?f=378&s=183b410f8bf182b9c678d2e3bd622085)
          26. [ Louisiana Team - US ](forumdisplay.php?f=288&s=183b410f8bf182b9c678d2e3bd622085)
          27. [ Maryland Team - US ](forumdisplay.php?f=224&s=183b410f8bf182b9c678d2e3bd622085)
          28. [ Massachusetts Team ](forumdisplay.php?f=260&s=183b410f8bf182b9c678d2e3bd622085)
          29. [ Michigan Team - US ](forumdisplay.php?f=271&s=183b410f8bf182b9c678d2e3bd622085)
          30. [ Missouri Team - US ](forumdisplay.php?f=277&s=183b410f8bf182b9c678d2e3bd622085)
          31. [ Montana Team - US ](forumdisplay.php?f=229&s=183b410f8bf182b9c678d2e3bd622085)
          32. [ Namibia Team ](forumdisplay.php?f=410&s=183b410f8bf182b9c678d2e3bd622085)
          33. [ Nevada Team - US ](forumdisplay.php?f=283&s=183b410f8bf182b9c678d2e3bd622085)
          34. [ New Hampshire Team - US ](forumdisplay.php?f=289&s=183b410f8bf182b9c678d2e3bd622085)
          35. [ New Jersey Team - US ](forumdisplay.php?f=185&s=183b410f8bf182b9c678d2e3bd622085)
          36. [ Northeastern Team - US ](forumdisplay.php?f=190&s=183b410f8bf182b9c678d2e3bd622085)
          37. [ Panama Team ](forumdisplay.php?f=281&s=183b410f8bf182b9c678d2e3bd622085)
          38. [ Paraguay Team ](forumdisplay.php?f=273&s=183b410f8bf182b9c678d2e3bd622085)
          39. [ Qatar Team ](forumdisplay.php?f=429&s=183b410f8bf182b9c678d2e3bd622085)
          40. [ Quebec Team ](forumdisplay.php?f=375&s=183b410f8bf182b9c678d2e3bd622085)
          41. [ Rhode Island Team - US ](forumdisplay.php?f=287&s=183b410f8bf182b9c678d2e3bd622085)
          42. [ Senegal Team ](forumdisplay.php?f=250&s=183b410f8bf182b9c678d2e3bd622085)
          43. [ South Carolina Team - US ](forumdisplay.php?f=311&s=183b410f8bf182b9c678d2e3bd622085)
          44. [ South Dakota Team - US ](forumdisplay.php?f=285&s=183b410f8bf182b9c678d2e3bd622085)
          45. [ Switzerland Team ](forumdisplay.php?f=319&s=183b410f8bf182b9c678d2e3bd622085)
          46. [ Tamil Team - India ](forumdisplay.php?f=186&s=183b410f8bf182b9c678d2e3bd622085)
          47. [ Tennessee Team - US ](forumdisplay.php?f=259&s=183b410f8bf182b9c678d2e3bd622085)
          48. [ Trinidad & Tobago Team ](forumdisplay.php?f=386&s=183b410f8bf182b9c678d2e3bd622085)
          49. [ Uganda Team ](forumdisplay.php?f=384&s=183b410f8bf182b9c678d2e3bd622085)
          50. [ United Kingdom Team ](forumdisplay.php?f=274&s=183b410f8bf182b9c678d2e3bd622085)
          51. [ US LoCo Teams ](forumdisplay.php?f=284&s=183b410f8bf182b9c678d2e3bd622085)
          52. [ Venezuela Team ](forumdisplay.php?f=300&s=183b410f8bf182b9c678d2e3bd622085)
          53. [ Wales Team ](forumdisplay.php?f=360&s=183b410f8bf182b9c678d2e3bd622085)
          54. [ Washington DC Team - US ](forumdisplay.php?f=252&s=183b410f8bf182b9c678d2e3bd622085)
          55. [ Washington State Team - US ](forumdisplay.php?f=380&s=183b410f8bf182b9c678d2e3bd622085)
          56. [ Wisconsin Team ](forumdisplay.php?f=263&s=183b410f8bf182b9c678d2e3bd622085)
          57. [ Yemen Team ](forumdisplay.php?f=387&s=183b410f8bf182b9c678d2e3bd622085)
          58. [ Za Team - South Africa ](forumdisplay.php?f=194&s=183b410f8bf182b9c678d2e3bd622085)
          59. [ Zimbabwe Team ](forumdisplay.php?f=299&s=183b410f8bf182b9c678d2e3bd622085)


         release v=1.0,o=Google LLC,a=stable,n=stable,l=Google,c=main,b=amd64
         origin dl.google.com
     500 http://security.ubuntu.com/ubuntu jammy-security/multiverse i386 Packages
         release v=22.04,o=Ubuntu,a=jammy-security,n=jammy,l=Ubuntu,c=multiverse,b=i386
         origin security.ubuntu.com
     500 http://security.ubuntu.com/ubuntu jammy-security/multiverse amd64 Packages
         release v=22.04,o=Ubuntu,a=jammy-security,n=jammy,l=Ubuntu,c=multiverse,b=amd64
         origin security.ubuntu.com
     500 http://security.ubuntu.com/ubuntu jammy-security/universe i386 Packages
         release v=22.04,o=Ubuntu,a=jammy-security,n=jammy,l=Ubuntu,c=universe,b=i386
         origin security.ubuntu.com
     500 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 Packages
         release v=22.04,o=Ubuntu,a=jammy-security,n=jammy,l=Ubuntu,c=universe,b=amd64
         origin security.ubuntu.com
     500 http://security.ubuntu.com/ubuntu jammy-security/restricted i386 Packages
         release v=22.04,o=Ubuntu,a=jammy-security,n=jammy,l=Ubuntu,c=restricted,b=i386
         origin security.ubuntu.com
     500 http://security.ubuntu.com/ubuntu jammy-security/restricted amd64 Packages
         release v=22.04,o=Ubuntu,a=jammy-security,n=jammy,l=Ubuntu,c=restricted,b=amd64
         origin security.ubuntu.com
     500 http://security.ubuntu.com/ubuntu jammy-security/main i386 Packages
         release v=22.04,o=Ubuntu,a=jammy-security,n=jammy,l=Ubuntu,c=main,b=i386
         origin security.ubuntu.com
     500 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages
         release v=22.04,o=Ubuntu,a=jammy-security,n=jammy,l=Ubuntu,c=main,b=amd64
         origin security.ubuntu.com
     100 http://de.archive.ubuntu.com/ubuntu jammy-backports/universe i386 Packages
         release v=22.04,o=Ubuntu,a=jammy-backports,n=jammy,l=Ubuntu,c=universe,b=i386
         origin de.archive.ubuntu.com
     100 http://de.archive.ubuntu.com/ubuntu jammy-backports/universe amd64 Packages
         release v=22.04,o=Ubuntu,a=jammy-backports,n=jammy,l=Ubuntu,c=universe,b=amd64
         origin de.archive.ubuntu.com
     100 http://de.archive.ubuntu.com/ubuntu jammy-backports/main i386 Packages
         release v=22.04,o=Ubuntu,a=jammy-backports,n=jammy,l=Ubuntu,c=main,b=i386
         origin de.archive.ubuntu.com
     100 http://de.archive.ubuntu.com/ubuntu jammy-backports/main amd64 Packages
         release v=22.04,o=Ubuntu,a=jammy-backports,n=jammy,l=Ubuntu,c=main,b=amd64
         origin de.archive.ubuntu.com
     500 http://de.archive.ubuntu.com/ubuntu jammy-updates/multiverse i386 Packages
         release v=22.04,o=Ubuntu,a=jammy-updates,n=jammy,l=Ubuntu,c=multiverse,b=i386


[ ** custra  ** ](member.php?u=2170143&s=183b410f8bf182b9c678d2e3bd622085
"custra is offline")


[ ** TheFu  ** ](member.php?u=1037685&s=183b410f8bf182b9c678d2e3bd622085
"TheFu is offline")


**[ minggangw ](/minggangw) ** commented  Oct 7, 2022


**Have a question about this project?** Sign up for a free GitHub account to
open an issue and contact its maintainers and the community.


##  Try some examples  ï


Join Date


**[ Kooshal71 ](/Kooshal71) ** commented  May 30, 2023


New issue


The following packages have unmet dependencies:
libgbm-dev : Depends: libgbm1 (= 22.2.5-0ubuntu0.1 ~~22.04.1) but
22.2.5-0ubuntu0.1~~ 22.04.2 is to be installed
E: Unable to correct problems, you have held broken packages.

---

All reactions


  * [ Terms ](https://docs.github.com/site-policy/github-terms/github-terms-of-service)
  * [ Privacy ](https://docs.github.com/site-policy/privacy-policies/github-privacy-statement)
  * [ Security ](/security)
  * [ Status ](https://www.githubstatus.com/)
  * [ Docs ](https://docs.github.com/)
  * [ Contact ](https://support.github.com?tags=dotcom-footer)
  * Manage cookies
  * Do not share my personal information


Both work fine, as you mentioned, maybe you need special flags that are
different from the x86 desktop. I don't have any idea so far.

---

All reactions


[
![@kuralme](https://avatars.githubusercontent.com/u/17882644?s=80&u=9cac6c85045a3e2b0232b4870f3068f3907511e4&v=4)
](/kuralme)


Toggle navigation


     Hidden!      Distro
     Xubuntu Development Release


Member


Sorry, something went wrong.


Finally, in an administrator ` cmd.exe  ` window set these environment
variables. The commands below assume you installed it to the default location
of ` C:\Qt  ` .


[ ros2 ](/ros2) /  **[ ros2 ](/ros2/ros2) ** Public


**[ MMM-Jasmin ](/MMM-Jasmin) ** commented  Oct 7, 2022  •


#  Thread:  [ Default processor architecture for x86_64
](showthread.php?t=2475171&s=183b410f8bf182b9c678d2e3bd622085 "Reload this
Page")


**[ arsenyvasilyev ](/arsenyvasilyev) ** commented  Jun 6, 2023  •


edited


[
![@minggangw](https://avatars.githubusercontent.com/u/6469275?s=80&u=70b6e691a3a267c5cdb4ba55fcfc0721ccbe6830&v=4)
](/minggangw)


    > rclnodejs@0.21.3 install
    > node-gyp rebuild

    gyp info it worked if it ends with ok
    gyp verb cli [
    gyp verb cli   '/usr/bin/node',
    gyp verb cli   '/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js',
    gyp verb cli   'rebuild'
    gyp verb cli ]
    gyp info using node-gyp@9.0.0
    gyp info using node@16.17.0 | linux | arm64
    gyp verb command rebuild []
    gyp verb command clean []
    gyp verb clean removing "build" directory
    gyp verb command configure []
    gyp verb find Python Python is not set from command line or npm configuration
    gyp verb find Python Python is not set from environment variable PYTHON
    gyp verb find Python checking if "python3" can be used
    gyp verb find Python - executing "python3" to get executable path
    gyp verb find Python - executable path is "/usr/bin/python3"
    gyp verb find Python - executing "/usr/bin/python3" to get version
    gyp verb find Python - version is "3.8.10"
    gyp info find Python using Python version 3.8.10 found at "/usr/bin/python3"
    gyp verb get node dir no --target version specified, falling back to host node version: 16.17.0
    gyp verb command install [ '16.17.0' ]
    gyp verb install input version string "16.17.0"
    gyp verb install installing version: 16.17.0
    gyp verb install --ensure was passed, so won't reinstall if already installed
    gyp verb install version is already installed, need to check "installVersion"
    gyp verb got "installVersion" 9
    gyp verb needs "installVersion" 9
    gyp verb install version is good
    gyp verb get node dir target node version installed: 16.17.0
    gyp verb build dir attempting to create "build" dir: /mnt/storage/test-area/rclnodejs/build
    gyp verb build dir "build" dir needed to be created? Yes
    gyp verb build/config.gypi creating config file
    gyp verb build/config.gypi writing out config file: /mnt/storage/test-area/rclnodejs/build/config.gypi
    gyp verb config.gypi checking for gypi file: /mnt/storage/test-area/rclnodejs/config.gypi


**[ tfoote ](/tfoote) ** commented  May 31, 2023


Quick Navigation  [ Ubuntu, Linux and OS Chat
](showthread.php?t=2475171&s=183b410f8bf182b9c678d2e3bd622085) [ Top
](showthread.php?t=2475171#top)


     500 http://de.archive.ubuntu.com/ubuntu jammy/main i386 Packages
         release v=22.04,o=Ubuntu,a=jammy,n=jammy,l=Ubuntu,c=main,b=i386
         origin de.archive.ubuntu.com
     500 http://de.archive.ubuntu.com/ubuntu jammy/main amd64 Packages
         release v=22.04,o=Ubuntu,a=jammy,n=jammy,l=Ubuntu,c=main,b=amd64
         origin de.archive.ubuntu.com
    Pinned packages:
         nsight-compute -> 2021.3.1.4~11.5.1-1ubuntu1 with priority -1
         nsight-systems -> 2021.3.3.2~11.5.1-1ubuntu1 with priority -1


I'll look for a more advisable solution for now, if not wait for developers to
update

---

All reactions


> Very abstract request, (unclear)
>  I'll bite though.
>
>
> Code:
>
>     >     dpkg-architecture -l
>     DEB_BUILD_ARCH=amd64
>     DEB_BUILD_ARCH_ABI=base
>     DEB_BUILD_ARCH_BITS=64
>     DEB_BUILD_ARCH_CPU=amd64
>     DEB_BUILD_ARCH_ENDIAN=little
>     DEB_BUILD_ARCH_LIBC=gnu
>     DEB_BUILD_ARCH_OS=linux
>     DEB_BUILD_GNU_CPU=x86_64
>     DEB_BUILD_GNU_SYSTEM=linux-gnu
>     DEB_BUILD_GNU_TYPE=x86_64-linux-gnu
>     DEB_BUILD_MULTIARCH=x86_64-linux-gnu
>     DEB_HOST_ARCH=amd64
>     DEB_HOST_ARCH_ABI=base
>     DEB_HOST_ARCH_BITS=64
>     DEB_HOST_ARCH_CPU=amd64
>     DEB_HOST_ARCH_ENDIAN=little
>     DEB_HOST_ARCH_LIBC=gnu
>     DEB_HOST_ARCH_OS=linux
>     DEB_HOST_GNU_CPU=x86_64
>     DEB_HOST_GNU_SYSTEM=linux-gnu
>     DEB_HOST_GNU_TYPE=x86_64-linux-gnu
>     DEB_HOST_MULTIARCH=x86_64-linux-gnu
>     DEB_TARGET_ARCH=amd64
>     DEB_TARGET_ARCH_ABI=base
>     DEB_TARGET_ARCH_BITS=64
>     DEB_TARGET_ARCH_CPU=amd64
>     DEB_TARGET_ARCH_ENDIAN=little
>     DEB_TARGET_ARCH_LIBC=gnu
>     DEB_TARGET_ARCH_OS=linux
>     DEB_TARGET_GNU_CPU=x86_64
>     DEB_TARGET_GNU_SYSTEM=linux-gnu
>     DEB_TARGET_GNU_TYPE=x86_64-linux-gnu
>     DEB_TARGET_MULTIARCH=x86_64-linux-gnu


>
>     sudo apt install libgbm1=22.2.5-0ubuntu0.1~22.04.1
>     sudo apt install libglapi-mesa=22.2.5-0ubuntu0.1~22.04.1


Note


    * [ View Profile ](member.php?u=2170143&s=183b410f8bf182b9c678d2e3bd622085)
    * [ View Forum Posts ](search.php?s=183b410f8bf182b9c678d2e3bd622085&do=finduser&userid=2170143&contenttype=vBForum_Post&showposts=1)
    * [ Private Message ](private.php?s=183b410f8bf182b9c678d2e3bd622085&do=newpm&u=2170143)


How long does it usually take for such an update to come out?

---

All reactions


[ ![@clalancette](https://avatars.githubusercontent.com/u/163000?s=52&v=4)
](/clalancette) [
![@brean](https://avatars.githubusercontent.com/u/229768?s=52&v=4) ](/brean) [
![@tfoote](https://avatars.githubusercontent.com/u/447804?s=52&v=4) ](/tfoote)
[ ![@MirkoFerrati](https://avatars.githubusercontent.com/u/1209878?s=52&v=4)
](/MirkoFerrati) [
![@artivis](https://avatars.githubusercontent.com/u/6572747?s=52&v=4)
](/artivis) [
![@kuralme](https://avatars.githubusercontent.com/u/17882644?s=52&v=4)
](/kuralme) [
![@arsenyvasilyev](https://avatars.githubusercontent.com/u/34109666?s=52&v=4)
](/arsenyvasilyev) [
![@fujitatomoya](https://avatars.githubusercontent.com/u/43395114?s=52&v=4)
](/fujitatomoya) [ ![@Yoshiya-
Fujii](https://avatars.githubusercontent.com/u/72488223?s=52&v=4) ](/Yoshiya-
Fujii) [
![@marcosjl31](https://avatars.githubusercontent.com/u/72946012?s=52&v=4)
](/marcosjl31) [
![@Kooshal71](https://avatars.githubusercontent.com/u/80195511?s=52&v=4)
](/Kooshal71) [ ![@Anirudh-
UG](https://avatars.githubusercontent.com/u/115171495?s=52&v=4) ](/Anirudh-UG)
[ ![@Akshat220302](https://avatars.githubusercontent.com/u/156317975?s=52&v=4)
](/Akshat220302)


    * [ CI/CD & Automation ](/solutions/ci-cd/)
    * [ DevOps ](/solutions/devops/)
    * [ DevSecOps  ](https://resources.github.com/devops/fundamentals/devsecops/)


Python installation may require modification to enable debugging symbols and
debug binaries:


Hey [ @minggangw ](https://github.com/minggangw) ,
i digged a little bit deeper, but still do not fully understand node-gyp.
In the "binding.gyp" is a array of "include_dirs" made namely:


Clear


Change the ` include_dirs ` part manually to point to the actual ` ros ` path
on your machine, like:


[ ![@MMM-
Jasmin](https://avatars.githubusercontent.com/u/85670520?s=80&u=d7b4ede6adff336d8b085682e85fd69ca86107c1&v=4)
](/MMM-Jasmin)


[ RobotWebTools ](/RobotWebTools) /  **[ rclnodejs ](/RobotWebTools/rclnodejs)
** Public


I sourced ` local_setup.bash ` or ` setup.bash `


Sorry, something went wrong.


[ ** custra  ** ](member.php?u=2170143&s=183b410f8bf182b9c678d2e3bd622085
"custra is offline")


Downgrading to 22.04.01 is not an option.

---

All reactions


###  Install Qt5  ï


**[ Akshat220302 ](/Akshat220302) ** commented  Jan 11, 2024


[ ![1fallen's Avatar](customavatars/avatar2040855_21.gif)
](member.php?u=2040855&s=183b410f8bf182b9c678d2e3bd622085 "1fallen is
offline")


Hi [ @MMM-Jasmin ](https://github.com/MMM-Jasmin) I noticed these changes were
introduced by [ #853 ](https://github.com/RobotWebTools/rclnodejs/pull/853) ,
which enabled the Github actions for ` rclnodejs ` , would you please just
remove the section below, to revert that change:


Copy link


* [ Pricing ](/pricing)


> ![../_images/windows-vs-studio-install.png](../_images/windows-vs-studio-
> install.png)


[ rclnodejs/binding.gyp
](https://github.com/RobotWebTools/rclnodejs/blob/20c32f1307dde2fe057376c65cca2d0e0a14f3ec/binding.gyp#L71-L93)


     Wandering
Beans


* Jump to page:


Member


> Any follow-up information on your issue would be appreciated. Please have
> the courtesy to report back.
>


> [
> ![../_images/python_installation_enable_debug.png](../_images/python_installation_enable_debug.png)
> ](../_images/python_installation_enable_debug.png)


setx /m OPENSSL_CONF "C:\Program Files\OpenSSL-Win64\bin\openssl.cfg"


For


>            multiarch triplet
>                The clarified GNU system type, used for filesystem paths.
> This
>                triplet does not change even when the baseline ISA gets
> bumped, so
>                that the resulting paths are stable over time.  The only
> current
>                difference with the GNU system type is that the CPU part for
> i386
>                based systems is always i386.  Examples: i386-linux-gnu,
>                x86_64-linux-gnu.  Example paths: /lib/powerpc64le-linux-
> gnu/,
>                /usr/lib/i386-kfreebsd-gnu/.
>
>     VARIABLES
>            The following variables are read from the environment (unless
> --force
>            has been specified) and set by dpkg-architecture (see the TERMS
> section
>            for a description of the naming scheme):
>
>            DEB_BUILD_ARCH
>                The Debian architecture of the build machine.
>
>            DEB_BUILD_ARCH_ABI
>                The Debian ABI name of the build machine (since dpkg
> 1.18.11).
>
>            DEB_BUILD_ARCH_LIBC
>                The Debian libc name of the build machine (since dpkg
> 1.18.11).
>
>            DEB_BUILD_ARCH_OS
>                The Debian system name of the build machine (since dpkg
> 1.13.2).
>
>            DEB_BUILD_ARCH_CPU
>                The Debian CPU name of the build machine (since dpkg 1.13.2).
>
>            DEB_BUILD_ARCH_BITS


Email Address


setx /m OpenCV_DIR C:\opencv


[
![@tfoote](https://avatars.githubusercontent.com/u/447804?s=80&u=af0b29e222149274e601085e7fcc7b00b631aee7&v=4)
](/tfoote)


> vmcb_clean um
>                              ip rdpid arch_capabilities
>     Virtualization features:
>       Virtualization:        AMD-V
>       Hypervisor vendor:     KVM
>       Virtualization type:   full
>     Caches (sum of all):
>       L1d:                   256 KiB (4 instances)
>       L1i:                   256 KiB (4 instances)
>       L2:                    2 MiB (4 instances)
>       L3:                    64 MiB (4 instances)
>     NUMA:
>       NUMA node(s):          1
>       NUMA node0 CPU(s):     0-3
>     Vulnerabilities:
>       Itlb multihit:         Not affected
>       L1tf:                  Not affected
>       Mds:                   Not affected
>       Meltdown:              Not affected
>       Spec store bypass:     Mitigation; Speculative Store Bypass disabled
> via prctl
>       Spectre v1:            Mitigation; usercopy/swapgs barriers and __user
> pointer
>                               sanitization
>       Spectre v2:            Mitigation; Retpolines, IBPB conditional,
> IBRS_FW, STIB
>                              P disabled, RSB filling
>       Srbds:                 Not affected
>       Tsx async abort:       Not affected


    gyp ERR! stack     at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
    gyp ERR! stack     at ChildProcess.emit (node:events:513:28)
    gyp ERR! stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:291:12)
    gyp ERR! System Linux 5.10.104-tegra
    gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
    gyp ERR! cwd /mnt/storage/test-area/rclnodejs
    gyp ERR! node -v v16.17.0
    gyp ERR! node-gyp -v v9.0.0
    gyp ERR! not ok
    npm timing command:install Completed in 5540ms
    npm verb stack Error: command failed
    npm verb stack     at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/node_modules/@npmcli/promise-spawn/lib/index.js:63:27)
    npm verb stack     at ChildProcess.emit (node:events:513:28)
    npm verb stack     at maybeClose (node:internal/child_process:1093:16)
    npm verb stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:302:5)
    npm verb pkgid rclnodejs@0.21.3
    npm verb cwd /mnt/storage/test-area/rclnodejs
    npm verb Linux 5.10.104-tegra
    npm verb node v16.17.0
    npm verb npm  v8.15.0
    npm ERR! code 1
    npm ERR! path /mnt/storage/test-area/rclnodejs
    npm ERR! command failed
    npm ERR! command sh /tmp/install-6c0a1c6f.sh
    npm verb exit 1
    npm timing npm Completed in 5654ms
    npm verb code 1

    npm ERR! A complete log of this run can be found in:
    npm ERR!     /home/jasmin/.npm/_logs/2022-09-22T10_21_48_410Z-debug-0.log


Sorry, something went wrong.


    kuralme@KME:~$ sudo apt -s -o Debug::pkgProblemResolver=yes install ros-humble-desktop
    [sudo] password for kuralme:
    Reading package lists... Done
    Building dependency tree... Done
    Reading state information... Done
    Starting pkgProblemResolver with broken count: 1
    Starting 2 pkgProblemResolver with broken count: 1
    Investigating (0) libgbm-dev:amd64 < none -> 22.2.5-0ubuntu0.1~22.04.1 @un puN Ib >
    Broken libgbm-dev:amd64 Depends on libgbm1:amd64 < 22.2.5-0ubuntu0.1~22.04.2 @ii pK > (= 22.2.5-0ubuntu0.1~22.04.1)
      Considering libgbm1:amd64 88 as a solution to libgbm-dev:amd64 0
    Done
    Some packages could not be installed. This may mean that you have
    requested an impossible situation or if you are using the unstable
    distribution that some required packages have not yet been created
    or been moved out of Incoming.
    The following information may help to resolve the situation:

    The following packages have unmet dependencies:
     libgbm-dev : Depends: libgbm1 (= 22.2.5-0ubuntu0.1~22.04.1) but 22.2.5-0ubuntu0.1~22.04.2 is to be installed
    E: Unable to correct problems, you have held broken packages.


**[ MMM-Jasmin ](/MMM-Jasmin) ** commented  Oct 7, 2022  •


> Last edited by 1fallen; May 18th, 2022 at  07:26 PM  .


    * [ View Profile ](member.php?u=2040855&s=183b410f8bf182b9c678d2e3bd622085)
    * [ View Forum Posts ](search.php?s=183b410f8bf182b9c678d2e3bd622085&do=finduser&userid=2040855&contenttype=vBForum_Post&showposts=1)
    * [ Private Message ](private.php?s=183b410f8bf182b9c678d2e3bd622085&do=newpm&u=2040855)


**[ kuralme ](/kuralme) ** commented  Jun 1, 2023


3. May 18th, 2022  [ #3 ](showthread.php?t=2475171&s=183b410f8bf182b9c678d2e3bd622085&p=14096170#post14096170)


Run the installer with default parameters, as the following commands assume
you used the default installation directory.


**[ marcosjl31 ](/marcosjl31) ** commented  Jun 6, 2023  •


You can’t perform that action at this time.


All reactions


* [ Pricing ](/pricing)


[
![@minggangw](https://avatars.githubusercontent.com/u/6469275?s=80&u=70b6e691a3a267c5cdb4ba55fcfc0721ccbe6830&v=4)
](/minggangw)


We read every piece of feedback, and take your input very seriously.


    kuralme@KME:~$ apt policy
    Package files:
     100 /var/lib/dpkg/status
         release a=now
     500 http://packages.microsoft.com/repos/code stable/main armhf Packages
         release o=code stable,a=stable,n=stable,l=code stable,c=main,b=armhf
         origin packages.microsoft.com
     500 http://packages.microsoft.com/repos/code stable/main arm64 Packages
         release o=code stable,a=stable,n=stable,l=code stable,c=main,b=arm64
         origin packages.microsoft.com
     500 http://packages.microsoft.com/repos/code stable/main amd64 Packages
         release o=code stable,a=stable,n=stable,l=code stable,c=main,b=amd64
         origin packages.microsoft.com
     500 https://esm.ubuntu.com/realtime/ubuntu jammy/main amd64 Packages
         release v=22.04,o=UbuntuRealtimeKernel,a=jammy,n=jammy,l=UbuntuRealtimeKernel,c=main,b=amd64
         origin esm.ubuntu.com
     500 https://esm.ubuntu.com/infra/ubuntu jammy-infra-updates/main amd64 Packages
         release v=22.04,o=UbuntuESM,a=jammy-infra-updates,n=jammy,l=UbuntuESM,c=main,b=amd64
         origin esm.ubuntu.com
     500 https://esm.ubuntu.com/infra/ubuntu jammy-infra-security/main amd64 Packages
         release v=22.04,o=UbuntuESM,a=jammy-infra-security,n=jammy,l=UbuntuESM,c=main,b=amd64
         origin esm.ubuntu.com
     500 https://esm.ubuntu.com/apps/ubuntu jammy-apps-security/main i386 Packages
         release v=22.04,o=UbuntuESMApps,a=jammy-apps-security,n=jammy,l=UbuntuESMApps,c=main,b=i386
         origin esm.ubuntu.com
     500 https://esm.ubuntu.com/apps/ubuntu jammy-apps-security/main amd64 Packages
         release v=22.04,o=UbuntuESMApps,a=jammy-apps-security,n=jammy,l=UbuntuESMApps,c=main,b=amd64
         origin esm.ubuntu.com
     500 http://packages.ros.org/ros2/ubuntu jammy/main amd64 Packages
         release o=ROS,a=jammy,n=jammy,l=ROS jammy,c=main,b=amd64
         origin packages.ros.org
     500 https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/amd64  Packages
         release v=1.0,o=https://nvidia.github.io/libnvidia-container,a=bionic,n=bionic,l=NVIDIA CORPORATION <cudatools@nvidia.com>,c=
         origin nvidia.github.io
     500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
         release o=Docker,a=jammy,l=Docker CE,c=stable,b=amd64
         origin download.docker.com
     500 http://dl.google.com/linux/chrome/deb stable/main amd64 Packages


**[ artivis ](/artivis) ** commented  May 31, 2023


Then proceed with regular ` ros-humble ` install

---

👍  12  zzgames, brean, jvalecillos, palavrov, gsavchenko97, sokhibjaynarov,
Rizo11, OshMH, dwangoac, BekzodRahmonjonov, and 2 more reacted with thumbs up
emoji


>            Debian architecture
>                The Debian architecture string, which specifies the binary
> tree in
>                the FTP archive. Examples: i386, sparc, hurd-i386.
>
>            Debian architecture tuple
>                A Debian architecture tuple is the fully qualified
> architecture
>                with all its components spelled out.  This differs with
> Debian
>                architectures in that at least the cpu component does not
> embed the
>                abi.  The current tuple has the form abi-libc-os-cpu.
> Examples:
>                base-gnu-linux-amd64, eabihf-musl-linux-arm.
>
>            Debian architecture wildcard
>                A Debian architecture wildcard is a special architecture
> string
>                that will match any real architecture being part of it.  The
>                general form is a Debian architecture tuple with four or less
>                elements, and with at least one of them being any.  Missing
>                elements of the tuple are prefixed implicitly as any, and
> thus the
>                following pairs are equivalent:
>
>                any-any-any-any = any
>                any-any-os-any = os-any
>                any-libc-any-any = libc-any-any
>
>                Examples: linux-any, any-i386, hurd-any, eabi-any-any-arm,
> musl-
>                any-any.
>
>            GNU system type
>                An architecture specification string consisting of two parts
>                separated by a hyphen: cpu and system.  Examples: i586-linux-
> gnu,
>                sparc-linux-gnu, i686-gnu, x86_64-netbsd.
>


The following packages have unmet dependencies:
libignition-math6-dev : Depends: libignition-math6 (= 6.15.0-1 ~~jammy) but
6.15.1-1~~ focal is to be installed
E: Unable to correct problems, you have held broken packages.
This is what I am getting. I wanted to try [ @arsenyvasilyev
](https://github.com/arsenyvasilyev) 's method but I don't have the correct
build name. Help would be appreciated.

---

All reactions


##  Re: Default processor architecture for x86_64


[
![@MirkoFerrati](https://avatars.githubusercontent.com/u/1209878?s=80&u=4517c653af67bc3b0efecd390d53c518a2699b76&v=4)
](/MirkoFerrati)


Did you have to change some other files in your case?

---

All reactions


Sorry, something went wrong.


Closed


**[ Kooshal71 ](/Kooshal71) ** commented  May 30, 2023


* bullet.3.17.nupkg


* Uninstall


[ Sign in
](/login?return_to=https%3A%2F%2Fgithub.com%2Fros2%2Fros2%2Fissues%2F1433)


Contributor


edited


> You think correctly on that.
>  EDIT: I showed you what was enabled on 22.04
>
>
> Code:
>
>     >     **_dpkg-architecture -l_**
>     DEB_BUILD_ARCH=amd64
>     DEB_BUILD_ARCH_ABI=base
>     DEB_BUILD_ARCH_BITS=64
>     DEB_BUILD_ARCH_CPU=amd64
>     DEB_BUILD_ARCH_ENDIAN=little
>     DEB_BUILD_ARCH_LIBC=gnu
>     DEB_BUILD_ARCH_OS=linux
>     DEB_BUILD_GNU_CPU=x86_64
>     DEB_BUILD_GNU_SYSTEM=linux-gnu
>     DEB_BUILD_GNU_TYPE=x86_64-linux-gnu
>     DEB_BUILD_MULTIARCH=x86_64-linux-gnu
>     DEB_HOST_ARCH=amd64
>     DEB_HOST_ARCH_ABI=base
>     DEB_HOST_ARCH_BITS=64
>     DEB_HOST_ARCH_CPU=amd64
>     DEB_HOST_ARCH_ENDIAN=little
>     DEB_HOST_ARCH_LIBC=gnu
>     DEB_HOST_ARCH_OS=linux
>     DEB_HOST_GNU_CPU=x86_64
>     DEB_HOST_GNU_SYSTEM=linux-gnu
>     DEB_HOST_GNU_TYPE=x86_64-linux-gnu
>     DEB_HOST_MULTIARCH=x86_64-linux-gnu
>     DEB_TARGET_ARCH=amd64
>     DEB_TARGET_ARCH_ABI=base
>     DEB_TARGET_ARCH_BITS=64
>     DEB_TARGET_ARCH_CPU=amd64
>     DEB_TARGET_ARCH_ENDIAN=little
>     DEB_TARGET_ARCH_LIBC=gnu
>     DEB_TARGET_ARCH_OS=linux
>     DEB_TARGET_GNU_CPU=x86_64
>     DEB_TARGET_GNU_SYSTEM=linux-gnu
>     DEB_TARGET_GNU_TYPE=x86_64-linux-gnu
>     DEB_TARGET_MULTIARCH=x86_64-linux-gnu


Hi [ @artivis ](https://github.com/artivis) .
After activating pro following the [ tutorial
](https://ubuntu.com/pro/tutorial) , I enabled it by "sudo pro enable
realtime-kernel" command. Here is my source list:


Copy link


[ Sign up
](/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-
name%3E%2F%3Crepo-
name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-
repo&source_repo=RobotWebTools%2Frclnodejs)


By Solution


Note


**[ minggangw ](/minggangw) ** commented  Oct 7, 2022


6. May 18th, 2022  [ #6 ](showthread.php?t=2475171&s=183b410f8bf182b9c678d2e3bd622085&p=14096179#post14096179)


* Make sure **Download debugging symbols** and **Download debug binaries** are checked.


#  Search code, repositories, users, issues, pull requests...


>     power management:
>
>     processor : 2
>     vendor_id : AuthenticAMD
>     cpu family        : 23
>     model             : 96
>     model name        : AMD Ryzen 5 4600H with Radeon Graphics
>     stepping  : 1
>     microcode : 0x8600103
>     cpu MHz           : 2994.402
>     cache size        : 512 KB
>     physical id       : 2
>     siblings  : 1
>     core id           : 0
>     cpu cores : 1
>     apicid            : 2
>     initial apicid    : 2
>     fpu               : yes
>     fpu_exception     : yes
>     cpuid level       : 16
>     wp                : yes
>     flags             : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge
> mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt
> pdpe1gb rdtscp lm rep_good nopl cpuid extd_apicid tsc_known_freq pni
> pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt
> tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy
> svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw perfctr_core ssbd
> ibrs ibpb stibp vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx
> smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves clzero xsaveerptr
> wbnoinvd arat npt nrip_save tsc_scale vmcb_clean umip rdpid
> arch_capabilities
>     bugs              : sysret_ss_attrs null_seg spectre_v1 spectre_v2
> spec_store_bypass
>     bogomips  : 5988.80
>     TLB size  : 1024 4K pages
>     clflush size      : 64
>     cache_alignment   : 64
>     address sizes     : 48 bits physical, 48 bits virtual
>     power management:
>


This path might change based on the installed MSVC version, the directory Qt
was installed to, and the version of Qt installed.


* Click Install.


None yet


Small workaround for me: instead of full ros-humble-desktop I was able to just
install ros-humble-ros-base and what I need ( rviz, ros-humble-rqt, ros-
humble-ros-gz-sim ...), maybe that's enough for someone else as well.

---

All reactions


[ Sign in
](/login?return_to=https%3A%2F%2Fgithub.com%2FRobotWebTools%2Frclnodejs%2Fissues%2F880)


     Hidden!      Distro
     Xubuntu Development Release


as suggested in one of the solutions at the same link. Let's see the full
output :)

---

All reactions


The instruction was removed, please check with [
https://github.com/RobotWebTools/rclnodejs/blob/c080755e1ccac0a47aba45a1e500c4c12c7e8103/docs/BUILDING.md#get-
ready-for-ros-2
](https://github.com/RobotWebTools/rclnodejs/blob/c080755e1ccac0a47aba45a1e500c4c12c7e8103/docs/BUILDING.md#get-
ready-for-ros-2)

---

All reactions


    apt-cache policy libgdm1
    apt-cache show -a libgdm1
    apt-cache policy libgdm-dev
    apt-cache show -a libgdm-dev

---

All reactions


If you're upgrading the gbm libraries you need to make sure to upgrade the `
-dev ` package as well to be compatible. This is a dependency of one or more
packages. And until that's installable on your system the ROS packages which
depend on it will not be installable.


[
![@artivis](https://avatars.githubusercontent.com/u/6572747?s=80&u=a5ee9abdebcc00d765cfbf4b19353ddfe7a527c6&v=4)
](/artivis)


#  Saved searches


##  Environment setup  ï