728x90

1. PMS7003 이란?

공기중의 미세먼지를 측정할 수 있는 센서이다.

측정 범위 0.3~1.0(극초미세먼지) / 1.0 ~ 2.5(초미세먼지) / 2.5 ~ 10(미세먼지)
유효 범위 0 ~ 500
최대 범위 > 1000

2. PMS7003 연결

핀 배열은 위 사진이고 여기서 사용하는 핀은 VCC, GND, RX, TX를 사용한다.

PMS7003을 연결할 때 아래와 같은 인터페이스 보드를 사용하기도 한다.

위 보드를 아래 사진처럼 꽂아주면 된다.

그리고 이 보드와 라즈베리파이를 연결시켜줄 케이블이다.

위 케이블을 다음처럼 꽂아주면 된다.

 

이제 이 케이블의 USB 부분을 라즈베리파이에 연결시켜주고 dmesg | grep tty 명령을 실행시키면 아래처럼 출력된다. ttyUSB0이 PMS7003이 인식된 것이다.

 

3. PMS7003 통신 방식

PMS7003은 UART 시리얼통신으로 데이터를 주고 받는다.

PMS7003의 통신 프로토콜은 2가지가 있다.

  • Activie Mode : 측정값을 연속으로 보내준다.
  • Passive Mode : 사용자가 명령어를 보내줄때 결과를 보내준다.

4. Active Mode

buad rate는 9600이고 데이터는 32Byte이다. 데이터 구성은 아래와 같다. 1번째와 2번째 Byte의 값은 각각 0x42, 0x4d로 고정되어 있고, 3번째 Byte부터는 두 개의 Byte가 합쳐 값을 나타내는 구조이다.

Frame length 16bit = Frame length high 8bit + Frame length low 8bit 이런식으로 구성되어 있다.

마지막 31,32번째 Byte는 Check code의 역할을 하고 첫번째 Byte인 Start character1 부터 data 13 low 8bit를 모두 더한 값이다.

Data 1 ~ 3은 공장 금속 분진 측정, Data 4 ~ 6은 일반 대기 측정이다.

 

5. 소스(C)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// PMS7003 transport protocol-active mode
#include <iostream>
#include <errno.h>
#include <string.h>
#include <stdio.h>
 
#include <wiringPi.h>
#include <wiringSerial.h>
 
using namespace std;
 
