longer95479@home:~$

ssh a nx orin and make its docker pull work


问题场景:使用个人PC通过 ssh 连接到 orin nx,但由于网络问题,orin的 docker pull 命令无法正常使用。而个人pc已开启代理,端口为127.0.0.1:8889(具体地址端口可在 v2ray 的首选项里查看)。 解决思路则是将 ssh 的 orin 的本地端口8889 关联到个人pc的 127.0.0.1:8889 上,之后在docker的代理配置文件里配置代理地址端口为 127.0.0.1:8889。 使用...



[VINS-Fusion] Feature Manager

double FeatureManager::compensatedParallax2(const FeaturePerId &it_per_id, int frame_count)
{
  //check the second last frame is keyframe or not
  //parallax betwwen seconde last frame and third last frame
  const FeaturePerFrame &frame_i = it_per_id.feature_per_frame[frame_count - 2 - it_per_id.start_frame];
  const FeaturePerFrame &frame_j = it_per_id.feature_per_frame[frame_count - 1 - it_per_id.start_frame];

  double ans = 0;
  Vector3d p_j = frame_j.point;

  double u_j = p_j(0);
  double v_j = p_j(1);

  Vector3d p_i = frame_i.point;
  Vector3d p_i_comp;

  //int r_i = frame_count - 2;
  //int r_j = frame_count - 1;
  //p_i_comp = ric[camera_id_j].transpose() * Rs[r_j].transpose() * Rs[r_i] * ric[camera_id_i] * p_i;
  p_i_comp = p_i;
  double dep_i = p_i(2);
  double u_i = p_i(0) / dep_i;
  double v_i = p_i(1) / dep_i;
  double du = u_i - u_j, dv = v_i - v_j;

  double dep_i_comp = p_i_comp(2);
  double u_i_comp = p_i_comp(0) / dep_i_comp;
  double v_i_comp = p_i_comp(1) / dep_i_comp;
  double du_comp = u_i_comp - u_j, dv_comp = v_i_comp - v_j;

  ans = max(ans, sqrt(min(du * du + dv * dv, du_comp * du_comp + dv_comp * dv_comp)));

  return ans;
}

-->

feature manager 的主要数据结构为: class FeatureManager class FeaturePerId class FeaturePerFrame FeaturePerFrame 包括某帧内某个路标被观测的信息,如归一化平面坐标及速度、像素坐标、是否是双目、时间偏移。 FeaturePerId 则主要包括 vector<FeaturePerFrame> feature_per_frame,以及 frame_id、start_frame 等路标点个体级别的信息。值得注意的是,vins假设特征点是被连续观测到的,因此只记录开始的帧,即可推断出 vector 内其他观测所属的帧。 传入...

double FeatureManager::compensatedParallax2(const FeaturePerId &it_per_id, int frame_count)
{
  //check the second last frame is keyframe or not
  //parallax betwwen seconde last frame and third last frame
  const FeaturePerFrame &frame_i = it_per_id.feature_per_frame[frame_count - 2 - it_per_id.start_frame];
  const FeaturePerFrame &frame_j = it_per_id.feature_per_frame[frame_count - 1 - it_per_id.start_frame];

  double ans = 0;
  Vector3d p_j = frame_j.point;

  double u_j = p_j(0);
  double v_j = p_j(1);

  Vector3d p_i = frame_i.point;
  Vector3d p_i_comp;

  //int r_i = frame_count - 2;
  //int r_j = frame_count - 1;
  //p_i_comp = ric[camera_id_j].transpose() * Rs[r_j].transpose() * Rs[r_i] * ric[camera_id_i] * p_i;
  p_i_comp = p_i;
  double dep_i = p_i(2);
  double u_i = p_i(0) / dep_i;
  double v_i = p_i(1) / dep_i;
  double du = u_i - u_j, dv = v_i - v_j;

  double dep_i_comp = p_i_comp(2);
  double u_i_comp = p_i_comp(0) / dep_i_comp;
  double v_i_comp = p_i_comp(1) / dep_i_comp;
  double du_comp = u_i_comp - u_j, dv_comp = v_i_comp - v_j;

  ans = max(ans, sqrt(min(du * du + dv * dv, du_comp * du_comp + dv_comp * dv_comp)));

  return ans;
}
-->


[VINS-Fusion] Process Measurements


void Estimator::processMeasurements() 这个函数单独在一个线程内运行,无限循环,间隔2ms。 提取出各帧的特征点并收到了一系列的 IMU 数据后,就该开始处理这些数据了。 首先判断 featureBuf 队列是否为空,如果是空的,就什么也不做。若不空,则从 featureBuf 里提取出最早的特征点数据帧: void Estimator::processMeasurements() { while (1) { //printf("process measurments\n"); TicToc...



Total views. cowboys. Hits