라즈베리파이3 기준  bluez 는 기본으로 설치가 되어있는 듯.


파이썬 라이브러리 설치

$ apt install python-bluez

..는 python2 밖에 안된다.


$ sudo apt install python3-dev libbluetooth-dev

$ sudo pip3 install pybluez



iBeacon 스캔

몇가지 예제들이 있던데, 내가 좀 수정함


https://github.com/iolate/rasp-ble-scanner



(작성 중...)

어차피 SSH 연결해서 쓸텐데, 첫 연결시에 모니터와 키보드 마우스를 연결해야하는게 너무 귀찮고 번거로웠다.


headless 설치법을 발견해서 정리.


1. SSH 활성화

컴퓨터에서, 라즈베리파이 부트 파티션 루트에 ssh 파일을 생성


2. 와이파이 연결 설정

마찬가지로 루트에 wpa_supplicant.conf 파일 생성 후 아래 내용 입력

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
	ssid="<ssid>"
	psk="<password>"
}


3. SSH 연결

pi@raspberrypi.local 로 ssh 연결 시도.

비밀번호는 raspberry

passwd


hostname 변경

그냥 raspi-config 로 바꾸는게 낫다


sudo raspi-config

 -> 2 Network Options - N1 Hostname


timezone 변경

sudo timedatectl set-timezone Asia/Seoul



99. (내가 편할려고 쓰는) 기타


apt 리포지토리 변경

/etc/apt/sources.list


deb http://ftp.kaist.ac.kr/raspbian/raspbian/ stretch main contrib non-free rpi


apt 기본


sudo apt update
sudo apt upgrade

sudo apt install vim screen


Kodi 설치

sudo apt install kodi


ROS 는 TCP layer에서 두개 이상의 기기의 Communication 도 지원한다.

두 기기가 같은 공유기를 잡고있다면 IP 설정만으로 되고, 그게 아니라면 두 기기를 이더넷케이블 등으로 직접 연결한다음에 설정을 해주면 됨.


편의상 두 기기는 P (Primary, Master) / S (Secondary, Slave) 로 표기한다.


1. 두 기기의 연결

우선 두 기기가 라우터나 스위치를 끼고 물려있다면 상관없지만, 이더넷 케이블로 서로 다이렉트 연결할 것이라면 static ip 설정을 해줘야한다.

이미 공유기 등을 통해 서로 접근가능한 상태라면 건너뛰자!


예전엔 crossover cable 이라고, 이런 목적으로 사용할때 tx/rx 를 바꿔서 만든 utp 케이블을 사용해야하는데, 요즘 기기는 알아서 인식한다. 오히려 crossover cable 을 사용하면 인식을 못하기도 하니, 10년 넘은 장비가 아니라면 그냥 일반 utp 케이블을 꼽도록 하자.


여튼, 두 기기 모두 /etc/networking/interfaces 파일을 열어서 아래 구문을 추가해준다.

인터페이스 이름(eth0)은 필요시 알아서 수정하고, 이미 설정이 되어있다면 수정해주자.


auto eth0

iface eth0 inet static

address 172.16.1.X

netmask 255.255.255.0


보통 10.0.0.X 대역을 많이 사용하는데, 나의 경우 학교가 10.0.0.0/8 대역을 사설망으로 사용하는터라 172.16.1.0/24 대역을 사용하였다.

P는 172.16.1.2, S는 172.16.1.1 을 할당하였음


연결확인은 서로 ping 을 날려보자. ssh 연결 테스트도 좋고..


2. 환경 변수 설정

ROS_IP, ROS_MASTER_URI, ROS_HOSTNAME 3개의 환경변수를 설정해줘야한다.


# Primary

export ROS_IP={IP_of_P}

export ROS_MASTER_URI=http://localhost:11311

export ROS_HOSTNAME=$ROS_IP


# Secondary

export ROS_MASTER_URI=http://{IP_of_P}:11311

export ROS_HOSTNAME={IP_of_S}


이렇게 설정해주면 된다.


나의 경우엔

# Primary

export ROS_IP=172.16.1.2

export ROS_MASTER_URI=http://localhost:11311

export ROS_HOSTNAME=$ROS_IP


# Secondary

export ROS_MASTER_URI=http://172.16.1.2:11311

export ROS_HOSTNAME=172.16.1.1


이렇게 된다.


각 기기의 ~/.bashrc 최하단에 넣어주고 재부팅 혹은 $ source ~/.bashrc 하면 끝


3. 테스트

https://erlerobotics.com/docs/Robot_Operating_System/ROS/Basic_concepts/Examples/Publisher_and_subscriber.html


간단하게 timestamp 를 publish 하고 subscribe 하는 샘플 코드가 있다.

파이썬 코드는 굳이 컴파일(catkin_make)까지 할 필요 없으니 하단의 python 코드 두개를 기기에 적당히 복붙하고

$ python talker.py

$ python listener.py

로 실행해줘도 된다.



4. Erlebrain 에서의 mavros


환경변수가 설정되지 않고 실행된 topic 들은 다른 기기에서 subscribe 가 안된다.

보통 roscore 등을 직접 실행하는 경우엔 상관없겠지만,

내가 사용하려는 Erlebrain 의 경우 roscore 와 mavros 등을 자동실행해서 데몬처럼 유지시켜준다.

즉, 자동실행되는 mavros 의 토픽은 Secondary 에서 topic 을 subscribe 하는게 안된다...


이래저래 머리를 굴려보다 결국 mavros 를 실행하는 부분을 찾아서 환경변수 설정을 끼워넣었다.

좀 더 범용적인 해결책을 원했지만.. 어차피 딴거 별거 없기도 하고........


Erlebrain2 기준 /lib/systemd/system 경로의 service 파일들을 통해 프로세스가 실행되며,

