2020년 10월 19일 월요일

엔비디아 나노 이미지 백업 및 복구

이 글은 엔비디아(nvidia jetson) 나노(nano) 이미지 백업 및 복구 방법을 간략히 설명한 것이다. 


레퍼런스

2020년 10월 18일 일요일

R 스튜디오 기반 데이터 통계 신뢰도 크론바흐 알파 계산하기

이 글은 오픈소스 R 스튜디오 기반 통계 신뢰도 크론바흐 알파(Cronbach Alpha)를 간단히 계산하는 방법을 정리한다. R은 통계 분석언어이다. RStudio는 무료이며 GUI방식으로 편리하게 R 언어를 사용할 수 있도록 한다. 

RStudio
머리말
크론바흐 알파는 신뢰도 계수 중 하나이다. 알파값은 다양한 항목들 간에 내적 일관성(internal consistency)가 높은지를 측정한다. 이를 위해 조사 항목의 데이터들 간 상관계수를 계산한다.  

예를 들어, 어떤 질문 항목에 비해, 응답자들이 특정 방향으로 일관된 경향의 답을 하는 지를 알아볼 수 있다. 홍길동이 여러 관계된 질문들 Q1...n에 대해 일관성있게 점수들을 준다면 알파값이 높게 나오지만, 임의적으로 답을 주면 알파값이 낮게 나온다. 특정 질문 Qi가 일관성이 없어보이면, 해당 데이터를 삭제함으로써 일관성을 높일 수 있다. 
   
보통, 알파값이 0.8이 높으면 일관성과 신뢰성이 좋다고 판단한다. 알파값이 0.9이상이면 신뢰성이 높은 데이터이다. 0.7이상이면 항목들간에 어느정도는 일관성이 있다고 판단한다.

크론바흐 알파값은 피어슨(Pearson) 상관 계수와 함께 데이터 신뢰성 계산에 많이 사용된다.

프로그램 설치
통계 패키지 R과  RStdudio를 다음 링크에서 설치한다.

프로젝트 시작 및 데이터 준비
RStduio를 실행한다. 그리고 파일에서 새 프로젝트 메뉴를 선택한다. 
폴더 기반으로 프로젝트를 생성한다. 그리고, 생성된 폴더 안에 분석할 데이터를 엑셀로 저장한다. 테스트를 위해 아래 엑셀 데이터를 다운로드한다.
엑셀에 저장된 데이터는 리커트 5점 척도로 조사된 항목들로 구성되어 있다. 

크론바흐 알파 계산하기
새 프로젝트 후 콘솔창에 다음 명령을 입력해 패키지를 설치한다. 
install.packages("psy")
library("psy")
install.packages("psych")
library("psych")

엑셀파일이 준비되어 있다면, 다음 명령으로 엑셀파일을 읽을 수 있다. 
library(readxl)
B <- read_excel("benefit.xlsx")
View(B)

결과는 다음과 같다. 

만약, 준비된 데이터가 없다면, 다음 명령을 입력한다.
B <- data.frame(
B1=c(3,4,3,4,5,2,3,3,3,2), 
B2=c(4,4,1,2,4,1,2,4,2,2), 
B3=c(3,4,1,3,3,2,2,4,3,3))

데이터를 확인한다. 
View(B)

추세선 그래프를 확인한다.
pairs(B, panel=panel.smooth)

크론바흐 알파를 계산한다.
cronbach(B)

결과는 다음과 같다. 알파값이 0.812이므로 0.8보다 크다. 보통, 알파값이 0.8이 높으면 일관성과 신뢰성이 좋다고 판단한다. 
$sample.size
[1] 15
$number.of.items
[1] 7
$alpha
[1] 0.8127667

좀 더 상세한 알파 값을 얻는다. 
alpha(B)

소숫점까지 포함된 알파 값을 확인해 본다.
q <- alpha(B)
q$total

결과는 다음과 같다.
 raw_alpha std.alpha   G6(smc) average_r      S/N
 0.8127667 0.8066837 0.8761885 0.3734824 4.172871
        ase     mean        sd  median_r
 0.07143076 3.847619 0.7392902 0.4240922

