MD Gundam RX-78-02 The Origin

1/100 사이즈 건담은 처음이었는데, 부품 수와 크기도 적당하여 조립하기 꽤 괜찮았었던 것 같음. 화려한 모델보단 저런 수수한 모델(?)이 괜찮아 보이는 듯. 저 모델도 여러가지 버전이 있는 것 같은데, 나중에 또 다른 것 사다가 조립해봐야 할 듯. 

Solve “permission denied” when using libusb on Ubuntu

libusb를 이용한 디바이스를 Ubuntu에 연결하고, 관련 프로그램을 실행시 “Permission denied” 혹은 알수없는 오류를 발생하는 경우가 있다. 보통 sudo 명령을 이용하여 실행하면 잘 해결되는 경우인데, 매번 sudo를 붙여서 실행하는 것이 번거롭다. 이때는 udev 룰을 추가하면 해결된다. (제조사에서 제공하는 경우도 있다.)

사용자가 udev 룰을 추가하려면 해당 디바이스의 Vender ID, Product ID를 알아내야 한다. 이는 디바이스를 연결하고, 터미널에서 다음과 같이 입력한 다음 확인이 가능하다.

$ dmesg

이때 나오는 메시지 중 idVendor, idProduct에 나오는 값을 기억한다.

/etc/udev/rules.d 에 다음과 같이 파일을 작성한다.

$ cd /etc/udev/rules.d
$ vi 99-<user_device>.rules

SUBSYSTEM=="usb", ATTRS{idVendor}=="<Vendor ID>", ATTRS{idProduct}=="<Product ID>", MODE="0666"

저장한 다음, 디바이스를 뽑았다가 다시 꼽으면 해결된다.

느타리버섯 무침

(1) 느타리버섯은 뿌리부분을 자르고, 잘게 찢는다.

(2) 끓는 물이 (1)을 넣고 잠시 동안 데친다.

(3) (2)를 꺼내어 찬물에 행구고, 물을 최대한 짠다.

(4) 다진마늘, 간장, 소금, 들깨 으깬것, 들기름을 넣고 무친다.

끝!

Swift 개발서적

사실 프로그래밍 개발 관련 책은 사놓아도 몇번 보곤 책장에서 공간을 채워주는 장식품으로 생각한다. 이번 책도 아마 마찬가지 일꺼라고 생각되는데, 책이 뭔가 안좋다는 것보단 개발 서적은 으례 그래야 한다고 생각하기 때문이다.

기본적인 개발 환경과 아주 기본적인 문법만 익히고, 나머진 개발하려는 앱이나 프로그램에 따라 구글링 or 책 내용 (운 좋으면)을 참고 하면 끝.

이번에도 iOS 앱을 개발할 일이 생겨서, 개발 흐름이라든가 아주 기초적인 부분만 참조하려고 책을 찾아봤는데 다음의 두 책이 괜찮은 평가를 받고 있어서 서점에서 사왔음.

자~ 이제 그램 시작해보실까나~…

Install specific version when using apt

When you need specific version of package, you can install the version you want using apt.

To show the list versions of package,

 $ sudo apt-cache policy <package-name>

To install specific version,

$ sudo apt install <package-name>=<version-you-want>;

Example:

$ sudo apt-cache policy librealsense2
librealsense2:
  Installed: (none)
  Candidate: 2.16.4-0~realsense0.127
  Version table:
     2.16.4-0~realsense0.127 500
        500 http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo xenial/main amd64 Packages
     2.16.3-0~realsense0.115 500
        500 http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo xenial/main amd64 Packages
     2.16.3-0~realsense0.103 500
        500 http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo xenial/main amd64 Packages
     2.16.3-0~realsense0.97 500
        500 http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo xenial/main amd64 Packages
...

$ sudo apt install librealsense2=2.11.1-0~realsense0.70

To prevent upgrade,

$ sudo apt-mark hold <package-name>

Ignore installed package when using pip

If you have an error when you install python package using pip like this,

Cannot uninstall '~~~'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

You can solve this problem by adding this option:

--ignore-installed

For example,

$ sudo pip install <package-name-to-install> --ignore-installed <package-name-get-error>

산책@우이동계곡

장어를 먹으러 우이동 계곡에 있는 장어집을 방문하였습니다. 예전에도 한번 갔던 가게인데, 맛이 꽤 괜찮았던 곳이었거든요.

iPhone X 2018-11-11 11:29:49 f/1.8 1/30sec ISO-25 4mm

