Posts

Monday, 30 December 2019

slam papers list





  • Lidar SLAM System
(1) 2D SLAM
Gmapping
FastSLAM
HectorSLAM
KartoSLAM
LagoSLAM
CoreSLAM
Cartographer

(2) 3D SLAM
LOAM
LeGO-LOAM
Cartographer
IMLS-SLAM

(3) Deep learning with Lidar SLAM
Feature & Detection:
PointNetVLAD
VoxelNet
BirdNet
LMNet
PIXOR
YOLO3D
PointCNN
MV3D
Recognition & Segmentation:
PointNet
PointNet++
VoteNet
SegMap
SqueezeSeg
PointSIFT
PointWise
3P-RNN
SPG
SegMatch
KD-Network
DeepRemporalSeg
PointRCNN
Localization:
L3-Net
SuMA++

  • Visual SLAM System
(1) Sparse Visual SLAM
MonoSLAM
PTAM
ORB-SLAM (v1, v2)
Inertial ORB-SLAM
ProSLAM
ENFT-sfm
ENFT-SLAM
OpenVSLAM
TagSLAM
UcoSLAM

(2) SemiDense Visual SLAM
LSD-SLAM
SVO
SNN-SVO
DSO
EVO

(3) Dense Visual SLAM
DTAM
MLM SLAM
Kinect Fusion
DVO
RGBD-SLAM V2
Kintinuous
RTAB-MAP
Dynamic Fusion
VolumeDeform
Fusion4D
Elastic Fusion
InfiniTAM
Bundle Fusion

(4) Visual Inertial Odometry SLAM
SSF
MSCKF
MSCKF-VIO
ROVIO
OKVIS
VINS Mono
Vins Mobile
VINS Fusion
ICE-BA
Maplab
VI-ORB
StructVIO
RKSLAM

(5) Deep Learning with Visual SLAM
Feature & Detection:
Pop-up SLAM
SuperPoint
GCN-SLAM
SalientDSO
CubeSLAM
MonoGRNet
Recognition & Segmentation:
SLAM++
SemanticFusion
MarrNet
3DMV
Pix3D
ScanComplete
Fusion++
Mask-RCNN
SegMap
3D-SIS
DA-RNN
DenseFusion
CCNet
Recovery Scale:
CNN-SLAM
DeepVO
GS3D
UnDeepVO
GeoNet
CodeSLAM
GEN-SLAM
Deep-MVS
Pose Output & Optimization:
PoseNet
VINet
DeepVO
SFM-Net
VSO
MID-Fusion
VidLoc
Long-term Localization
X-View
Semantic Visual Localization
Dynamic SLAM
RDSLAM
DS-SLAM
MaskFusion
Co-Fusion
Detect-SLAM
DynaSLAM
StaticFusion

  • Lidar and Visual SLAM System
Multiple Sensors Calibration 
Camera & IMU:
Kalibr
Vins-Fusion
MSCKF-VIO
IMIU-TK
Camera & Depth:
BAD SLAM
Lidar & IMU:
LIO-Mapping
Lidar-Align
Camera & Lidar
Lidar-Camera
RegNet
LIMO
CalibNet
Autoware
SVIn2
Lidar and Visual Fusion
Hardware layer
Data layer
Task layer

Friday, 8 November 2019

Visualization of Convolutional Neural Networks for Monocular Depth Estimation








최근, CNN은 monocular depth estimation이라는 과제에서 큰 성공을 거두고 있다.
그런데 CNN이 어떻게 하나의 이미지에서 깊이를 유추할 수 있는가?
우리는 깊이 추정에 필요한 입력 이미지 픽셀을 구분해 CNN 추정을 시각화하겠다.
Optimization Problem: CNN이 depth map을 추정할 수 있는 최소 이미지 픽셀 수 찾기
CNN이 깊어서 최적화가 어려우면 다른 네트워크를 사용할 것을 제안한다.
이 최적화 문제(시각화)를 실내와 실외 장면 데이터 세트의 서로 다른 depth estimation network에 적용해서 reasonable한지 보자.


  • 인간이 depth 추정을 위해 고려하는 6가지: linear perspective, texture gradient, aerial perspective, relative size, interposition, light and shades
  • CNN의 depth 추정과 관련된 픽셀들

