분류 전체보기
-
Why gRPC ? 다른 분야도 마찬가지이지만, 주행 중인 모바일 로봇은 안전상의 이유로 특히 초저지연 통신을 구축할 필요가 있습니다. (장애물 회피 등) 보통의 개발 로봇의 경우 ROS 1,2를 기반으로 이미지 데이터를 받아오고 이를 처리합니다. 하지만 범용성에 초점을 두고 개발된 ROS 통신 자체의 latency 때문에 상용 로봇 단계로 갈 수록 ROS가 아닌 커스텀 통신 패키지를 사용하여 더 빠른 통신 시스템을 구축하게 됩니다. gRPC는 프로토콜 버퍼를 직접 정의함으로써 사용자가 원하는 형태로 데이터를 보낼 수 있고, 인터페이스가 쉬우며 HTTP/2 기반으로 속도가 빠르기 때문에 gRPC를 이용하여 로봇 센서 데이터를 송수신하는 것은 다양한 측면에서 이점이 많습니다. 앞으로의 포스팅을 통해서 ..
로봇을 위한 저지연 통신 구축, gRPC (1) : gRPC를 사용하는 이유, 설치 방법Why gRPC ? 다른 분야도 마찬가지이지만, 주행 중인 모바일 로봇은 안전상의 이유로 특히 초저지연 통신을 구축할 필요가 있습니다. (장애물 회피 등) 보통의 개발 로봇의 경우 ROS 1,2를 기반으로 이미지 데이터를 받아오고 이를 처리합니다. 하지만 범용성에 초점을 두고 개발된 ROS 통신 자체의 latency 때문에 상용 로봇 단계로 갈 수록 ROS가 아닌 커스텀 통신 패키지를 사용하여 더 빠른 통신 시스템을 구축하게 됩니다. gRPC는 프로토콜 버퍼를 직접 정의함으로써 사용자가 원하는 형태로 데이터를 보낼 수 있고, 인터페이스가 쉬우며 HTTP/2 기반으로 속도가 빠르기 때문에 gRPC를 이용하여 로봇 센서 데이터를 송수신하는 것은 다양한 측면에서 이점이 많습니다. 앞으로의 포스팅을 통해서 ..
2024.06.12 -
RKNN 을 시작하신다면 일단 두 가지 컴퓨터를 가지고 계실 겁니다. 1) 리눅스 우분투 머신2) 우분투가 깔려 있는 오렌지 파이 RKNN 을 사용하시려면 두 가지가 다 필요합니다. 1. Ubuntu 20.04 에서 rknn_toolkit 2 깔기 오렌지 파이를 쓰기 위해 rknn 을 사용함에도 불구하고 Ubuntu 에 rknn_toolkit2 를 깔아야 하는 이유는 , 오렌지 파이에서는 최신 rknn 툴킷 2.0을 사용할 수 없기 때문입니다. https://github.com/airockchip/rknn-toolkit2/ GitHub - airockchip/rknn-toolkit2Contribute to airockchip/rknn-toolkit2 development by creating an a..
싱글보드 컴퓨터 위에서 돌아가는 딥러닝 모델, RKNN (2) : 설치RKNN 을 시작하신다면 일단 두 가지 컴퓨터를 가지고 계실 겁니다. 1) 리눅스 우분투 머신2) 우분투가 깔려 있는 오렌지 파이 RKNN 을 사용하시려면 두 가지가 다 필요합니다. 1. Ubuntu 20.04 에서 rknn_toolkit 2 깔기 오렌지 파이를 쓰기 위해 rknn 을 사용함에도 불구하고 Ubuntu 에 rknn_toolkit2 를 깔아야 하는 이유는 , 오렌지 파이에서는 최신 rknn 툴킷 2.0을 사용할 수 없기 때문입니다. https://github.com/airockchip/rknn-toolkit2/ GitHub - airockchip/rknn-toolkit2Contribute to airockchip/rknn-toolkit2 development by creating an a..
2024.05.10 -
RKNN toolkit 은 model 변환, inference, 그리고 모델 성능 평가를 PC 혹은 RK 칩 시리즈에서 수행할 수 있도록 하는 SDK입니다. 오렌지 파이 에는 Rockchip 이라는 회사에서 만든 NPU (RK3588) 가 탑재되어 있는데, RKNN 은 작고 소박한 NPU 에서 큰 딥러닝 모델이 돌아갈 수 있도록 최적화하는 패키지입니다. TensorRT 의 Rockchip 버전이라고 보시면 될 것 같습니다. RKNN에는 다음과 같은 기능들이 있습니다. Model Conversion : Caffe, Tensorflow, ONNX, Darknet 모델들을 RKNN 모델로 변환할 수 있습니다.Quantization : float 모델을 quantization 모델로 변환할 수 있습니다.Mod..
싱글보드 컴퓨터 위에서 돌아가는 딥러닝 모델, RKNN (1) : OverviewRKNN toolkit 은 model 변환, inference, 그리고 모델 성능 평가를 PC 혹은 RK 칩 시리즈에서 수행할 수 있도록 하는 SDK입니다. 오렌지 파이 에는 Rockchip 이라는 회사에서 만든 NPU (RK3588) 가 탑재되어 있는데, RKNN 은 작고 소박한 NPU 에서 큰 딥러닝 모델이 돌아갈 수 있도록 최적화하는 패키지입니다. TensorRT 의 Rockchip 버전이라고 보시면 될 것 같습니다. RKNN에는 다음과 같은 기능들이 있습니다. Model Conversion : Caffe, Tensorflow, ONNX, Darknet 모델들을 RKNN 모델로 변환할 수 있습니다.Quantization : float 모델을 quantization 모델로 변환할 수 있습니다.Mod..
2024.05.10 -
FAST SLAM 은 EKF-SLAM 과 비슷하게 Feature 를 이용해서 map 을 작성하는 SLAM 방식입니다. 다만 EKF 와는 달리, pose 의 가정을 Gaussian 으로 하지 않고 파티클 필터를 사용합니다. 이전 Monte-Carlo Localization 에서 state 로 두었던 것은 1차원, 혹은 2차원 상에서의 로봇의 pose 였습니다. 그런데 우리가 다루는 환경은 3차원이고, 차원의 갯수가 늘어날 수록 파티클 갯수도 지수적으로 증가하게 됩니다. 따라서 파티클 필터는 파티클의 갯수가 많지 않은 low-dimension 에서 잘 작동하는 것입니다. 그래서 EKF SLAM 에서처럼 state 를 정의한다면 너무나 많은 파티클들이 필요해집니다. 이것이 랜드마크까지 포함하고 있는 stat..
FAST-SLAM : Feature Based SLAM with Particle FiltersFAST SLAM 은 EKF-SLAM 과 비슷하게 Feature 를 이용해서 map 을 작성하는 SLAM 방식입니다. 다만 EKF 와는 달리, pose 의 가정을 Gaussian 으로 하지 않고 파티클 필터를 사용합니다. 이전 Monte-Carlo Localization 에서 state 로 두었던 것은 1차원, 혹은 2차원 상에서의 로봇의 pose 였습니다. 그런데 우리가 다루는 환경은 3차원이고, 차원의 갯수가 늘어날 수록 파티클 갯수도 지수적으로 증가하게 됩니다. 따라서 파티클 필터는 파티클의 갯수가 많지 않은 low-dimension 에서 잘 작동하는 것입니다. 그래서 EKF SLAM 에서처럼 state 를 정의한다면 너무나 많은 파티클들이 필요해집니다. 이것이 랜드마크까지 포함하고 있는 stat..
2024.05.10 -
Particle Filter 를 이용해서 Localization 을 하는 방식을 Monte-Carlo Localization 이라고 합니다. 지금까지는 칼만 필터를 사용했는데, 칼만 필터의 가장 기본적인 전제는 선형성과 가우시안 필터였습니다. 이 말은 확률 분포를 (랜드마크, 혹은 로봇이 있을 확률 등) 두 개의 파라미터로 표현할 수 있다는 것입니다. State 가 진행됨에 따라서 그 가우시안 분포가 계속 유지되게 하기 위해서는 선형성을 유지해야 했습니다. 다만 실제 세계에서는 선형적으로 State 가 바뀌는 경우가 잘 없기 때문에 EKF 등을 도입했습니다. 칼만 필터는 가우시안 분포를 사용하기 때문에 Parametric 한 방법이라고 말 할 수 있습니다. 그렇지만 이는 선형성을 가정했고, 아무리 EKF..
파티클 필터와 Monte Carlo LocalizationParticle Filter 를 이용해서 Localization 을 하는 방식을 Monte-Carlo Localization 이라고 합니다. 지금까지는 칼만 필터를 사용했는데, 칼만 필터의 가장 기본적인 전제는 선형성과 가우시안 필터였습니다. 이 말은 확률 분포를 (랜드마크, 혹은 로봇이 있을 확률 등) 두 개의 파라미터로 표현할 수 있다는 것입니다. State 가 진행됨에 따라서 그 가우시안 분포가 계속 유지되게 하기 위해서는 선형성을 유지해야 했습니다. 다만 실제 세계에서는 선형적으로 State 가 바뀌는 경우가 잘 없기 때문에 EKF 등을 도입했습니다. 칼만 필터는 가우시안 분포를 사용하기 때문에 Parametric 한 방법이라고 말 할 수 있습니다. 그렇지만 이는 선형성을 가정했고, 아무리 EKF..
2024.04.19 -
다음은 Ceres-Solver 튜토리얼 사이트 (http://ceres-solver.org/nnls_tutorial.html) 를 번역하고 추가적인 설명을 덧붙인 글입니다. Ceres Solver는 대규모 비선형 최적화 문제를 푸는 오픈소스 C++ 라이브러리이다. 구글 엔지니어들에 의해 개발되었고, 특히 컴퓨터 비전, 로봇공학 등의 분야에서 자주 사용된다. 이 라이브러리는 Levenberg-Marquardt, Dogleg, 및 이러한 방법을 확장한 Trust Region 방식과 같은 최적화 알고리즘을 제공한다. Ceres Solver의 주요 특징은 다음과 같다: 자동 미분 지원: 사용자는 비선형 함수의 수식을 제공하면 Ceres가 자동으로 미분을 계산한다. 이는 복잡한 함수에 대한 미분을 직접 계산할 필..
Ceres-Solver Tutorial : 최적화 문제를 푸는 라이브러리 (1)다음은 Ceres-Solver 튜토리얼 사이트 (http://ceres-solver.org/nnls_tutorial.html) 를 번역하고 추가적인 설명을 덧붙인 글입니다. Ceres Solver는 대규모 비선형 최적화 문제를 푸는 오픈소스 C++ 라이브러리이다. 구글 엔지니어들에 의해 개발되었고, 특히 컴퓨터 비전, 로봇공학 등의 분야에서 자주 사용된다. 이 라이브러리는 Levenberg-Marquardt, Dogleg, 및 이러한 방법을 확장한 Trust Region 방식과 같은 최적화 알고리즘을 제공한다. Ceres Solver의 주요 특징은 다음과 같다: 자동 미분 지원: 사용자는 비선형 함수의 수식을 제공하면 Ceres가 자동으로 미분을 계산한다. 이는 복잡한 함수에 대한 미분을 직접 계산할 필..
2024.04.17 -
IntroductionSLAM 은 State 의 확률 분포를 Estimation 하는 문제입니다. 우리는 이때 Markov 가정을 적용해서 내가 현재의 State 를 알기 위해서는 1. 이 전 단계의 state 와 2. 이 전 단계에서 현재의 state 로 오기 위한 명령 3. 현재의 state 에서 주변 환경으로부터 획득한 정보 이 세 가지의 값이 있으면 매 단계마다 state 를 update 할 수 있습니다. 그래서 이러한 예측에 전통적으로 많이 사용되었던 Bayes 필터는 두 가지의 단계가 있습니다. 첫 번째는 Prediction, 두 번째는 Correction 인데요, Prediction 은 과거의 State 와 Control 을 이용해서 현재의 State 를 예측하는 단계입니다. 어떤 예측을 수..
SLAM 에서의 Kalman filter : 콘셉트부터 EKF 까지IntroductionSLAM 은 State 의 확률 분포를 Estimation 하는 문제입니다. 우리는 이때 Markov 가정을 적용해서 내가 현재의 State 를 알기 위해서는 1. 이 전 단계의 state 와 2. 이 전 단계에서 현재의 state 로 오기 위한 명령 3. 현재의 state 에서 주변 환경으로부터 획득한 정보 이 세 가지의 값이 있으면 매 단계마다 state 를 update 할 수 있습니다. 그래서 이러한 예측에 전통적으로 많이 사용되었던 Bayes 필터는 두 가지의 단계가 있습니다. 첫 번째는 Prediction, 두 번째는 Correction 인데요, Prediction 은 과거의 State 와 Control 을 이용해서 현재의 State 를 예측하는 단계입니다. 어떤 예측을 수..
2024.03.31 -
기간 : 2023년 12월 22일 ~2024년 2월 29일 기업 : F&B 산업을 위한 로봇 팔 제작 회사 한 일 : 로봇 팔의 충돌 추정을 위한 딥러닝 모델 개발 상세 : 외부 센서 없이 조인트 포지션만 이용하여 로봇 팔에 충돌이 있었는지 감지하는 딥러닝 모델을 만들었고, 새롭게 트랜스포머 구조를 적용하였다. 이에 관해 논문 작성 중. 1주차 첫 주차에는 MuJoCo 시뮬레이터를 세팅했다. 회사에서 제작한 로봇 팔의 URDF 를 받아와서 Ubuntu 환경에서 RViz 로 우선 생김새를 확인하고, 이를 무조코에서 쓸 수 있도록 MJCF 형태로 변환한 후 무조코 시뮬레이터에서 띄웠다. 또한 무조코 시뮬레이터에서 각 관절 각도를 받아와서 출력하는 코드를 작성했다. 역기구학을 풀 수 있는 패키지인 RBDL-p..
로봇 회사 현장실습에서 한 일 🤖기간 : 2023년 12월 22일 ~2024년 2월 29일 기업 : F&B 산업을 위한 로봇 팔 제작 회사 한 일 : 로봇 팔의 충돌 추정을 위한 딥러닝 모델 개발 상세 : 외부 센서 없이 조인트 포지션만 이용하여 로봇 팔에 충돌이 있었는지 감지하는 딥러닝 모델을 만들었고, 새롭게 트랜스포머 구조를 적용하였다. 이에 관해 논문 작성 중. 1주차 첫 주차에는 MuJoCo 시뮬레이터를 세팅했다. 회사에서 제작한 로봇 팔의 URDF 를 받아와서 Ubuntu 환경에서 RViz 로 우선 생김새를 확인하고, 이를 무조코에서 쓸 수 있도록 MJCF 형태로 변환한 후 무조코 시뮬레이터에서 띄웠다. 또한 무조코 시뮬레이터에서 각 관절 각도를 받아와서 출력하는 코드를 작성했다. 역기구학을 풀 수 있는 패키지인 RBDL-p..
2024.02.29 -
1. Message filter 메시지 필터란? 메시지가 메시지 필터에 도달하면 즉시 출력되지 않고 특정 조건이 충족되면 나중에 출력될 수 있습니다. 예를 들어 LiDAR , 카메라 등 여러가지 센서를 사용해 로봇 프로젝트를 수행할 때, 두 개 이상의 메시지 내용을 포함하는 알고리즘을 설계한다고 가정합시다. 두 토픽의 발행 주기가 다를 경우에 개중 느린 토픽의 주기에 맞추어 callback 함수를 작동시켜야 할 것입니다. 따라서 message filter 함수는 두 개 이상의 토픽을 인자로 받아 조건이 충족될 경우에만 callback 함수 loop 안에 진입합니다. Turtlebot SLAM with Yolo Object Detection 의 경우 다섯 개의 토픽이 메시지 필터에 들어간다는 것을 의미합니..
ROS Message filter 메시지 필터1. Message filter 메시지 필터란? 메시지가 메시지 필터에 도달하면 즉시 출력되지 않고 특정 조건이 충족되면 나중에 출력될 수 있습니다. 예를 들어 LiDAR , 카메라 등 여러가지 센서를 사용해 로봇 프로젝트를 수행할 때, 두 개 이상의 메시지 내용을 포함하는 알고리즘을 설계한다고 가정합시다. 두 토픽의 발행 주기가 다를 경우에 개중 느린 토픽의 주기에 맞추어 callback 함수를 작동시켜야 할 것입니다. 따라서 message filter 함수는 두 개 이상의 토픽을 인자로 받아 조건이 충족될 경우에만 callback 함수 loop 안에 진입합니다. Turtlebot SLAM with Yolo Object Detection 의 경우 다섯 개의 토픽이 메시지 필터에 들어간다는 것을 의미합니..
2024.02.04 -
이전 포스팅: 이와 같이 bounding_boxes 토픽의 time stamp 를 수정해 주고 난 후 또 에러를 마주쳤습니다. Transform error: Lookup would require extrapolation into the future. Requested time 1401446451.006236446 but the latest data is at time 1401446450.937553891, when looking up transform from frame [base_scan] to frame [camera] [ERROR] [1401446451.007936297]: waitForTransform() 에서 요구하는 데이터는 A 시점의 데이터인데, 가장 최근에 들어오는 데이터는 B 시점의 데이..
ROS message filter: waitForTransform() Lookup error이전 포스팅: 이와 같이 bounding_boxes 토픽의 time stamp 를 수정해 주고 난 후 또 에러를 마주쳤습니다. Transform error: Lookup would require extrapolation into the future. Requested time 1401446451.006236446 but the latest data is at time 1401446450.937553891, when looking up transform from frame [base_scan] to frame [camera] [ERROR] [1401446451.007936297]: waitForTransform() 에서 요구하는 데이터는 A 시점의 데이터인데, 가장 최근에 들어오는 데이터는 B 시점의 데이..
2024.02.04 -
ROS 에서 message filter 의 기능은 서로 다른 주파수로 발행되는 각 토픽들의 Sync 를 맞추는 것입니다. 저의 경우, /image_raw, /camera_info, /scan , /darknet_ros/bounding_boxes 의 4개의 토픽을 받아서 필터로 들어오도록 하고 있습니다. 하지만, /darknet_ros/bounding_boxes 를 filter 의 인수로 추가하기만 하면 메시지 필터 콜백 함수가 불러와지지 않았습니다. /image_raw, /camera_info, /scan 만으로는 문제없이 작동하는 메시지 필터가 **/bounding_box 에 대해서만** 작동하지 않았습니다. ![](https://velog.velcdn.com/images/zzziito/post/591..
ROS Message Filter : Approximate Time Callback errorROS 에서 message filter 의 기능은 서로 다른 주파수로 발행되는 각 토픽들의 Sync 를 맞추는 것입니다. 저의 경우, /image_raw, /camera_info, /scan , /darknet_ros/bounding_boxes 의 4개의 토픽을 받아서 필터로 들어오도록 하고 있습니다. 하지만, /darknet_ros/bounding_boxes 를 filter 의 인수로 추가하기만 하면 메시지 필터 콜백 함수가 불러와지지 않았습니다. /image_raw, /camera_info, /scan 만으로는 문제없이 작동하는 메시지 필터가 **/bounding_box 에 대해서만** 작동하지 않았습니다. ![](https://velog.velcdn.com/images/zzziito/post/591..
2024.02.04 -
YDLidar ROS Youtube 시연 세팅은 링크 참고하기 튜토리얼 catkin_ws/src 폴더 내에 깃 레포지토리를 복사한다. $ git clone https://github.com/YDLIDAR/ydlidar_ros catkin_make 를 실행한다. 라이다 모델명에 맞는 launch 파일을 수정한다. ``` ydlidar 을 ttyUSB0 로 바꾸고 laser_scan 부분을 base_scan 으로 바꾼다. 만약에 다른 ydlidar 을 사용한다면 다음 표를 참고해서 baudrate 를 설정해 주어야 한다. roslaunch 해 준다. roslaunch ydlidar_ros X4.launchError usb 포트 연결 불가 Error, cannot bind to the specified ser..
YDLiDAR 을 ROS 에서 사용하기YDLidar ROS Youtube 시연 세팅은 링크 참고하기 튜토리얼 catkin_ws/src 폴더 내에 깃 레포지토리를 복사한다. $ git clone https://github.com/YDLIDAR/ydlidar_ros catkin_make 를 실행한다. 라이다 모델명에 맞는 launch 파일을 수정한다. ``` ydlidar 을 ttyUSB0 로 바꾸고 laser_scan 부분을 base_scan 으로 바꾼다. 만약에 다른 ydlidar 을 사용한다면 다음 표를 참고해서 baudrate 를 설정해 주어야 한다. roslaunch 해 준다. roslaunch ydlidar_ros X4.launchError usb 포트 연결 불가 Error, cannot bind to the specified ser..
2024.02.04 -
Azure Kinect depth camera streaming o3d.geometry.PointCloud.create_from_rgbd_image() 와 o3d.visualization.draw_geometries() 를 이용하여 생성한 point cloud Ubuntu 에서 Azure Kinect 사용 환경 세팅하기 Install Azure Kinect SDK on Ubuntu 먼저 SDK 를 먼저 설치합니다. 이 과정에서 생기는 에러를 해결하는 방법은 하단의 Troubleshooting 부분을 참고해 주세요. 같은 폴더 내에 default_config.json 파일이 있어야 한다는 점을 유의해 주세요. Troubleshooting Azure Kinect 를 Ubuntu 환경에서 사용하도록 세팅하는 ..
Linux 에서 Azuer Kinect 사용하기Azure Kinect depth camera streaming o3d.geometry.PointCloud.create_from_rgbd_image() 와 o3d.visualization.draw_geometries() 를 이용하여 생성한 point cloud Ubuntu 에서 Azure Kinect 사용 환경 세팅하기 Install Azure Kinect SDK on Ubuntu 먼저 SDK 를 먼저 설치합니다. 이 과정에서 생기는 에러를 해결하는 방법은 하단의 Troubleshooting 부분을 참고해 주세요. 같은 폴더 내에 default_config.json 파일이 있어야 한다는 점을 유의해 주세요. Troubleshooting Azure Kinect 를 Ubuntu 환경에서 사용하도록 세팅하는 ..
2024.02.04 -
Intel Realsense Install Pyrealsense2 in your Ubuntu desktop Intel Realsense Github pyrealsense2 패키지는 Realsense 카메라를 Python 으로 제어할 수 있는 패키지입니다. 본 프로젝트에서는 직접 데이터를 다루기 위해 SDK 가 아닌, wrapper 를 사용합니다. 'pip install pyrealsense2' command 는 Ubuntu, macOS 에서는 제공되지 않습니다. macOS 에서 사용하는 것보다, Ubuntu 에서 사용하는 것이 더 쉬울 수 있습니다. Ubuntu 에 설치를 위해서는 링크 를 참고해 주세요. $ sudo apt-get install -y git libssl-dev libusb..
Realsense RGB-D 카메라 파이썬으로 사용하기Intel Realsense Install Pyrealsense2 in your Ubuntu desktop Intel Realsense Github pyrealsense2 패키지는 Realsense 카메라를 Python 으로 제어할 수 있는 패키지입니다. 본 프로젝트에서는 직접 데이터를 다루기 위해 SDK 가 아닌, wrapper 를 사용합니다. 'pip install pyrealsense2' command 는 Ubuntu, macOS 에서는 제공되지 않습니다. macOS 에서 사용하는 것보다, Ubuntu 에서 사용하는 것이 더 쉬울 수 있습니다. Ubuntu 에 설치를 위해서는 링크 를 참고해 주세요. $ sudo apt-get install -y git libssl-dev libusb..
2024.02.04 -
*이전 포스팅 (https://zzziito.tistory.com/77) 과 이어집니다. SVD : Singular Value Decomposition SVD(특이값 분해) 란 ? 복잡한 행렬을 간단한 구성 요소로 분해하는 방법. SVD의 핵심은 행렬 A를 구성하는 데이터의 '특징'을 추출하는 데 있다. 여기서 U, V 는 Orthogonal (모든 basis 가 직교하고 크기가 1임) 이다. 또한 sigma 행렬은 1) 대각행렬에 위치한 singular value 를 제외한 요소가 다 0이고, 2) 이 singular value 를 제곱하면 eigen value 가 된다. 3) 이 singular value 들은 내림차순으로 정렬되어 있다. 우리는 Ax=0 의 답을 찾기 위한 방법으로 SVD 를 사용한..
Ax=0 을 풀기 위한 SVD (Singular Value Decomposition)*이전 포스팅 (https://zzziito.tistory.com/77) 과 이어집니다. SVD : Singular Value Decomposition SVD(특이값 분해) 란 ? 복잡한 행렬을 간단한 구성 요소로 분해하는 방법. SVD의 핵심은 행렬 A를 구성하는 데이터의 '특징'을 추출하는 데 있다. 여기서 U, V 는 Orthogonal (모든 basis 가 직교하고 크기가 1임) 이다. 또한 sigma 행렬은 1) 대각행렬에 위치한 singular value 를 제외한 요소가 다 0이고, 2) 이 singular value 를 제곱하면 eigen value 가 된다. 3) 이 singular value 들은 내림차순으로 정렬되어 있다. 우리는 Ax=0 의 답을 찾기 위한 방법으로 SVD 를 사용한..
2024.01.24 -
Homography 는 image stitching 을 할 때 많이 쓰입니다. (굉장히 많이 쓰이는 중요한 개념이지만, 일단은 image stitching 으로 시작해 봅시다. ) image stitching 은 여러 장의 사진을 이어 붙이는 작업으로, 파노라마 이미지를 만들 때 사용됩니다. 이런 파노라마 이미지를 만들 때에는 어떤 방법들이 사용될 수 있을까요 ? 매우 넓은 FoV 를 가진 렌즈를 사용한다 - 이 방법의 단점은 이미지 왜곡이 일어나고, FoV 가 200도를 넘기기 어렵고, 비쌉니다. 여러 장을 찍어서 이어 붙인다. 그러려면 여러 장의 이미지들의 관계에 대해서 알아야 하고, 이때 사용되는 것이 특징점입니다. 앞으로도 LiDAR 를 사용하지 않고 2D 이미지에서 3D reconstructio..
Homography : 평면과 평면 사이 관계, Pseudo InverseHomography 는 image stitching 을 할 때 많이 쓰입니다. (굉장히 많이 쓰이는 중요한 개념이지만, 일단은 image stitching 으로 시작해 봅시다. ) image stitching 은 여러 장의 사진을 이어 붙이는 작업으로, 파노라마 이미지를 만들 때 사용됩니다. 이런 파노라마 이미지를 만들 때에는 어떤 방법들이 사용될 수 있을까요 ? 매우 넓은 FoV 를 가진 렌즈를 사용한다 - 이 방법의 단점은 이미지 왜곡이 일어나고, FoV 가 200도를 넘기기 어렵고, 비쌉니다. 여러 장을 찍어서 이어 붙인다. 그러려면 여러 장의 이미지들의 관계에 대해서 알아야 하고, 이때 사용되는 것이 특징점입니다. 앞으로도 LiDAR 를 사용하지 않고 2D 이미지에서 3D reconstructio..
2024.01.24 -
mujoco 는 물리엔진을 지원하는 시뮬레이터로, MJCF 파일 (확장자 : xml) 을 통해서 모델을 환경으로 불러옵니다. 그런데 여기서 문제는 대부분의 로봇 description file 은 URDF 혹은 xacro (xml) 로 되어 있다는 것입니다. 게다가 직접 fusion360 등으로 로봇을 설계할 경우에, 이를 fusion2urdf 패키지 등으로 export 한 경우에 또 URDF 파일을 손에 쥐게 되는 경우가 있죠... 그래서 이 URDF 파일을 MJCF 파일로 바꿔 줘야 하는데, 간단한 방법을 몰라서 삽질을 했습니다. 그 방법은 다음과 같습니다. 우선 터미널에서 mujoco.viewer 를 실행시켜 줍니다. python3 -m mujoco.viewer 그리고 URDF 를 떨어뜨리면 다음과 ..
URDF to MJCF : mujoco-pymujoco 는 물리엔진을 지원하는 시뮬레이터로, MJCF 파일 (확장자 : xml) 을 통해서 모델을 환경으로 불러옵니다. 그런데 여기서 문제는 대부분의 로봇 description file 은 URDF 혹은 xacro (xml) 로 되어 있다는 것입니다. 게다가 직접 fusion360 등으로 로봇을 설계할 경우에, 이를 fusion2urdf 패키지 등으로 export 한 경우에 또 URDF 파일을 손에 쥐게 되는 경우가 있죠... 그래서 이 URDF 파일을 MJCF 파일로 바꿔 줘야 하는데, 간단한 방법을 몰라서 삽질을 했습니다. 그 방법은 다음과 같습니다. 우선 터미널에서 mujoco.viewer 를 실행시켜 줍니다. python3 -m mujoco.viewer 그리고 URDF 를 떨어뜨리면 다음과 ..
2024.01.11 -
요새 계속 MuJoCo 관련 프로젝트를 진행하고 있는데, mujoco 의 python wrapper 인 mujoco-py 는 한국어 자료도 거의 없고, 참고할 만한 자료가 거의 공식 도큐먼트 밖에 없는 것 같았습니다. 프로젝트를 진행하면서 mujoco-py 를 사용하는 방법에 대해서 포스팅을 해 보려고 합니다. mujoco 에서는 xfrc_applied 라는 외력을 사용할 수 있는데, 이를 이용하면 body 에 힘과 토크를 적용할 수 있습니다. https://www.youtube.com/watch?v=N2E-qnsyn1I 다음과 같이 body 에 외력을 줄 수 있습니다. 0. 개발 환경 Ubuntu 20.04 Mujoco-py 1. xfrc_applied xfrc_applied 의 [0:3] 요소는 힘을..
MuJoCo-python 환경에서 body 에 외력 주기 (xfrc_applied)요새 계속 MuJoCo 관련 프로젝트를 진행하고 있는데, mujoco 의 python wrapper 인 mujoco-py 는 한국어 자료도 거의 없고, 참고할 만한 자료가 거의 공식 도큐먼트 밖에 없는 것 같았습니다. 프로젝트를 진행하면서 mujoco-py 를 사용하는 방법에 대해서 포스팅을 해 보려고 합니다. mujoco 에서는 xfrc_applied 라는 외력을 사용할 수 있는데, 이를 이용하면 body 에 힘과 토크를 적용할 수 있습니다. https://www.youtube.com/watch?v=N2E-qnsyn1I 다음과 같이 body 에 외력을 줄 수 있습니다. 0. 개발 환경 Ubuntu 20.04 Mujoco-py 1. xfrc_applied xfrc_applied 의 [0:3] 요소는 힘을..
2024.01.10 -
Velodyne VLP-16 3d Lidar Setting Velodyne Puck VLP16 을 구동하려면 패키지 구성상품 말고 추가로 110V 변압기 (돼지코) 와 ethernet 젠더가 필요합니다. 관련 내용은 벨로다인 세팅을 참고하세요. Veloview ROS Rviz 개발환경 세팅 ROS 환경에서 VLP16 사용하기 $ sudo apt-get install ros-melodic-velodyne $ cd catkin_ws/src $ git clone https://github.com/ros-drivers/velodyne $ cd .. $ catkin_make $ sudo ifconfig eth0 192.168.3.100 $ cd catkin_ws $ cd src $ roslaunch velodyn..
Velodyne 3d lidar 세팅하기Velodyne VLP-16 3d Lidar Setting Velodyne Puck VLP16 을 구동하려면 패키지 구성상품 말고 추가로 110V 변압기 (돼지코) 와 ethernet 젠더가 필요합니다. 관련 내용은 벨로다인 세팅을 참고하세요. Veloview ROS Rviz 개발환경 세팅 ROS 환경에서 VLP16 사용하기 $ sudo apt-get install ros-melodic-velodyne $ cd catkin_ws/src $ git clone https://github.com/ros-drivers/velodyne $ cd .. $ catkin_make $ sudo ifconfig eth0 192.168.3.100 $ cd catkin_ws $ cd src $ roslaunch velodyn..
2024.01.01 -
기존의 tabular 한 방법론들은 state value 나 action value 를 사용해서 policy 를 생성했습니다. 즉, policy 는 Q-table 을 통해서 (ex. epsilon-greedy) 만들어졌습니다. 하지만 Policy Gradient 부터는 policy 자체를 추정하게 됩니다. 그래서 Value-based Learning 과 Policy-based Learning 은 크게 다음과 같이 나눌 수 있습니다. Value-based 는 뉴럴넷이나 테이블을 이용해서 Q-value 를 계속해서 학습 해 나가고, 이 Q-value 를 이용해서 Policy 를 정하는 것입니다. Policy-based 는 말 그대로 value 를 따로 구하지 않고 policy 만 학습을 하는 것입니다. 그리..
Policy Gradient : REINFORCE기존의 tabular 한 방법론들은 state value 나 action value 를 사용해서 policy 를 생성했습니다. 즉, policy 는 Q-table 을 통해서 (ex. epsilon-greedy) 만들어졌습니다. 하지만 Policy Gradient 부터는 policy 자체를 추정하게 됩니다. 그래서 Value-based Learning 과 Policy-based Learning 은 크게 다음과 같이 나눌 수 있습니다. Value-based 는 뉴럴넷이나 테이블을 이용해서 Q-value 를 계속해서 학습 해 나가고, 이 Q-value 를 이용해서 Policy 를 정하는 것입니다. Policy-based 는 말 그대로 value 를 따로 구하지 않고 policy 만 학습을 하는 것입니다. 그리..
2024.01.01