이번엔 식사를 마치고 근처 산 길을 좀 걸어보았습니다. 단풍도 짙게 드리우고, 공기도 괜찮고 분위기도 좋네요.

iPhone X 2018-11-11 13:13:08 f/1.8 1/120sec ISO-25 4mm

어디를 찍어도 예술 작품이네요. ^^ 가을 냄새 물씐 풍깁니다. 

길 가다가 만난 개…들도 참 부럽게… 있네요. 니네들 팔자가 상팔자로구나…

심층학습 (Deep Learning)

딥러닝 기술 중 GAN의 창시자인 이안 굿펠로우가 작성한 책으로 http://www.deeplearningbook.org 에서 영문책은 쉽게 볼 수 있지만, 내용을 이해하기에 한글로 된 책도 하나 있으면 괜찮을듯 하여 구입함. 

이런 기술 번역서는 어색하지 않은 번역과 용어 등의 사용이 중요한데, 서점에서 잠깐 살펴본 바로는 큰 어색함이 느껴지지 않았고, 주요 용어들은 한글과 영문을 동시 표기하여 추후 영문 자료를 참고하는데 헷갈리지 않을 것 같음.

딥러닝에 필요한 기초 수학부터 응용까지 꽤 많은 내용이 포함된 교과서로 완독하지도 않더라도 참고서로 한권씩은 갖고 있어야 될 책.

아침안개@청양

새벽녘 아스라이 깔려있는 안개와 텅빈 도로를 보고 있으면 마음이 차분해지는 느낌이다. 상쾌한 시골의 아침 공기도 느껴보고, 살포시 산 위에 걸쳐있는 태양도 하루를 시작하는데 좋은 기운을 주는 듯.

iPhone X 2018-11-04 08:03:54 f/1.8 1/510sec ISO-20 4mm

산 중턱에서 내려다본 모습은 더욱더 멋진 듯. 자욱히 깔려있는 안개와 저 멀리 보이는 산이마치 수묵화와 같은 느낌을 준다.

iPhone X 2018-11-04 08:23:08 f/2.4 1/1779sec ISO-16 6mm

단!! 이게 그냥 구경만 하는 것이라면 좋겠으나~ 저 날은 고추따러 밭에 가던 날 ㅠㅠ

imu_complementary_filter를 이용한 IMU 자세 추정

IMU를 이용한 자세추정 방법은 보통 보상 필터를 많이 사용한다. 3축 가속도 센서와 3축 자이로스코프를 사용하고, 3축 지자기 센서를 이용하여 보정한다. 가속도 센서는 3축의 가속도 값 (m/s^2)을 두번 적분하여 위치를 구할수 있으나 회전 및 진동 등에 의해서 값이 변하는 단점이 있고, 자이로스코프는 3축의 각속도 (rad/s)를 한번 적분하여 회전각을 알아낼수 있지만 각 축에 포함된 화이트 노이즈 덕분에 시간이 흐를수록 값이 변한다 (일명 드리프트 현상).

따라서 각각의 센서가 가지는 장점을 뽑아서 사용하자는게 보상필터이고, 간단하게는 Low-pass filter, High-pass filter를 사용하거나, 두개의 Band-pass filter를 사용하는게 일반적이다. 이게 바로 보상 (complementary) 필터이다.

직접 구현해서 사용하는 것도 방법이긴하나, 이미 많이 알려진 알고리즘이고 ROS에 패키지로도 존재하므로 쉽게 사용이 가능하다.

사용할 패키지는 imu_complementary_filter이다. 사용 방법은 연결된 링크의 wiki 페이지에 자알~ 되어있다. 논문을 기반으로 개발된 것 같고, 간단한(?) 블록 다이러그램은 다음과 같다.

Ref: https://www.mdpi.com/1424-8220/15/8/19302

설치는 다음과 같이 하고,

$ sudo apt install ros-kinetic-imu-complementary-filter

사용은 다음과 같이,

$ rosrun imu_complementary_filter complementary_filter_node

complementary_filter_node는 /imu/data_raw (sensor_msgs/Imu)를 Subscribe 한다. 사용하려는 IMU가 위 토픽을 Publish 한다면 고맙게 사용할 수 있고, 토픽 이름이 다르다면 다음과 같이 실행하면 끝!,

$ rosrun imu_complementary_filter complementary_filter_node /imu/data:=/<your_topic_name>

결과로는 imu/data (sensor_msgs/Imu)를 Publish 한다. 결과를 살펴보면 입력 데이터에 Orientation 값이 계산되어 나옴을 확인할 수 있다.