Proposed Approach

Optimization Problem
  1. RGB image로 Predicted Mask(M) 생성 - RGB image의 일부
  2. RGB image로 얻은 depth map과 M으로 얻은 depth map을 비교해서 (1)둘이 가장 비슷하고 (2)가장 작은 픽셀 수를 갖는 M 찾기.
  • G: M 찾는 net
  • N: depth estimation하는 net

Optimization formula 찾기. 3개로 실험해 본 결과 (c)가 제일 나아서 그걸로 학습함.
KITTI dataset에서 CNN이 이미지를 이렇게 보더라

CNN이 이미지를 이렇게 본다.
  1. Edge 중요
  2. Object이 있으면 내부 region을 고려함
  3. 소실점은 항상 중요하게 고려됨


Thursday, 18 July 2019

Easy way to download KITTI raw data with the script

Easy way to download KITTI raw data with the script


1. Get the script file here
http://www.cvlibs.net/download.php?file=raw_data_downloader.zip

2. Extract it.

3. Run the script
cd raw_data_downloader
chmod +x raw_data_downloader.sh
./raw_data_downloader.sh

Some TF version errors in [Text generation using a RNN with eager execution]

Some TF version errors in [Text generation using a RNN with eager execution]


Tensorflow RNN tutorials are basically based on the TF version 1.13 or higher.
I was following this one below.
https://www.tensorflow.org/tutorials/sequences/text_generation


  • Error 1

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-70-7589cf238f4d> in <module>
----> 1 sampled_indices = tf.random.categorical(example_batch_predictions[0], num_samples=1)
      2 #sampled_indices = tf.random.multinomial(example_batch_predictions[0], num_samples=1)
      3 # use tf.random.multinomial if using TF 1.12 or lower.
      4 sampled_indices = tf.squeeze(sampled_indices,axis=-1).numpy()

AttributeError: module 'tensorflow._api.v1.random' has no attribute 'categorical'

Solution

sampled_indices = tf.random.multinomial(example_batch_predictions[0], num_samples=1)
# use tf.random.multinomial if using TF 1.12 or lower.



  • Error 2

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-72-9ea97acf159a> in <module>
      4 # if using TF 1.12 or lower, use 'tf.keras.backend.sparse_categorical_crossentropy'
      5 
----> 6 example_batch_loss  = loss(target_example_batch, example_batch_predictions)
      7 print("Prediction shape: ", example_batch_predictions.shape, " # (batch_size, sequence_length, vocab_size)")
      8 print("scalar_loss:      ", example_batch_loss.numpy().mean())

<ipython-input-72-9ea97acf159a> in loss(labels, logits)
      1 def loss(labels, logits):
----> 2   return tf.keras.losses.sparse_categorical_crossentropy(labels, logits, from_logits=True)
      3   #return tf.keras.backend.sparse_categorical_crossentropy(labels, logits, from_logits=True)
      4 # if using TF 1.12 or lower, use 'tf.keras.backend.sparse_categorical_crossentropy'
      5 

TypeError: sparse_categorical_crossentropy() got an unexpected keyword argument 'from_logits'

Solution

return tf.keras.backend.sparse_categorical_crossentropy(labels, logits, from_logits=True)
# if using TF 1.12 or lower, use 'tf.keras.backend.sparse_categorical_crossentropy'


Monday, 8 July 2019

자율주행자동차의 결정, 계획, 제어

