Refresh hosts on macOS

많은 이유로 /etc/hosts 파일에 아이피 및 호스트 이름을 추가하여 사용할 경우가 많은데, Ubuntu에선 hosts 파일을 수정하기만해도 반영이 되는 반면, macOS에선 반영이 되지 않는다. (아마 이번 Catalina에서부터 그런듯..)

구글링을 해본 결과 hosts 파일을 수정하고, 터미널을 열어 다음과 같이 실행 해줘야 업데이트 되는듯 하다.

$ sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

끝.

Advertisements

macOS Launchpad 관련 팁

적어놓고 보니 예전 포스트(https://ahnbk.com/?p=340)랑 같은 내용인데… 사라진 어플리케이션 추가하는 방법 추가.

레이아웃 수정

기본 배열은 7×5로 되어 있음. 더 많은 수의 아이콘을 배열할 수도 있는데, 예를 들어 8×6으로 배치하고 싶다면 터미널을 열고,

$ defaults write com.apple.dock springboard-columns -int 8
$ defaults write com.apple.dock springboard-rows -int 6 
$ killall Dock

와 같이 입력하고 런치패드를 보면 변경되어 있는 것을 확인 가능.

기본값으로 돌리고 싶다면, 터미널을 열고

$ defaults delete com.apple.dock springboard-rows
$ defaults delete com.apple.dock springboard-columns
$ killall Dock

와 같이 입력하면 됨.

런치패드 리셋

Launchpad를 초기 설치 상태로 초기화 하고 싶다면,

$ defaults write com.apple.dock ResetLaunchPad -bool true
$ killall Dock

설치된 앱 아이콘이 런치패드에 안보인다면

Finder를 열고, /Application으로 이동. Cmd+A를 이용해서 어플리케이션들을 모두다 선택하고 이를 끌어서 Launchpad 아이콘 위에 놓는다. 그렇게 하면 앱 리스트 업데이트 됨.

Set display scale for Ubuntu 18.04 on Parallels 14

패러럴즈에 Ubuntu 18.04를 설치하고, 패러럴즈 툴을 설치했음에도 불구하고 해상도 설정이 좀 이상한 경우가 있다. 특히 Display scale을 조절할 수 있는 옵션이 나타나지 않는데, 이 경우 흐리멍텅한 화면이나, 네이티브 해상도 (아주 작은 글씨)로만 사용해야 한다.

검색해보니 설정에는 안보이지만, 터미널 상에서 UI 스케일을 조정할 수 있는 방법이 있었다.

$ gsettings set org.gnome.desktop.interface scaling-factor 2

원하는 스케일 팩터를 뒷부분에 적으면 된다. 2는 200%를 의미한다.

다시 초기값으로 돌리려면,

$ gsettings reset org.gnome.desktop.interface scaling-factor

와 같이 입력한다.

터미널에서 명령어를 입력 후, 재부팅하거나 Logout 후 재로그인하면 설정이 반영된다.

Kinematic Model for 3 Wheel Omni Drive Robot

3 Wheel Omni Drive 로봇은 메카넘휠(90º) 3개를 120º 간격으로 배치하여 구성하며, 바퀴 속도의 조합에 따라 전방향으로 이동 가능하다.

식은 다음과 같이 나타낼 수 있다.

\dot{\phi} = J_{2}^{-1} J_{1f} R(\theta) \dot{\xi_{I}} \dot{\xi_{I}} = R(\theta)^{-1}J_{1f}^{-1}J_{2}\dot{\phi}

여기서,

\dot{\phi} = \begin{bmatrix} \dot{\phi}_{1} \\ \dot{\phi}_{2} \\ \dot{\phi}_{3} \end{bmatrix} \dot{\xi_{I}} = \begin{bmatrix} \dot{x} \\ \dot{y} \\ \dot{\theta} \end{bmatrix} J_{2} = \begin{bmatrix} 2r & 0 & 0 \\ 0 & 2r & 0 \\ 0 & 0 & 2r \end{bmatrix} J_{1f} = \begin{bmatrix} sin(\frac{\pi}{3}) & -cos(\frac{\pi}{3}) & -l \\ 0 & -cos(\pi) & -l \\ sin(-\frac{\pi}{3}) & -cos(-\frac{\pi}{3}) & -l \end{bmatrix} R(\theta) = \begin{bmatrix} cos \theta & sin\theta & 0 \\ -sin \theta & cos \theta & 0 \\ 0 & 0 & 1\end{bmatrix}

r는 바퀴의 반지름, l은 로봇 중심으로부터 바퀴까지의 거리이다.

이제 바퀴의 속도 변경에 따른, 로봇의 움직임을 구하려면,

\begin{bmatrix} \dot{x} \\ \dot{y} \\ \dot{\theta} \end{bmatrix} = \begin{bmatrix} cos \theta & sin\theta & 0 \\ -sin \theta & cos \theta & 0 \\ 0 & 0 & 1\end{bmatrix}^{-1} \begin{bmatrix} sin(\frac{\pi}{3}) & -cos(\frac{\pi}{3}) & -l \\ 0 & -cos(\pi) & -l \\ sin(-\frac{\pi}{3}) & -cos(-\frac{\pi}{3}) & -l \end{bmatrix}^{-1} \begin{bmatrix} 2r & 0 & 0 \\ 0 & 2r & 0 \\ 0 & 0 & 2r \end{bmatrix} \begin{bmatrix} \dot{\phi}_{1} \\ \dot{\phi}_{2} \\ \dot{\phi}_{3} \end{bmatrix}

여기서 나온 결과, 즉 로봇의 속도 (\dot{x}, \dot{y}, \dot{\theta})를 누적하면 Odometry 정보를 얻을 수 있다.

이제 로봇을 제어하기 위해서, 원하는 로봇의 선속도 (\dot{x}, \dot{y} ), 각속도 (\dot{\theta})가 입력이 되면,

\begin{bmatrix} \dot{\phi}_{1} \\ \dot{\phi}_{2} \\ \dot{\phi}_{3} \end{bmatrix} = \begin{bmatrix} 2r & 0 & 0 \\ 0 & 2r & 0 \\ 0 & 0 & 2r \end{bmatrix}^{-1} \begin{bmatrix} sin(\frac{\pi}{3}) & -cos(\frac{\pi}{3}) & -l \\ 0 & -cos(\pi) & -l \\ sin(-\frac{\pi}{3}) & -cos(-\frac{\pi}{3}) & -l \end{bmatrix} \begin{bmatrix} cos(0) & sin(0) & 0 \\ -sin(0) & cos(0) & 0 \\ 0 & 0 & 1\end{bmatrix} \begin{bmatrix} \dot{x} \\ \dot{y} \\ \dot{\theta} \end{bmatrix}

와 같이 각 바퀴의 속도를 구할 수 있다. 이제 이 속도를 바퀴 모터에 적용하면 로봇이 원하는 방향으로 움직인다.

참고:

Ubuntu에서 USB 시리얼포트 low_latency 설정하기

로봇에 외장 기기를 부착할 경우 USB 시리얼포트 디바이스를 많이 사용한다. 요즘 나온 메인보드엔 시리얼포트가 없으니 당여한 이야기인데, USB 통신의 특성상 latency timer 값이 16ms로 기본으로 설정되어 있어, 빠른 응답 특성을 요구할때엔 속도 저하의 이유가 된다.

먼저 현재 설정된 latency_timer 값을 확인해본다.

$ cat /cat/sys/bus/usb-serial/devices/ttyUSB0/latency_timer
16

ttyUSB0는 사용자의 포트 번호에 따라 변경하여 사용하면 된다. 위와 같이 16ms로 설정되어 있는 값을 1ms로 변경해본다.

$ echo 1 | sudo tee /sys/bus/usb-serial/devices/ttyUSB0/latency_timer

문제는 이를 부팅때마다 반복해야 되는데, setserial 명령어를 udev 룰에 추가해서 이를 간단히 해결할 수 있다. 먼저 setserial를 설치한다.

$ sudo apt install setserial

다음으로 /etc/udev/rules.d로 이동해서, 99-ttyUSB.rules 파일을 만들거나, 이미 사용하고 있는 룰에 다음과 같이 추가한다.

KERNEL=="ttyUSB[0-9]*", MODE="666", ATTRS{idVendor}="0403", RUN+="/bin/setserial /dev/%k low_latency"

저장하고, 재부팅한다.

이제 명령어로 확인해보면

$ cat /cat/sys/bus/usb-serial/devices/ttyUSB0/latency_timer
1
$ cat /cat/sys/bus/usb-serial/devices/ttyUSB1/latency_timer
1
$ cat /cat/sys/bus/usb-serial/devices/ttyUSB2/latency_timer
1

모든 USB 시리얼포트의 latency_timer 값이 1ms로 설정되어 있음을 볼 수 있다.