마무리
이 글에서는 R 스튜디오 기반 데이터 통계 신뢰도 크론바흐 알파를 계산하는 방법을 간략히 설명하였다. 크론바흐 알파는 통계학자 크론바흐가 제안한 데이터 신뢰성 평가 방법이다. 주로 설문지 답변 데이터 신뢰성 등을 평가할 때 많이 사용된다. 크론바흐 알파 값 등급은 정해지지 않았지만, 일반적으로 0.6 이상이면 신뢰성이 있다고 한다. 만약, 0.6 미만으로 나오면 해당 데이터는 수정 및 삭제하는 것이 좋다. 



2020년 10월 9일 금요일

sudo 암호 없이 우분투 사용 방법

어떤 경우, 우분투 암호가 너무 길어 사용하기 어려울 때가 있다. 이 글은 sudo 암호 없이 우분투 사용 방법을 간략히 설명한다.

우분투 account에서 로그인 시 암호 입력을 해제한다. 그리고, 다음 명령을 실행한다.
sudo visudo

맨 아래 행에 다음을 입력한다.
user ALL=(ALL:ALL) NOPASSWD:ALL

만약, 오류가 생긴다면, 다음과 같이 추가된 행을 수정한다.
pkexec visudo

이제 암호 없이 패키지를 설치할 수 있다.

2020년 10월 3일 토요일

우분투 부팅 시 파이썬 프로그램 자동 실행 방법

이 글은 우분투 리눅스에서 부팅 시 특정 파이썬 프로그램 등을 자동 실행(autorun)하는 방법을 간단히 설명한 것이다.

파이썬 코딩
다음과 같이 /usr/bin 폴더 아래 파이썬 파일을 코딩한다.
sudo vim /usr/bin/test_service.py

소스 코드는 다음과 같다.
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("localhost", 8877))
s.listen(1)
 
while True:
    conn, addr = s.accept()
    data = conn.recv(2048)
    conn.close()
    print(data)

서비스 등록 및 시작
서비스 설정 파일을 생성한다.
sudo vim /lib/systemd/system/test.service

내용은 다음과 같다.
[Unit]
Description=Test Service
After=multi-user.target
Conflicts=getty@tty1.service

[Service]
Type=simple
ExecStart=/usr/bin/python3 /usr/bin/test_service.py
StandardInput=tty-force

[Install]
WantedBy=multi-user.target

다음과 같이 생성된 서비스를 실행한다.
sudo cp test.service /lib/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable test.service
sudo systemctl start test.service

다음 명령으로 재실행할 수도 있다
sudo systemctl restart test.service 

정상적인 실행 결과는 다음과 같다.

레퍼런스

2020년 9월 26일 토요일

간단하게 포트포워드로 외부 접속 가능한 공개 웹서버 인터넷 서비스 및 DNS 설정 방법

이 글은 간단한 포트포워드로 외부 접속 가능한 공개 웹서버 인터넷 서비스 및 DNS 설정 방법을 정리한다.

가끔, 본인이 개발한 프로그램을 인터넷으로 서비스하고 싶을 때가 있다. 이때, 특정 번호로 된 주소를 입력하는 것은 그리 스마트해 보이지 않는다. 이 경우, 공유기의 포트포워드(port forward) 를 이용해 공개 웹서버를 만들 수 있다.

공유기의 포트포워드 기능을 이용하면, 집에서도 서버를 쉽게 운영할 수 있다.

IP 정보 얻기

우선 아래 링크로 내 공개 IP를 얻는다.

그리고, 내부 네크워크 내 서버로 사용할 컴퓨터의 IP주소를 ifconfig 로 얻는다. 화면에서 inet 이 IP 주소이다.

공유기 포트 포워드 설정

이제 이 두개를 연결해줘서, 외부 공개 IP > 내부 IP 서버로 접속될 수 있게 포트 포워드를 설정한다. 이 과정은 공유기 종류별로 약간 다르나 메뉴는 거의 동일하다.

우선 아래와 같이 공유기 설정 주소를 입력하여, 로긴한 후, 포트 포워드 설정 메뉴를 선택한다.