동작 결정 decision
모션 계획 motion planning
피드백 제어 control


  1.  동작 결정 behaviour decision
    • 이 모듈은 자율주행 자동차의 계획 및 제어 모듈에서 '보조 운전자'역할을 한다.
    • 데이터(위치, 속도, 가속도, 방향, 현재 차로 정보, 특정 반경 내의 인지 개체 정보 등)을 바탕으로 동작에 관련된 결정을 내릴 수 있도록 계산
      1. 경로 계획 모듈의 출력 값
        • 원하는 출발 지점부터 목적 지점에 이르는 차로 시퀀스
      2. 자율 주행 자동차 자체에 대한 속성
        • 주어진 차로, 속도, 방향에서의 상대적 위치, 현재 GPS 위치, 현재 차로, 현재 목표 차로에 대한 정보
      3. 자율 주행 자동차에 대한 히스토리 정보
        • 동작 결정 모듈의 이전 프레임, 즉 이전 사이클의 출력값에 대한 정보
      4. 자율 주행 자동차 주위의 장애물 정보
        • 주변의 모든 객체의 속도, 차로, 방향, 그리고 예측 궤도
      5. 트래픽 정보 및 맵 개체 정보
        • HD 맵에 정의된 차로 및 차로의 관계
      6. 현재 구간의 교통 규칙
        • 시내 제한 속도, 동작이 합법적인지 여부 등
    • 목표: 모든 정보를 활용해 자동차의 안전하고 효과적인 동작을 결정하는 것
      • 문제: 데이터 성격이 다 다르고, 지역별 교통 법규 또한 다 달라 하나의 수학모델로 판단하는 것이 어려움 -> 소프트웨어 공학 개념과 교통 규칙 기반 시스템을 설계하는 방식으로 해결!
      • EXAMPLE) Baysian model, Morkov Decision Process, Partially Obsevable Markov Decision Process


  • 마르코프 결정 과정 Markov Decision Process
    • 5가지 요소로 구성된 튜플(S,A,Pa,Ra,𝛾)로 정의
      • S: 자율 주행 자동차의 상태 공간 (자동차의 위치 & 맵 요소)
      • A: 동작 결정 출력 공간. 자율 주행 자동차가 수행할 수 있는 모든 동작을 고정된 집합으로 표현한 것
        • follow: 전방에 달리는 차를 추종하는 상태
        • switch lane: 차로 변경
        • turn left / right: 교차로에서 좌/우회전 하는 상태
        • yield: 다른 자동차에게 양보
        • overtake: 다른 차를 추월하는 상태
        • stop: 신호등과 보행자 앞에서 정지하는 상태
      • Pa(s, s') = Pa(s' | s, a)는 자율 주행 자동차가 현재 상태 s에서 동작 a를 수행할 때 상태 s'에 도달할 조건부 확률
      • Ra(s, s')는 reward function으로 상태 s에서 동작 a를 수행함으로써 상태 s'로 변환할 때 보상. 여기서 보상이란 상태 변환을 종합적으로 평가. (안전성, 편안함, 목적지 도달, 난이도 등)
        • 보상함수를 만들 때 고려해야 하는 것
          1. 목적지 도달: 경로에서 이탈하면 페널티, 경로를 잘 지키면 보상 지급
          2. 안전성 및 충돌 방지: 충돌을 발생시키면 페널티를 주고, 충돌 가능성이 낮거나 충돌 가능 지점과 거리가 멀수록 보상을 지급
          3. 편안함 및 부드러움: 비슷한 속도를 유지하며 가속 또는 감속하는 동작이 급격한 가속이나 감속을 하는 동작보다 더 높은 보상을 받아야 한다.
      • 𝛾: decay factor 미래보다 현재가 더 가치있게
    • 문제: S -> A로 표현되는 최적 정책을 찾는 것
  • 시나리오 기반의 분할 정복 접근법
    • divide and conquer개념을 적용해 자율 주행 자동차 주변을 여러가지 시나리오로 분할, 각 객체에 대한 individual decision을 계산 한 다음, 자동차 자체에 대한 synthetic decision을 계산해서 individual을 모두 취합
      • Synthetic decision: 자동차 자체가 어떻게 동작해야 하는지에 대한 것. 최상위 동작 결정
      • inidividual decision: 장애물, 신호등, 횡단보도, 정지선 등




  • 시나리오 구성 및 시스템 설계
    • 독립적인 작은 시나리오에 초점을 맞춰서 계산한 뒤 같은 계층의 독립 결정을 계산할 때, 경로 계획 의도와 이전 계층의 계산 결과를 공유
    • 계산 후에는 합성 결정으로 통합 -> divide and conquer


2. 모션 계획 motion planning
  • 궤적을 생성해서 실제 물리적으로 자동차를 제어하는피드백 제어 모듈로 보낸다.
  • 2차원 평면에서 특정 공통 속성 및 제약 조건을 갖는 궤적에 대한 최적화 문제 optimization
    • 최적화 개체 optimization object
      • 보통 각기 다른 후보 솔루션에 대한 cost로 표현
        1. 동작 결정 모듈의 출력값을 반드시 따라야 함. 정확하게 도달하도록
        2. 도로를 자연스럽게 따라서 이동
    • 제약조건 constraints
  • 모션 계획 솔루션
    1. 시공간 궤적 계획 문제를 '경로 계획'과 '속도 계획' 두 가지로 나누어서 처리.
      1. 경로 계획: 주어진 동작 결정 모듈 출력 값과 비용 함수 정의로부터 2차원 평면상의 궤적 모양을 계산하는 문제만 해결
      2. 속도 계획: 경로 계획의 결과에 따라 자율 주행 자동차가 주어진 궤적을 따라가는 방식을 결정
      3. 시내 저속 주행에 적합
    2. 1처럼 나누지 않고 2개의 직교 방향에서 모션계획 처리
      1. SL coordinate system 을 따르는 s(종방향), l(횡방향)
      2. 계획한 궤적의 형태에 속도가 자연스럽게 반영된다는 것
      3. 고속도로 고속 주행에 적합



3. 피드백 제어
  • 자전거 모델
  • PID 제어



    Thursday, 4 July 2019

    자율주행을 위한 클라이언트 시스템




    자율주행시스템 = 소프트웨어 + 하드웨어
    다양한 컴포넌트들이 상호작용하려면 OS가 필요한데, 우리가 쓰는 ROS를 중심으로 알아보자.

    < 복잡한 자율주행시스템 >


    1. 센싱 - GPS/ LiDAR/ Camera
      1. 센서는 주변 환경에서 데이터를 수집
      2. 인지와 동작 연산을 수행하는 컴퓨터 플랫폼으로 전달
    2. 인지 - 로컬라이제이션/ 개체 인식/ 개체 추적
    3. 의사결정 - 예측/ 경로 계획/ 장애물 회피
      1. 동작 계획 생성
      2. 제어 플랫폼으로 전달
    이 전체를 통합하는 것은 클라이언트 시스템 위에서 이뤄지며, 클라이언트 시스템은 다시 OS와 하드웨어 플랫폼으로 구성된다. OS가 무엇을 하느냐? 데이터가 증가할 수록 시스템 자원을 할당하기 힘들어지는데 OS가 각 컴포넌트마다 사용할 수 있는 자원의 양을 제한해준다.


    <자율 주행을 위한 OS>

    • OS의 두 가지 핵심 기능
    1. 통신
    2. 자원할당
    • ROS
    1. 노드 node: 노드는 어떤 일을 수행하는 과정이다. ex. 모터 제어 노드는 모터에 대한 정보를 읽어서 모터의 회전을 제어한다. 경로 계획 노드는 모바일 플랫폼의 동작 계획(motion planning)을 구현하는데 사용된다.
    2. 노드 관리자 node manager/ 마스터 master: 다른 노드를 관리한다. 각 노드마다 자신에 대한 정보를 노드 관리자에 등록해야 한다. 노드 관리자는 노드 운영에 관련된 설정 매개변수를 중앙에 저장.
    3. 매개변수 서버 parameter server: 매개변수 서버는 시스템에 있는 노드의 운영에 관련된 설정 매개변수를 중앙에 저장
    4. 메시지 message: 노드끼리 주고받는 정보
    5. 토픽 topic: 발행-구독 방식의 통신 메커니즘, 어떤 노드가 특정 토픽에 메시지를 발행하면 이 토픽을 구독하던 다른 노드는 그 노드가 발행한 메시지를 받게 됨.
    6. 서비스 service:1 대 1 통신 메커니즘, 노드가 서비스 노드에서 제공하는 서비스를 요청하면 두 노드 사이의 통신 채널을 만들어줌.

    • 시스템 신뢰성
      • 시스템의 견고성 robustness와 신뢰성을 높이도록 마스터 노드를 분산하는 것이 필요
      • 어떻게? 주키퍼 ZooKeeper 활용
        • 여러 개의 마스터 노드를 구동해 하나는 액티브 마스터 노드로 작동하고 나머지는 백업용으로 구동
        • 액티브 마스터 노드가 뻗을 경우, 백업 마스터 노드 중 하나를 새로운 액티브 마스터 노드로 선정해서 작동시키면 됨! -> 견고성 확보
        • 모든 노드의 상태를 감시하는 모니터 노드를 추가해야 함.
          • 각 시스템에 있는 노드는 ZooKeeper에게 심박Heartbeat message를 주기적으로 보내는데, 일정 시간동안 심박 메시지를 받지 못했다면 그 노드는 죽었다고 간주
          • 그러면 ZooKeeper는 모니터 노드에게 그 노드가 죽었으니 새로 구동하라고 알려줌
          • 상태 / 무상태 두 경우가 있고, 상태를 저장하면 재구동 시 마지막 저장 상태를 이어서 시작 (-> 심박메시지를 보낼 때 상태 정보를 함께 보내기도 함)
    • 자원 관리 및 보완
      • 노드 중 하나가 공격을 당했다! -> 

    <컴퓨팅 플랫폼>

    자율 주행 자동차에 장착된 센서들은 초당 2GB 이상의 데이터를 생성 및 전송
    -> 컴퓨팅 플랫폼의 설계 방식이 실시간 성능뿐만 아니라 자율 주행 시스템의 견고성에 직접적인 영향을 미침
    * 문제는: 비용, 전력 소비량, 방열heat dissipation

    • 컴퓨팅 플랫폼 구현 [4]
      • 기존 컴퓨팅 플랫폼
    여기서 사용한 컴퓨팅 플랫폼은 1세대에 해당하며, 2개의 컴퓨팅 박스로 구성되는데, 각각 인텔 제온 E5프로세서와4~8개의엔비디아 K80GPU 가속기를 장착하고 이들을 PCI-E 버스로 연결했다. 이렇게구성한 플랫폼을 통해 최대로 발휘히는 성능은 (12개의 코어로 구성된) CPU를 통해 400GOPS/s 수준으로 400W의 전력을 사용한다. 각각의 GPU마다 8TOPS/s를 내며 전력은 300W를 소비한다. 이들을 모두 합해서 전체 시스템이 발휘하는 성능은 3,000W 전력 소비량으로 64.5TOPS/s의 성능을 발휘한다. 이렇게 구성한 컴퓨팅박스는 차량 주위에 설치된 12개의 고해상도 카메라와 연결하여 개체 감지 및 개체추적 태스크를 수행한다. 라이다 장치는 차량의 꼭대기에 장착해 차량에 대한 로컬라이제이션과 장애물 회피 기능을 담당한다. 두 번째 컴퓨팅 박스는 첫 번째 박스와 동일한 태스크를 수행하며, 시스템의 신뢰성을 보장하기 위한 용도로 장착한다. 즉, 첫 번째 박스가 죽으면 두 번째 박스가 즉시 역할을 넘겨받는다. 두 박스 모두 최고로 작동하는 최악의 경우, 5,000W의 전력을 소비하면서 엄청난 열을 발산한다. 또한 한 박스를 구축하는 데 드는 비용은 미화 20,000~30,000달러에 육박해서, 일반소비자가 솔루션을 구성하는 데 있어 감당할 수 없는 수준이다.
      • 기존 컴퓨팅 솔루션
        • 자율 주행을 위한 GPU 솔루션 중 가장 대표적인 엔비디아 PX 솔루션
          • PX2에는 2개의 테그라 Tegra SoC와 2개의 파스칼 Pascal 그래픽스 프로세서 장착
          • AlexNet을 구동할 때 초당 2800개 이미지 처리 가능
        • DSP 기반 솔루션인 텍사스 인스트러먼츠 Texas Instuments의 TDA
        • TPGA기반 솔루션
        • ASIC 기반 솔루션

    • 컴퓨터 아키텍쳐 설계 분석
      1. 부하 workload 종류에 따라 가장 적합한 컴퓨팅 장치
      2. 극단적인 경우 자율 주행에 관련된 태스크를 수행하는 데 있어 모바일 프로세서로도 충분한지 여부
      3. 자율 주행을 위한 효율적인 컴퓨팅 플랫폼을 설계하는 방법
    이 세 가지를 고려해 컴퓨팅 플랫폼을 구성해야 한다.
    • 부하 workload 종류에 따라 가장 적합한 컴퓨팅 장치
      • = convolution과 feature extration에 적합한 장치
      • CPU, GPU, DSP에서 convolution, feature extraction을 수행해보고 성능과 에너지 소비량을 비교해보겠음

        • 컨볼루션) GPU가 가장 성능이 좋고(빠름), 에너지 소비량도 적음
        • 특징 추출) DSP가 가장 성능이 좋고(빠름), 에너지 소비량도 적음
      • 로컬라이제이션, 계획, 장애물 회피같은 자율 주행 관련 태스크에 대해서는 실험하지 않았는데, 이것들은 주로 제어 연산이라 CPU가 당연히 좋을 듯
    • 모바일 프로세서 기반의 자율 주행
      • 자율주행 시스템의 한계를 알아보자. ARM모바일 SoC에서 어느 정도 성능을 보여주는지

        • 센서 데이터 처리 (특징 추출, 옵티컬 플로우) -> DSP
        • 딥러닝 (개체 인식) -> GPU
        • 로컬라이제이션 -> 2개의 CPU 스레드
          • 1 -> 실시간 경로 계획
          • 2 -> 장애물 회피
      • ARM SoC에서 그럭저럭 잘 됨
        • 로컬라이제이션 -> 25개 이미지/s
        • 딥 러닝 -> 2~3개/s
        • 계획 및 제어 -> 하나의 경로를 계획하는데 6ms 이내에 처리
        • 전체 시스템의 평균 에너지 소비량 = 11W

    • 컴퓨팅 플랫폼 설계
      • 각 태스크마다 에너지 소비량과 성능 측면에서 가장 효율적인 컴퓨팅 장치를 적용하도록 이종 컴퓨팅 자원을 최대한 활용했기 때문에 >>>좋은 성능을 낼 수 있었다.<<<

      • 컴퓨팅 플랫폼
        • I/O 서브시스템: SoC 아키텍쳐와 프론트엔드 센서 상호작용
        • DSP: 특징 추출을 위해 이미지 스트림을 전처리
        • GPU: 개체 인식과 몇 가지 딥 러닝 태스크 수행
        • CPU: 계획 및 제어와 상호작용 태스크를 수행하는 멀티코어
        • FPGA: 데이터 압축과 업로드, 개체 추적, 트래픽 예측 등을 위한 동적 재설정/ 시분할 지원










    [Real-time Depth Enhanced Monocular Odometry] Review



    Real-Time Depth Enhanced Monocular Odometry Review


    Abstract

    Depth정보는 RGB-D 카메라나 라이다를 이용하여 많이 계산되고 있다, 하지만 센서가 depth 정보를 다 알지 못해 이미지 상당 부분의 depth를 알 수 없다.
    -> 이 논문에서는 sparse한 depth에서도 camera motion 회복을 통해 depth를 활용할 수 있게 하는 방법을 제안한다.

    System Overview

    1. Sensor Hardware

    (a) Xtion Pro Live RGB-D Camera
    (b) Custom Build Camera and 3D Lidar

    2. Software System Overview

    First, feature tracking

    • Kanade Lucas Tomasi(KLT) method를 사용하여 Harris Corner를 추적하는 모듈
    • 해당 모듈에서 추적된 Visual Features는 Depth MAp Registration 모듈에서 Depth값과 결합
    초록: depth map에서 depth를 뽑아낸 점
    파랑: 추정된 camera pose와 triangulation을 통해 depth를 알아낸 점
    빨강: depth가 없는(모르는) 점

    Second, Depth Map Registration
    • Depth 데이터를 Estimated Motion에 따라 맵에 등록시키는 모듈
    • 해당 모듈에서 Visual Feature와 Depth값이 결합됨
    • Depth Map에 없는 Visual Feature들의 경우 Triangulation을 통해 Depth값을 추정하게 됨
    Third, Frame to Frame Motion Estimation
    • Visual Feature(+Depth)를 입력으로 받아서 Motion Estimation을 수행하는 모듈
    • Known Depth, Unknown Depth의 경우를 모두 처리하여 Motion Estimation
    • Visual Feature의 카메라 모션은 아래와 같이 표현한다.

    Fourth, Bundle Adjustment
    • iSAM Library를 사용하여 Estimated Motion의 누적된 오차를 제거해주는 모듈
    • User-defined Camera model을 사용할 수 있기 때문에 iSAM을 사용함
    • 0.25~1.0Hz 주기로 동작한다.
    Fifth, Transform Integration
    • Frame to Frame Motion의 High-Frequency Transform과 BA의 Low-Frequency Transform을 입력으로 받아 최종 Transform을 반환하는 모듈

    Monday, 1 July 2019

    [rospack] Error: package 'ORB_SLAM2' not found

    nvidia@tegra-ubuntu:~$ echo $ROS_PACKAGE_PATH
    /opt/ros/kinetic/share
    nvidia@tegra-ubuntu:~$ source ~/catkin_ws/devel/setup.bash
    nvidia@tegra-ubuntu:~$ echo $ROS_PACKAGE_PATH
    /home/nvidia/catkin_ws/src:/opt/ros/kinetic/share



    new... error... occurs..

    Wednesday, 19 June 2019

    ros with usb_cam on Jetson TX2

    How to use usb_cam with ros kinetic on jetson tx2

    Nvidia Jetson TX2 
    Ubuntu 16.04 
    ROS Kinetic
    1. Create a new workspace catkin_ws in the root directory
    mkdir -p ~/catkin_ws/src
    cd catkin_ws/src/
    2. Download usb_cam package
    git clone https://github.com/bosch-ros-pkg/usb_cam.git
    3. Go to the workspace directory to compile
    cd ~/catkin_ws
    catkin_make
    4. Compile the specific information:
    Base path: /home/nvidia/catkin_ws
    Source space: /home/nvidia/catkin_ws/src
    Build space: /home/nvidia/catkin_ws/build
    Devel space: /home/nvidia/catkin_ws/devel
    Install space: /home/nvidia/catkin_ws/install
    Creating symlink "/home/nvidia/catkin_ws/src/CMakeLists.txt" pointing to "/opt/ros/kinetic/share/catkin/cmake/toplevel.cmake"
    ####
    #### Running command: "cmake /home/nvidia/catkin_ws/src -DCATKIN_DEVEL_PREFIX=/home/nvidia/catkin_ws/devel -DCMAKE_INSTALL_PREFIX=/home/nvidia/catkin_ws/install -G Unix Makefiles" in "/home/nvidia/catkin_ws/build"
    ####
    -- The C compiler identification is GNU 5.4.0
    -- The CXX compiler identification is GNU 5.4.0
    -- Check for working C compiler: /usr/bin/cc
    -- Check for working C compiler: /usr/bin/cc -- works
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- Check for working CXX compiler: /usr/bin/c++
    -- Check for working CXX compiler: /usr/bin/c++ -- works
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Using CATKIN_DEVEL_PREFIX: /home/nvidia/catkin_ws/devel
    -- Using CMAKE_PREFIX_PATH: /opt/ros/kinetic
    -- This workspace overlays: /opt/ros/kinetic
    -- Found PythonInterp: /usr/bin/python (found version "2.7.12") 
    -- Using PYTHON_EXECUTABLE: /usr/bin/python
    -- Using Debian Python package layout
    -- Using empy: /usr/bin/empy
    -- Using CATKIN_ENABLE_TESTING: ON
    -- Call enable_testing()
    -- Using CATKIN_TEST_RESULTS_DIR: /home/nvidia/catkin_ws/build/test_results
    -- Looking for pthread.h
    -- Looking for pthread.h - found
    -- Looking for pthread_create
    -- Looking for pthread_create - not found
    -- Looking for pthread_create in pthreads
    -- Looking for pthread_create in pthreads - not found
    -- Looking for pthread_create in pthread
    -- Looking for pthread_create in pthread - found
    -- Found Threads: TRUE  
    -- Found gtest sources under '/usr/src/gtest': gtests will be built
    -- Using Python nosetests: /usr/bin/nosetests-2.7
    -- catkin 0.7.6
    -- BUILD_SHARED_LIBS is on
    -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    -- ~~  traversing 1 packages in topological order:
    -- ~~  - usb_cam
    -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    -- +++ processing catkin package: 'usb_cam'
    -- ==> add_subdirectory(usb_cam)
    -- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") 
    -- Checking for module 'libavcodec'
    --   Found libavcodec, version 56.60.100
    -- Checking for module 'libswscale'
    --   Found libswscale, version 3.1.101
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/nvidia/catkin_ws/build
    ####
    #### Running command: "make -j4 -l4" in "/home/nvidia/catkin_ws/build"
    ####
    Scanning dependencies of target usb_cam
    [ 25%] Building CXX object usb_cam/CMakeFiles/usb_cam.dir/src/usb_cam.cpp.o
    [ 50%] Linking CXX shared library /home/nvidia/catkin_ws/devel/lib/libusb_cam.so
    [ 50%] Built target usb_cam
    Scanning dependencies of target usb_cam_node
    [ 75%] Building CXX object usb_cam/CMakeFiles/usb_cam_node.dir/nodes/usb_cam_node.cpp.o
    [100%] Linking CXX executable /home/nvidia/catkin_ws/devel/lib/usb_cam/usb_cam_node
    [100%] Built target usb_cam_node
    5. Environment variable update operation
    source ~/catkin_ws/devel/setup.bash
    6. Open the camera startup configuration file usb_cam-test.launch in the workspace directory.
    cd ~/catkin_ws/src/usb_cam/launch
    gedit usb_cam-test.launch
    7. The usb_cam-test.launch file information is as follows:
    <launch>
    <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
    <param name="video_device" value="/dev/video1" />
    <param name="image_width" value="640" />
    <param name="image_height" value="480" />
    <param name="pixel_format" value="yuyv" />
    <param name="camera_frame_id" value="usb_cam" />
    <param name="io_method" value="mmap"/>
    </node>
    <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
    <remap from="image" to="/usb_cam/image_raw"/>
    <param name="autosize" value="true" />
    </node>
    </launch>
    
    8. Since the TX2 comes with an onboard camera, the performance of the onboard camera ("/dev/video0") is not good, so we recommend using a take-away camera. Need to adjust the value of the video_device value to "/dev/video1" 
    9. Execute the following command to call the camera
    roslaunch usb_cam-test.launch
    10. The results of the operation:
    ... logging to /home/nvidia/.ros/log/4b9c8574-9072-11e7-bf53-00044b8caad5/roslaunch-tegra-ubuntu-3059.log
    Checking log directory for disk usage. This may take awhile.
    Press Ctrl-C to interrupt
    Done checking log file disk usage. Usage is <1GB.
    
    started roslaunch server http://tegra-ubuntu:35309/
    
    SUMMARY
    ========
    
    PARAMETERS
     * /image_view/autosize: True
     * /rosdistro: kinetic
     * /rosversion: 1.12.7
     * /usb_cam/camera_frame_id: usb_cam
     * /usb_cam/image_height: 480
     * /usb_cam/image_width: 640
     * /usb_cam/io_method: mmap
     * /usb_cam/pixel_format: yuyv
     * /usb_cam/video_device: /dev/video1
    
    NODES
      /
        image_view (image_view/image_view)
        usb_cam (usb_cam/usb_cam_node)
    
    ROS_MASTER_URI=http://localhost:11311
    
    core service [/rosout] found
    process[usb_cam-1]: started with pid [3078]
    process[image_view-2]: started with pid [3079]
    init done
    [ INFO] [1504421929.509447030]: Using transport "raw"
    [ INFO] [1504421929.756668326]: using default calibration URL
    [ INFO] [1504421929.757037809]: camera calibration URL: file:///home/nvidia/.ros/camera_info/head_camera.yaml
    [ INFO] [1504421929.757321401]: Unable to open camera calibration file [/home/nvidia/.ros/camera_info/head_camera.yaml]
    [ WARN] [1504421929.757445853]: Camera calibration file /home/nvidia/.ros/camera_info/head_camera.yaml not found.
    [ INFO] [1504421929.757588513]: Starting 'head_camera' (/dev/video1) at 640x480 via mmap (yuyv) at 30 FPS
    [ WARN] [1504421930.977394215]: unknown control 'focus_auto'
    
    The pop-up camera screen will appear on your monitor.

    [ new blog ]

    new blog https://jihyo-jeon.github.io/