그 스크립트들은 ~/ros_catkin_ws/install_isolated 에 위치한다.

즉, ~/ros_catkin_ws/install_isolated/setup-mavros.bash 파일을 열어서

rosrun 직전에 위에서한 환경변수 설정을 다시 해주면 된다.


수정 후 재부팅하면 S 에서도 subscribe 가 잘된다.


mavros 가 아닌 다른 topic 에 대해서도 필요하다면 비슷한 방법으로 해결을 보자.

혹은 ~/ros_catkin_ws/install_isolated/setup.sh 파일을 수정해도 될 것 같긴 하다. (안해봄)

setup-~~.bash 형태의 스크립트들이 쟤를 source 하고 시작해서...



참고

http://wiki.ros.org/ROS/NetworkSetup

http://wiki.ros.org/ROS/Tutorials/MultipleMachines

https://erlerobotics.com/docs/Robot_Operating_System/ROS/Basic_concepts/Configure_your_network.html


Ebay 등에서 저렴한 아두이노를 사면 문제가 하나 있는데, 바로 드라이버 인식이 바로 안된다...


본래 사용되는 FT232RL 등의 USB 칩은 인증이 되어있거나 이미 탑재된 경우가 대다수인데,

자체 정책으로 $3 이하로는 못판다나 뭐라나..


여튼 그래서 중국에서 CH340, CH340G or CH341 등의 칩셋을 대신 사용하는데, 이 경우 Windows 건 Mac 이건 따로 커널 드라이버를 설치해줘야함은 물론 signing 도 받지 않아 여러 경고문..을 볼 수가 있다.


----------------------------

수정.


https://tzapu.com/ch340-ch341-serial-adapters-macos-sierra/


이 주소에서 드라이버를 받으면 rootless 를 끄지 않고도 인식 및 사용가능!

sierra 이후는 아래 방법으로 진행하면 연결시 커널패닉.. 이 일어난다.

그냥 윗 링크에서 받아서 사용하자.


----------------------------


Mac 의 경우 rootless 기능이 생기면서 좀 곤란해졌는데, 쉽게 말해 rootless 를 끄지 않으면 사용할 수 없다..


커널 익스텐션 체크만 끌 수 있다는게 다행이면 다행이려나..


여튼,

1. 재부팅하면서 Cmd+R 을 눌러 복구모드로 진입한다

2. 터미널을 실행한다

3. csrutil enable --without kext

4. 재부팅



참고:

http://tzapu.com/making-ch340-ch341-serial-adapters-work-under-el-capitan-os-x/


드라이버 (for MAC):

http://www.wch.cn/download/CH341SER_MAC_ZIP.html

아두이노로 인터넷 연결을 사용하고 싶었으나, 학교 무선망은 기업용 WPA2 였고, 이는 OS 레벨단의, 잘 만들어진, 인증이 없으면 사용하기 힘들다는 글들만...


가능한 모듈이 있다고 한들 그 가격이 비쌀것이기에 결국 라즈베리파이로 눈을 돌렸다.


라즈베리파이에서도 연결하는게 쉽진 않았지만 여튼...


설정법이 워낙 다양하겠지만, 우리학교(UNIST)에선 이렇게 가능했다.


참고로 우리 학교 공용망에 대해 간략히 설명하자면

SSID: WUNIST_AAA

보안종류: WPA2 Enterprise

암호화: AES

네트워크 인증 방법: PEAP

EAP 인증 방법: MSCHAP v2

*서버 인증서 유효성 검사 하지 않음


1. wpa_supplicant 설정

우선

/etc/wpa_supplicant/wpa_supplicant.conf

이 파일의 내용을 수정한다.



ssid 는 알거고,

key_mgmt 는 개인용이 WPA-PSK / 기업용이 WPA-EAP

proto 랑 pairwise 는 아래 표 참고

 

WPA1 

WPA2 

proto 

WPA 

RSN 

pairwise

TKIP

CCMP 

identity 랑 password 는 인증정보 알아서 입력해주면 되고,

scan_ssid / eap / phase1 / phase2 등도 위와 같이 입력해주면 된다.


뭐 없어도 되는 값들이 있을 수 있지만, 그냥 저 상태로 잘 되길래 더이상 터치 안했다.


보통 ca_cert 값에, pem 파일을 넣을텐데, 위에 적었듯이, 서버 인증서 유효성 검사를 하지 않을 경우 생략하면 된다.



2. 설정 확인

설정 및 인증이 잘 되는지 확인해보려면 아래와 같은 명령어를 사용한다.

우선 네트워크 연결을 꺼주고..

# ifdown wlan0

우리가 만든 설정파일로 연결을 시도한다.

# wpa_supplicant -Dwext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf

(혹시나 네트워크 이름이 wlan0 이 아닐경우 바꿔주자.)


참고로 -B 옵션은 백그라운드. 밑에선 쓴다.


로그를 읽어보면 '아 안됐구나..' / '어 된건가?'

하는 감이 온다.(귀찮)



3. network interface 설정

/etc/network/interfaces 를 아래와 같이 수정해준다.


lo, eth0 인터페이스들은 알아서 하고,



이렇게 입력해준다.


4. 연결하기

# ifdown wlan0

# ifup wlan0


을 한 후, 로그에서 DHCP 로 아이피까지 잘 받아오면 성공.


나의 경우 2번에 한번 꼴로 잡는 것 같은데, 왜그런진 잘 모르겠다.

재부팅시마다 잘 잡아야 할텐데...;;;


그냥 시간이 좀 걸리는 것 같기도 하고....



참고 URL

http://weworkweplay.com/play/automatically-connect-a-raspberry-pi-to-a-wifi-network/

https://www.raspberrypi.org/forums/viewtopic.php?p=353961

+ Recent posts