다음과 같이 포트포워드할 내부 IP주소를 입력하고 설정한다.
다음과 같이 DMZ를 설정한다.
방화벽 설정

접속하는 윈도우에서 방화벽 설정을 다음과 같이 진행한다.

제어판 > window 방화벽 > 고급설정 > 인바운드 규칙 클릭 > 새규칙 > 포트 클릭 > tcp, 특정 로컬 포트 예) 80, 5000 > 연결 허용 체크 > 도메인, 개인 공용 모두 체크 > 마침

우분투 서버에서는 다음과 같이 서버 포트를 허용해 준다.

sudo ufw allow 5000

서버 실행

다음과 같이 개발한 서버를 실행한다(웹서버 개발 방법 참고).

도메인 획득

이제 외부 공개 IP로 접속하면 서버가 외부에서도 연결될 것이다. 이제, 도메인을 설정해 특정 주소로 서버가 외부에 공개되도록 한다. 무료 DNS 서버를 이용해 이를 설정한다. 여기에서는 freenom을 이용한다. 

다음과 같이, 원하는 DNS 이름을 입력하고, 로그인 한 후, DNS를 구입하고, 해당 DNS에 앞의 서버 외부 공용 IP를 설정한다.



이제 DNS와 설정한 서버 공개 외부 IP가 네트워크를 통해 반영될 수 있도록 5~10분 정도 기다린다.

외부 DNS IP로 서버 접속 

외부 DNS IP로 서버 접속해 본다. 결과는 다음과 같다. 테스트를 위해, 집 밖에서 노트북, 스마트폰을 이용해 촬영한 이미지를 개발한 웹서버로 업로드해 보았다.

외부에서 업로드한 이미지는 다음과 같이 서버에 잘 저장된다.

마무리

공유기의 포트포워드 기능을 이용하면, 집에서도 서버를 쉽게 운영할 수 있다.

레퍼런스

2020년 9월 23일 수요일

LIO SAM 기반 SLAM 기술 소개, 빌드 및 활용

이 글은 LIO SAM 기반 SLAM 기술 소개 및 활용에 대해 간략히 설명한다.

개요

LIO SAM은 LOAM개발자가 기존 방법을 개선해 개발한 슬램 기술이다. 

LIO-SAM은 라이더 관성 주행 거리 측정법을 개발해, 루프 폐쇄를 포함한 다양한 상대 및 절대 포인트 측정을 여러 소스에서 통합한다. 관성 측정 장치 (IMU) 통합에서 추정된 모션은 포인트 클라우드의 왜곡을 제거하고 라이더 주행 거리 측정 최적화를 위한 초기 추측 데이터를 생성한다. 라이더 주행 거리 측정 솔루션은 IMU의 편향을 추정하는 데 사용된다. 이 결과로 다음과 같이 기존 LOAM보다 좋은 결과를 얻을 수 있다.

시스템 아키텍처는 다음과 같다. 

이 기술은 다음과 같이 IMU, LiDAR가 미리 준비되어 있어야 한다.

소스 빌드 및 실행

다음과 같이 실행해 소스코드를 빌드한다.

sudo apt-get install -y ros-kinetic-navigation
sudo apt-get install -y ros-kinetic-robot-localization
sudo apt-get install -y ros-kinetic-robot-state-publisher
wget -O ~/Downloads/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.2.zip
cd ~/Downloads/ && unzip gtsam.zip -d ~/Downloads/
cd ~/Downloads/gtsam-4.0.2/
mkdir build && cd build
cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF ..
sudo make install -j8
cd ~/catkin_ws/src
cd ..
catkin_make

실행은 다음과 같다. 

roslaunch lio_sam run.launch

미리 준비된 데이터로 스캔 데이터를 시뮬레이션할 수 있다.

rosbag play your-bag.bag -r 3

결과는 다음과 같다. 

마무리

LIO SAM은 LOAM과 유사한 방식(참고)으로 개발되었다. 특징점을 계산하기 위해, GSTAM 패키지를 사용한다. 성능에 대한 설명은 여기를 참고한다.

레퍼런스