int main()
{
    int fd;
    uint8_t pms[32];
    uint16_t pm1, pm25, pm10, checkcode = 0;
    if ((fd = serialOpen("/dev/ttyUSB0",9600)) < 0)
    {
        fprintf(stderr, "Unable serial", strerror (errno));
        return 1;
    }
 
    while(1)
    {
        cout << "============================" << endl;
        for(int i = 0 ; i < 32; i++)
        {
            pms[i] = serialGetchar(fd);
            printf("pms[%d] = %d\n",i,pms[i]);
            if(i<30)
                checkcode += pms[i];
        }
        cout << endl;
        if ((pms[0== 0x42&& (pms[1== 0x4d))
        {
            uint16_t tmp = (pms[30<< 8+ pms[31];
            cout << "Check code = " << checkcode << " sum result = " << tmp << endl;
            if(checkcode == tmp)    cout << "RIGHT" << endl;
 
            pm1 = (pms[10<< 8+ pms[11];
            pm25 = (pms[12<< 8+ pms[13];
            pm10 = (pms[14<< 8+ pms[15];
 
            cout << "PM 1.0 dust = " << pm1 << endl;
            cout << "PM 2.5 dust = " << pm25 << endl;
            cout << "PM 10 dust = " << pm10 << endl;
        }
        checkcode = 0;
        cout << "============================" << endl;
        delay(1000);
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

 

 

참고자료

728x90
728x90

1. 포트포워딩의 필요성

라즈베리파이를 작업 공간이 아닌 다른 곳에 나가서 작업을 하려면 여러가지 제한사항도 많고 귀찮다. 그러다 보면 '파이는 작업 공간에 두고 노트북만 들고 나가 작업 공간에 있는 파이에 접속해서 작업을 할 수 없을까?' 라는 생각을 하게 되는데 이 때 필요한 것이 포트포워딩이다.

2. 포트포워딩(Port Forwarding)이란?

단어 그대로 해석을 해보면 포트를 전달해준다는 의미이고, 위키 백과에는 '컴퓨터 네트워크에서 패킷이 라우터나 방화벽과 같은 네트워크 게이트웨이를 가로지르는 동안 하나의 IP 주소와 포트 번호 결합의 통신 요청을 다른 곳으로 넘겨주는 네트워크 주소 변환(NAT)의 응용이다. 이 기법은 게이트웨이(외부망)의 반대쪽에 위치한 보호/내부망에 상주하는 호스트에 대한 서비스를 생성하기 위해 흔히 사용되며, 통신하는 목적지 IP 주소와 포트 번호를 내부 호스트에 다시 매핑함으로써 이루어진다' 라고 설명되어 있다.

 

간단히 설명하자면 외부에서 내부로 접속할 수 있게 해주는 작업이다.

3. 포트포워딩 설정하기

먼저 윈도우에서 cmd 창을 킨 후에 ipconfig를 입력하면 아래와 같은 창을 볼 수 있는데 여기서 기본 게이트 웨이를 인터넷 주소창에 입력해준다.

아래와 같은 화면이 떴다면 iptime은 초기 로그인 이름과 비밀번호는 admin이다.

이름과 비밀번호 그리고 이미지 문자를 입력하여 로그인을 했다면 관리 도구를 클릭해준다.

관리 도구를 클릭하면 아래와 같은 화면이 나오는데 여기서 왼쪽 메뉴에서 고급 설정 > NAT/라우터 관리 > 포트포워딩 설정을 클릭한다.

포트포워딩 설정으로 들어왔다면 아래 빨간 박스 안에 정보를 입력해주면 되는데

규칙이름 : 자유롭게

내부 IP주소 : 연결할 IP주소를 입력. 라즈베리파이 IP 주소

프로토콜 : TCP

외부포트 : 외부에서 접속을 할 포트.

내부포트 : 컴퓨터로 외부포트에서 연결을 해주었을 때 어떤 포트를 사용할 것인지. 우리는 SSH(PuTTY)를 사용할 것이기 때문에 22를 사용

을 입력해주고 적용을 누르게 되면 아래처럼 목록에 추가된다.

 

이제 테스트를 위해 공유기에 연결하지 않고 외부 IP를 이용해서 라즈베리파이에 접속를 하기위해 로그인을 했을 때 나온 화면에서 볼 수 있는 외부 IP와 설정한 외부 포트를 입력해주면 외부에서도 접속을 할 수 있다.

728x90
728x90

이 포스팅은 생활코딩의 유투브 강의를 보고 작성하였습니다.

 

먼저 https://git-scm.com/downloads 로 들어가 아래와 같은 화면에서 모니터 사진 안에 Download 버튼을 클릭하면 본인의 운영체제에 맞는 설치파일이 다운로드 된다.

 

설치 파일이 다운되었다면 실행시킨 다음 계속 Next를 누르면서 기본으로 설정된 값으로 설치를 하면 된다.

이 부분은 기본 에디터를 어떤것을 사용할 것인지를 설정하는 곳인데 그냥 기본인 Vim을 선택 후 Next를 해준다.

 

이제 다 설치가 완료되었다면 Git bash 프로그램을 실행시켜 주면 아래와 같이 실행이 된다. 이 프로그램은 윈도우에서 리눅스 명령어 형태를 사용할 수 있게 해주는 프로그램이다.

git이 제대로 설치되었는지 확인하기 위해선

$ git

을 실행시킬때 아래와 같이 뜨게 된다면 제대로 설치된 것이다.

728x90

'Programming > Git' 카테고리의 다른 글

git checkout  (0) 2020.05.24
git diff  (0) 2020.05.24
git add, git commit, git status, git log  (0) 2020.05.24
git init  (0) 2020.05.24
Git failed to push some refs to 오류  (0) 2020.02.21
728x90

1. DHT11이란?

DHT11은 온도와 습도를 모두 측정할수 있는 센서이다. DHT11의 측정 범위는 다음과 같다.

 

온도 0 ~ 50 ℃ ± 2℃
습도 20 ~ 90 % ± 5%

 

2. DHT11 연결

위 처럼 4개의 Pin 중 1번 Pin은 VCC, 2번 Pin은 Data, 3번 Pin은 비워두고, 4번 Pin은 GND에 연결하면 된다. DHT11은 3~5.5V의 전원을 줄 수 있다.

3. DHT11 통신 방식

Single-bus data format으로 Single-Wire Two-Way 방식이다. 한번 측정 과정은 약 4ms가 소요된다.

 

data는 40bit로 구성되어 있고, 습도 정수 8bit, 습도 소수 8bit, 온도 정수 8bit, 온도 소수 8bit, checksum 8bit로 이루어져 있다. 데이터가 똑바로 수신 되었다면 checksum 8bit는 나머지 32비트를 더한 값이어야 한다.

 

1. 전반적인 통신 방식

전반적인 통신 방식은 다음과 같다. 여기서 검은색 라인은 MCU가 센서에게 값을 보내는 것을 의미하고 금색 라인은 센서가 MCU에게 값을 보내는 것을 의미한다.

 

먼저 MCU측에서 Start Signal을 LOW 시그널로 보내준다. 그 후 pull up 후 센서 반응을 기다린다.

그 후 DHT측에서 LOW 신호를 보내준 후 pull up 후 수집한 데이터 값을 보낼 준비를 한다.

데이터를 보내고 40bit를 전송 완료했다면 다음 전송을 위해 50us간 대기한다.

2. 세부적인 통신 방식

1. MCU가 DHT에 Start Signal 송신, DHT가 MCU에 응답

먼저 MCU측에서 start signal을 보낸다. pull down을 하여 최소 18ms간 LOW신호를 DHT에 보내준다. 그 후 pull up 후 HIGH 신호를 20~40us 동안 보내준다.

MCU가 Start Signal을 보내준 후엔 DHT가 LOW신호를 80us동안 보낸다. 그 후 80us동안 HIGH신호를 보낸 다음 데이터 전송을 시작한다.

2. DHT가 MCU에게 Data 전송

DHT가 데이터를 보내는 방식은 먼저 50us동안 1bit data를 LOW신호로 보낸다. 그 후 HIGH 신호를 보내주게 되는데 이 신호가 26~28us 동안 보냈다면 '0'을 의미하고, 70us 동안 보냈다면 '1'을 보낸다.

4. 소스(C)

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstdint>
#include <wiringPi.h>
#define DHT11 1
using namespace std;

class dht11{
    uint8_t data[5];
public:
    dht11();
    void Send();
    void Response();
    void Process();
    int GetData();
};
dht11::dht11()
{
    for(int i = 0 ; i < 5 ; i++)
    {
        data[i] = 0;
    }
}
void dht11::Send()
{
    pinMode(DHT11, OUTPUT);        // MCU send out start siganl
    digitalWrite(DHT11, LOW);    // and pulls down voltage
    delay(20);            // for at least 18ms to let DHT11 detect the signal
    digitalWrite(DHT11, HIGH);    // MCU pulls up voltage
    delayMicroseconds(30);        // and waits for DHT respons(20~40)us
} // 5.2 MCU Sends out Start Signal to DHT
void dht11::Response()
{
    pinMode(DHT11, INPUT);

    while(digitalRead(DHT11)!=LOW);  // DHT send out a low-voltage-level response signal
    while(digitalRead(DHT11)!=HIGH); // DHT pulls up voltage and keeps it for 80us and prepares for data transmisson
    while(digitalRead(DHT11)!=LOW);  // Start to transmit next bit data
} 
int dht11::GetData()
{
    int count = 0;
    int j;
    for(j = 0 ; j < 40 ; j++)
    {
        count = 0;
        while(digitalRead(DHT11) == LOW)
        {
            delayMicroseconds(1);
            count++;
            if(count >= 255) return -1;     // start to transmit 1-bit data(50us)
        } // When DHT is sending data to MCU, every bit of data begins with the 50us low-voltage-level
        count = 0;
        while(digitalRead(DHT11) == HIGH)
        {
            delayMicroseconds(1);
            count++;
            if(count >= 255) return -1;
        }
        data[j/8] <<= 1;
        if(count > 30)
        {
            data[j/8] |= 1;
        } // the length of the following high-voltage-level signal determines whether data bit is "0" or "1"
          // 26-28us voltage-length means data "0"
          // 70us voltage-length means data "1"
    }

    if((j>=40)&&(data[4] == data[0] + data[1] + data[2] + data[3]))
    {
        printf("hum = %d, temp = %d\n", data[0], data[2]);
        return -1;
    }
    else
    {
        // cout << "error";
        return -1;
    } // parity bit(data[4])
} // 5.3 DHT Response to MCU
void dht11::Process()
{
    Send();
    Response();
    int result = GetData();
}
int main()
{
    if(wiringPiSetup() == -1)
        exit(1);
    dht11 mdht11;
    while(1)
    {
        mdht11.Process();
        delay(1000);        // wait 1s
    }
}
 

5. 실행 화면

 

728x90
728x90

본 문서는 표윤석 박사님의 youtube ROS 강의와 github를 참조하여 작성되었습니다.

1. ROS의 용어

  • Node : 최소 단위의 실행 가능한 프로세서. 하나의 실행 가능한 프로그램. ROS에서는 최소한의 실행단위로 프로그램을 나누어 작업하게 된다. 각 노드는 메시지 통신으로 데이터를 주고 받는다.

  • Package : 하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은 것. 또한, 패키지의 묶음을 메타패키지라 하여 따로 분리한다.

  • Message : 메시지를 통해 노드간의 데이터를 주고받게 된다. 메시지는 interger, floating, point, boolean과 같은 변수형태이다. 또한, 메시지 안에 메시지를 품고 있는 간단한 데이터 구조 및 메시지들의 배열과 같은 구조도 사용할 수 있다.

  • 메시지의 종류

    • Topic : 단방향, 연속성을 가진 통신 방법. 1:1 뿐만아니라 1:N, N:1, N:N 통신도 가능. 일방적인 데이터를 계속 보낼 때 많이 사용. 센서 데이터 송수신에 많이 사용됨.

      • Publisher Node : 메시지를 보내는 쪽

      • Subscriber Node : 메시지를 받는 쪽

    • Service : 양방향, 1회성인 통신 방법.

    • Action : 명령을 내리면 중간 피드백을 보내주고 마지막에 결과 값을 전송해줌. 복잡하고 장시간 테스트, 중간중간 결과값을 알고싶은 테스트에 쓰임.

    • Parameter : 변수를 네트워크에 지정해 놓고 그 변수를 외부에서 변경시키고 다른 노드에서 받아서 프로세스를 바꿀수 있음.

2. 메시지 통신

ROS에서 가장 기본이 되는 기술적 포인트인 노드간의 메시지 통신이다.

1. 마스터 구동 : XMLRPC(XML-Remote Procedure Call)

`$ roscore` 실행시키면 노드 정보를 관리하고 노드간의 통신을 연결시켜주는 매개체 역할을 하는 마스터가 구동된다. XMLRPC라는 XML기반의 간단한 서버 클라이언트 시스템을 구동한다고 볼 수 있다.

2. Subscriber Node(Node 2) 구동

`$ rosrun 패키지이름 노드이름` 으로 Subscriber Node를 실행시키면 노드의 정보(노드의 이름, 토픽의 이름, 메시지의 형태, IP번호와 포트번호)를 마스터에게 전달해준다.

3. Publisher Node(Node 1) 구동

`$ rosrun 패키지이름 노드이름` 으로 Publisher Node를 실행시키면 2번과 같이 노드의 정보를 마스터에게 전달해 준다.

4. Publisher 정보 알림

마스터는 노드 간의 토픽이름과 메시지의 형태를 매칭하여 Subscriber Node에게 새로운 Publisher 정보를 알린다.

5. Publisher Node에 접속 요청

마스터로부터 받은 Publisher 정보를 이용하여 TCPROS 접속을 요청

6. Subscriber Node에 접속 응답

접속 응답에 해당하는 자신의 TCP URI 주소와 포트번호를 전송

7. TCP 접속

TCPROS를 이용하여 퍼블리셔 노드와 직접 연결한다.

8. 메시지 전송

Publisher Node는 Subscriber Node에게 메시지를 전송 (토픽)

9. 서비스 요청 및 응답

1회에 한해 접속, 서비스 요청 및 서비스 응답이 수행되고 서로간의 접속을 끊는다.

tutlesim 패키지를 예제로 들어보자

먼저 `roscore`로 마스터를 구동시킨 후 `rosrun turtlesim turtlesim_node`를 실행시켜 Subscriber Node를 구동한 후 `rosrun tutlesim tutle_teleop_key`를 실행시켜 Publisher Node를 구동한다.

3. ROS 메시지

메시지는 노드 간에 데이터를 주고받을 때 사용하는 데이터의 형태

  • 토픽, 서비스, 액션은 모두 메시지를 사용

  • 단순 자료형으로 이루어져 있음

  • 메시지 안에 메시지를 품고 있는 간단한 데이터 구조

  • 메시지들이 나열된 배열과 같은 구조

ex) geometry_msgs/Twist

728x90

'Programming > Ros' 카테고리의 다른 글

Ros 개발환경 구축  (2) 2019.07.15
Ros란 무엇인가?  (0) 2019.07.11
728x90

본 문서는 표윤석 박사님의 youtube ROS 강의와 github를 참조하여 작성되었습니다.

1. 한줄설치

ubuntu 터미널에서 wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_kinetic.sh && chmod 755 ./install_ros_kinetic.sh && bash ./install_ros_kinetic.sh 를 실행하면 자동으로 설치가 된다.

다운로드된 파일 install_ros_kinetic.sh은 다음과 같다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/bin/bash
# Apache License 2.0
# Copyright (c) 2017, ROBOTIS CO., LTD.
echo ""
echo "[Note] Target OS version >>> Ubuntu 16.04.x (xenial) or Linux Mint 18.x"
echo "[Note] Target ROS version >>> ROS Kinetic Kame"
echo "[Note] Catkin workspace   >>> $HOME/catkin_ws"
echo ""
echo "PRESS [ENTER] TO CONTINUE THE INSTALLATION"
echo "IF YOU WANT TO CANCEL, PRESS [CTRL] + [C]"
read
echo "[Set the target OS, ROS version and name of catkin workspace]"
name_os_version=${name_os_version:="xenial"}
name_ros_version=${name_ros_version:="kinetic"}
name_catkin_workspace=${name_catkin_workspace:="catkin_ws"}
echo "[Update the package lists and upgrade them]"
sudo apt-get update -y
sudo apt-get upgrade -y
echo "[Install build environment, the chrony, ntpdate and set the ntpdate]"
sudo apt-get install -y chrony ntpdate build-essential
sudo ntpdate ntp.ubuntu.com
echo "[Add the ROS repository]"
if [ ! -/etc/apt/sources.list.d/ros-latest.list ]; then
sudo sh -"echo \"deb http://packages.ros.org/ros/ubuntu ${name_os_version} main\" > /etc/apt/sources.list.d/ros-latest.list"
fi
echo "[Download the ROS keys]"
roskey=`apt-key list | grep "Open Robotics"`
if [ -"$roskey" ]; then
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
fi
echo "[Check the ROS keys]"
roskey=`apt-key list | grep "Open Robotics"`
if [ -"$roskey" ]; then
echo "[ROS key exists in the list]"
else
echo "[Failed to receive the ROS key, aborts the installation]"
exit 0
fi
echo "[Update the package lists and upgrade them]"
sudo apt-get update -y
sudo apt-get upgrade -y
echo "[Install the ros-desktop-full and all rqt plugins]"
sudo apt-get install -y ros-$name_ros_version-desktop-full ros-$name_ros_version-rqt-*
echo "[Initialize rosdep]"
sudo sh -"rosdep init"
rosdep update
echo "[Environment setup and getting rosinstall]"
source /opt/ros/$name_ros_version/setup.sh
sudo apt-get install -y python-rosinstall
echo "[Make the catkin workspace and test the catkin_make]"
mkdir -p $HOME/$name_catkin_workspace/src
cd $HOME/$name_catkin_workspace/src
catkin_init_workspace
cd $HOME/$name_catkin_workspace
catkin_make
echo "[Set the ROS evironment]"
sh -"echo \"alias eb='nano ~/.bashrc'\" >> ~/.bashrc"
sh -"echo \"alias sb='source ~/.bashrc'\" >> ~/.bashrc"
sh -"echo \"alias gs='git status'\" >> ~/.bashrc"
sh -"echo \"alias gp='git pull'\" >> ~/.bashrc"
sh -"echo \"alias cw='cd ~/$name_catkin_workspace'\" >> ~/.bashrc"
sh -"echo \"alias cs='cd ~/$name_catkin_workspace/src'\" >> ~/.bashrc"
sh -"echo \"alias cm='cd ~/$name_catkin_workspace && catkin_make'\" >> ~/.bashrc"
sh -"echo \"source /opt/ros/$name_ros_version/setup.bash\" >> ~/.bashrc"
sh -"echo \"source ~/$name_catkin_workspace/devel/setup.bash\" >> ~/.bashrc"
sh -"echo \"export ROS_MASTER_URI=http://localhost:11311\" >> ~/.bashrc"
sh -"echo \"export ROS_HOSTNAME=localhost\" >> ~/.bashrc"
source $HOME/.bashrc
echo "[Complete!!!]"
exit 0
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs


2. 수동 설치

우선 http://wiki.ros.org/ 에 접속한다. Install을 클릭해 다음 화면으로 넘어간다.

ROS 설치 옵션이 2가지가 있는데 본인의 우분투 버전이 16이라면 ROS Kinetic Kame을 18이라면 ROS Melodic Morenia를 선택한다.

다음으로 본인의 운영체제를 선택한다.

그 후로 다음 순서에 따라 설치를 진행한다.

1. source.list 설정

ROS 패키지 저장소를 설정해준다.

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

2. key 설정

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

만약 keyserver 연결에 문제가 있다면 hkp://pgp.mit.edu:80 이나 hkp://keyserver.ubuntu.com:80 를 위 명령어에 'hkp://keyserver.ubuntu.com:80' 대신에 입력한다.

3. 설치

설치 전에 우분투 업데이트를 해준다.

sudo apt-get update

ROS에는 설치 종류를 3가지를 제시하고 있는데 전체설치 버전인 Desktop-Full Install 부터 최소 설치 버전인 ROS-Base 까지 있다. ROS에서는 Desktop-Full Install을 권장하고 있다. 만약 Desktop-Full Install로 설치를 하지 않아도 Individual Package 방법을 이용해서 개별적으로 패키지를 다운로드 받을 수 있다.

  • Desktop-Full Install: (Recommended) : ROS, rqt, rviz, robot-generic libraries, 2D/3D simulators, navigation and 2D/3D perception

    • sudo apt-get install ros-kinetic-desktop-full

  • Desktop Install: ROS, rqt, rviz, and robot-generic libraries

    • sudo apt-get install ros-kinetic-desktop

  • ROS-Base: (Bare Bones) ROS package, build, and communication libraries. No GUI tools.

    • sudo apt-get install ros-kinetic-ros-base

  • Individual Package: You can also install a specific ROS package (replace underscores with dashes of the package name):

    • sudo apt-get install ros-kinetic-PACKAGE

      e.g

    • sudo apt-get install ros-kinetic-slam-gmapping

To find available packages, use:

apt-cache search ros-kinetic

4. rosdep 초기화

ROS를 사용하기 전에 rosdep를 초기화 해주고 업데이트를 해준다.

sudo rosdep init

rosdep update

5. 환경 설정

쉘을 실행시킬때마다 환경변수를 자동적으로 설정되도록 하는 설정

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc

source ~/.bashrc

6. 추가 의존성 패키지 설치

sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential

7. ROS Workspace 생성

catkin 작업공간을 만들고 빌드를 해본다.

mkdir -p ~/catkin_ws/src

cd ~/catkin_ws/

catkin_make

처음 catkin_make로 실행을 하면 ~/catkin_ws/src폴더 안에 CMakeLists.txt파일이 생성된다. 그리고 builddevel폴더가 생성된다. devel폴더 안에는 설정과 관련된 .sh파일들이 있다.

source devel/setup.bash

설정 스크립트에 overlay 시켜주기 위해서ROS_PACKAGE_PATH 환경변수를 포함시켜줘야 한다.

echo $ROS_PACKAGE_PATH

설치를 완료했다면 터미널 창에서 roscore 을 실행시킨 후 새로운 터미널을 열어 rosrun turtlesim turtlesim_node를 실행시키면 다음과 같은 화면이 나오게 된다.

또 다른 터미널을 열어 rosrun turtlesim turtle_teleop_key를 실행시킨 후 방향키를 누르게되면 거북이가 움직이게 된다. 이것이 정상적으로 실행된다면 이상없이 설치가 완료된 것이다.

 

728x90

'Programming > Ros' 카테고리의 다른 글

Ros의 중요 컨셉  (0) 2019.07.25
Ros란 무엇인가?  (0) 2019.07.11
728x90

1. wiringPi

wiringPi는 라즈베리파이에서 사용하는 GPIO 사용을 위한 C언어 라이브러리다. wiringPi를 이용하면 아두이노같은 문법으로 사용할 수 있다.

2. 설치

터미널에 git clone git://git.drogon.net/wiringPi를 입력해서 wiringPi 소스코드를 다운받는다.

 

wiringPi 소스코드를 다운 받았다면 wiringPi 폴더로 들어가 git pull origin 명령어를 입력한 후 ./build로 실행한다.

 

정상적으로 설치가 완료되었다면 gpio readall 명령어를 입력하면 다음과 같이 본인 파이의 gpio map이 출력된다.

 

여기서 Physical은 파이 우측 상단에 있는 핀 배열이고 그에 해당하는 이름들, 우리가 사용되는 wPi가 있다. wiringPi를 이용하여 프로그래밍할때는 Physical의 번호가 아닌 wPi의 번호를 이용해 프로그래밍한다.

 

자료출처

- 서영진, 사물인터넷을 위한 리눅스 프로그래밍 with 라즈베리파이 책, 제이펍, p.112

728x90
728x90

라즈베리파이는 RTC(Real Time Clock) 기능이 없어 부팅시에 시간을 설정해줘야하는 단점이 있다. 부팅할때 마다 자동으로 시간을 동기화해주는 작업을 해줄 예정이다.

 

먼저 sudo apt-get update를 실행해주고, 다음으로 sudo apt-get install rdate 를 입력해준다.

설치가 완료됐으면 sudo /usr/bin/rdate -s time.bora.net을 입력 후 date를 실행해 확인해보면 시간이 제대로 설정된것을 볼 수 있다.

부팅 시 마다 위와 같은 실행을 자동으로 해주기 위해 sudo nano /etc/rc.local 로 파일을 열어 전에 했던 명령어들을 아래와 같이 입력해준다.

 

자료 출처

728x90

+ Recent posts