물질주의가 현시하는 삶의 무목적성에서 깨어난 이들이 마주하는 현실은 악이 선(善)을 휘두르는 세상이며, 많은 이들이 선을 알지 못해 악으로 향하는 세상이다. 추상적으로 느껴지던 선악에 대한 관념은 깨어난 이들에게 명료하게 인식되기 시작하며 이러한 자들은 선악식별을 명확히하기 어려운 자들이 악을 선이라 착각하고 또 악에 휘둘리는 비참한 광경을 목도하게 된다. 이러한 광경으로부터 선을 지키려는 문제 의식이 태동하며 나아가 사회에 대한 만연한 악을 걷어내고자 하는 고독한 길을 향한 의지를 불피우게 된다. 이를 통해 인간은 삶의 목적과 의미를 파악하게 되며 널리 선을 구현하고자 하는 소명의식이 깃들게 된다.

 

선을 통해 깃든 소명의식은 앞으로 나아가야할 방향을 제시한다는 점에서 인간이 삶을 영위하는 데 있어 훌륭한 지침이자 기준이 된다. 또 이를 통해 많은 사람이 구가하는 돈, 명예, 권력과 같은 세속적인 가치의 혼탁함에서 벗어나 삶을 더욱 명징하게 볼 수 있게 된다. 이러한 소명의식이 깃든 사람이 제시하는 삶의 방향과 가치는 많은 사람을 감화시킬 수 있는 힘이 있다. 감화된 많은 사람들은 기꺼이 자발적으로 동참하여 뜻을 함께하고자 하며 이러한 형태가 권력으로서 작용한다. 이러한 형태로 잉태된 권력은 선의지를 향한다.

 

선을 인식하고 소명의식이 깃든 자는 공동체를 향한 삶에 뜻을 두고 살아간다. 하지만 필연적으로 가해지는 선의 무게는 삶을 짓누르며 삶에는 발랄한 생기보다는 엄숙함이 들어서게 된다. 속담대로 왕관을 쓰려는 자 그 무게를 견뎌야 하는 것이다. 엄밀하게는 왕관을 써야되는 자 그 무게까지 견뎌내야 하는 것이다. 그 이유는 ‘자신’의 자유의지가 아닌 선이 내리는 ‘명령’의 인식이 세상에 대한 사랑과 책임감의 형태로 나타나 한 인간의 의식에서 삶을 짓누르기 때문이다.

 

이러한 선의 ‘명령’은 인간이면 누구나 들을 수 있다. 하지만 자신의 본성에 내재된 선을 인식하고 개화하는 자들은 소수에 해당한다. 이러한 소수들은 때때로 자신과 세상과 자연에 대한 의문과 호기심에서 출발한다. 나는 누구인가? 세상은 무엇이며 자연은 어떻게 존재할 수 있는가? 우리 인간은 어디를 향해 나아가며, ‘신’이란 또 무엇인가?와 같은 존재의 근원을 탐구하면서 선을 인식할 수 있는 기틀을 마련하게 된다. 이러한 존재의 근원에 대한 탐구는 강한 지적 호기심에서도 시작되지만 삶의 위기로부터도 시작된다. 큰 성취 뒤에 느껴지는 허무감과 삶의 방향에 대한 강한 회의와 의문은 인간의 삶에 실존의 위협을 주며 이 때 인간은 근본적으로 존재의 근원에 대한 물음이 일지 않을 수 없다.

 

이러한 존재 근원에 대한 물음은 인류의 수 많은 철학자 또는 성인이라 불리는 자들이 끌어안았던 문제다. 인류의 4대 성인이라 불리는 부처, 예수, 공자, 소크라테스의 공통점은 인간 존재에 대한 깊은 이해가 있었다는 점이며 그들의 육체는 죽었으나 그들의 위대한 정신은 죽지 않고 현대까지도 살아남아 계승되고 있다. 인류가 나아갈 방향을 제시했다는 점에서 먼 훗날에 도래할 인류에게까지 영향을 미칠 것이다.

 

부처는 존재 근원에 대한 물음에 무아(無我)라고 했다. 우리가 ‘나’라고 생각하고 살아가는 ‘존재’에 대해 '나’라고 결정지을 수 있는 그 어떠한 속성도 없다는 것이다. 이를 확장하여 부처는 삼라만상이 제행무상(諸行無常)이라 했다. 세상 만물은 상호의존에 의해 일시적으로 생성하고 소멸하는 존재라는 것이다. 이를 두고 부처는 세상 만물이 비어있다, 공(空)하다고 표현했고 인류가 이를 깨닫기를 바랐다. 이러한 ‘자아’의 무상함을 깨닫게 되면 ‘나’라는 존재에서 이기심이 줄어들고 그 자리에 이타심이 피어오를 것이기 때문이며, 또 이 이타심은 세상을 향한 선으로 작용하여 궁극적으로 모두가 하나 된 마음인 화엄의 세계가 펼쳐질 것이기 때문이다.

 

예수는 존재 근원에 대한 물음에 사랑이라 했다. 여기서 말하는 사랑이란 아가페적인 사랑으로 인류를 널리 사랑하는 박애정신을 의미한다. 기독교 정신의 핵심은 내 안에 깃든 성령을 인식하고 이 성령이 ‘하나님’과 같다는 것을 깨닫는 것이다. 기독교에서는 우리는 모두 ‘하나님’의 자녀이기 때문에 형제 자매라고 부른다. 그리고 우리 형제 자매에게는 모두 성령이 깃들어 있다고 말한다. 또 우리는 성령으로 하나된다고 말한다. 기독교 삼위일체에 따르면 성부, 성자, 성령은 하나다. 즉 형제 자매에게 깃든 성령은 성부안에서 하나되는 것이다. ‘하나’ 되기 때문에 이는 우리가 서로 다른 존재가 아님을 의미한다. ‘너’라고 부르는 타인은 ‘나’인 것이다. 이를 진정으로 인식하게 된다면 ‘나’의 또 다른 모습인 ‘너’를 위해 용서하고 배려하고 자비를 베푸는 사랑을 실천하게 되는 것이다. 그리고 이 성령을 모두가 인식하고 서로가 하나의 존재임을 인식하며 살아가는 세상이 천국이 되는 것이다. 이 천국이 곧 모든 악을 걷어내고 모두가 선을 구가하는 세계가 된다.

 

공자는 존재 근원에 대한 물음에 인(仁)이라 했다. 여기서 인(仁)이란 인의예지(仁義禮智)의 인(仁)이다. 인의예지란 ‘인’을 깨닫게 되면 ‘의(옳음)’가 무엇인지 알게되고 ‘의(옳음)’를 알면 ‘예’를 행하게 되며 ‘예’를 행하는 삶의 태도가 ‘지(지혜)’로 나타난다는 것이다. 따라서 인의예지 구조에는 순서가 있다. 인(仁)을 깨닫는 것이 먼저다. 그러면 나머지는 자연스레 체득하게 된다. 그렇다면 인(仁)이란 무엇일까? 인(仁)이라는 문자의 형상을 보면 두 사람이다. 이는 곧 ‘우리’를 의미하며 ‘우리’는 ‘나’와 ‘너’가 하나되기 위한 사랑안에서 가능해진다. 유교에 따르면 인(仁)은 우리 안에 내재된 본성이다. 이 본성을 인식하면 타인에 대한 사랑이 피어오르며 공동체를 향한 삶을 지향하게 된다. 인(仁)을 인식하는 것은 천명(天命)을 ‘듣게’되는 것이자 선을 인식할 수 있게 된 것과 같다. 천명(天命)을 들은자 선을 펼치는 삶에 뜻을 두고 살게 된다.

 

힌두교 경전 우파니샤드와 베다에서 존재 근원에 대한 핵심 가르침은 범아일여(梵我一如)다. 범아일여의 문자 그대로의 뜻은 모든 존재는 하나와 같다는 것이며, 힌두교식 표현으로는 아트만과 브라만이 하나라는 것이다. 아트만이란 ‘나’라는 존재의 근원이자 본성이다. 기독교의 성령이자 유교의 인(仁)과 같다. 브라만은 우주의 궁극적 실재를 의미한다. 기독교의 삼위일체와 같은 맥락으로 아트만은 브라만과 같다. 우리 모두는 아트만을 인식하지 못한 채 우리의 육신을 ‘나’라고 생각하며 살아가고 있다. 힌두교를 통한 구원은 ‘나’라는 존재에 내재한 아트만을 인식하는 것이다. 기독교와 마찬가지로 내 안의 아트만(성령)을 인식하게 되면 모든 존재가 브라만(성부)과 하나됨을 알게 된다. 아트만을 인식하는 순간은 육신을 나라고 알고 있는 에고가 죽는 순간이며 ‘나’와 ‘너’의 경계가 사라지고 모든 존재와 하나가 되는 순간이다. 이후 모든 존재에 대하여 자연스레 사랑이 피어오르게 되고 타인을 향한 선의와 이타심이 피어오르게 된다.

 

위대한 성인과 종교의 가르침으로부터 존재의 의미를 깨닫고 선을 인식하는 자, 결코 이전으로 되돌아갈 수 없다. 선이 인간의 정신과 의식에 기거하는 것을 느낄 수 있기 때문이다. 선은 인간의 가치판단에 있어 가장 우선순위가 된다. 이러한 특성으로 인해 선은 인간에게 어떠한 ‘의무’를 부과한다. 여기서 ‘의무’란 인간 자신의 존재 의미를 실현하기 위한 어떤 것이다. 그 것은 세상을 향한 박애정신이자 공동체를 향한 삶이고 인류의 미래를 위한 일이라는 형태로 나타난다. 이를 실현하는 과정이 인간의 삶이다. 선을 추구하며 악을 걷어내는.

'Interest > 사유노트' 카테고리의 다른 글

데카르트 실체관의 오류  (0) 2022.10.13
위대한 성장(成長): 도약과 비약  (0) 2022.02.11

1. 경제성장률

경제성장률이란 무엇인가? 실질 국내총생산(GDP)의 변화율이다. 그렇다면 국내총생산(GDP)이란 무엇인가? 국내총생산이란 일정 기간 동안 한 국가안에서 모든 경제주체들이 생산한 부가가치의 합이다. 그 자체로 국가의 경제규모가 된다. 여기서 실질이란 의미는 경제규모가 증가했다고 착시로 여겨질 수 있는 물가변동을 제외한 순수한 생산량의 변화를 의미한다. 그렇다면 실질 국내총생산량이 늘었다는 것은 무엇을 의미할까? 경제주체의 관점에서 기업의 생산과 투자와 고용이 늘었고 이로 인해 가계의 소득과 소비가 늘었음을 의미한다.

 

그렇다면 경제성장률은 왜 중요할까? 국가의 경제성장을 가장 집약적으로 보여주는 대표적인 거시경제지표기 때문이다. 정부는 경제성장률의 향상을 목표로 경제정책을 수립하고 시행한다. 따라서 정부가 목표 경제성장률을 얼마나 성취했는지를 측정할 수 있는 일종의 종합성적표와 같다. 그러면 우리나라 경제성장률의 변화는 어떠한가? 1970~1980년대 고도성장기에는 성장률이 10%대가 넘었으나 최근에는 3%도 어려워졌다. 하지만 이러한 현상은 경제의 규모가 커지면서 발생하는 불가피한 측면이 있다.

 

경제성장률은 한국은행이 분기 또는 연간 단위로 발표한다. 발표되는 수치는 기업과 투자자의 의사결정에 영향을 미친다. 크게 세 단계로 속보치 → 잠정치 → 확정치 순으로 공개하며 미국도 이와 같다. 확정치로 갈수록 정확해진다. 하지만 확정치는 잠정치의 미세조정 수준이라 큰 주목을 받지 못하는 측면이 있다.

 

 

2. 물가상승률

물가상승률이란 무엇인가? 소비자 물가지수의 변화율이다. 소비자 물가지수란 무엇일까? 소비자 물가지수는 가계가 많이 구매하는 460개 품목을 기준으로 중요도에 따라 가중치를 부여해 계산되는 경제지표다. 460개 품목에는 식료품비, 대중교통비, 통신비, 학원비 등이 포함된다. 만약 전년도의 소비자 물가지수가 100이었고 금년도 소비자 물가지수가 110이라면 물가상승률이 10%가 되는 것이다. 

 

그렇다면 물가가 왜 중요할까? 정부가 물가상승률을 근거로 근로자의 임금과, 국민연금과, 최저생계비를 조정하므로 국민의 생계와 직결되어 있기 때문이다. 따라서 정부는 안정적인 경제성장을 위해 '물가안정목표'를 정하고 관리한다. 

 

소비자 물가지수는 물가지수의 하위 개념으로 물가지수에는 소비자 물가지수, 생산자 물가지수, 수출입 물가지수가 있다. 생산자 물가지수는 기업 관점에서의 물가지수다. 기업이 국내시장에 공급하는 상품과 서비스 878개 품목을 정하고 이에 대한 가격 변동을 측정하여 생산자 물가지수를 계산한다. 수출입 물가지수도 동일한 맥락으로 수출 206개, 수입 230개 품목에 대한 가격 변동을 측정해 물가지수를 계산한다. 

 

 

3. 환율

환율이란 무엇인가? 서로 다른 국가 화폐간의 교환비율이다. 그렇다면 근본적으로 환율은 왜 발생할까? 그 이유는 국가의 경제상황에 따라 화폐의 가치가 바뀌기 때문이다. 예를 들어 각 나라마다 돈의 가치를 조절하는 금리가 다르고,  어떤 물건에 대해 국가마다 수요와 공급이 달라 물가가 다르기 때문이다. 그렇다면 환율을 결정짓는 핵심 요인들은 무엇이 있을까? 대표적으로 금리, 인플레이션률, 고용률/실업률, 무역수지, 정치적 안정성 등이 있고 이들 간의 복잡한 상호작용으로 결정된다. 

 

환율은 왜 중요할까? 환율 등락에 따라 무역수지가 달라지기 때문이다. 무역수지란 수출과 수입의 차이를 의미한다. 수출이 많으면 흑자 수입이 많으면 적자다. 그렇다면 환율이 상승하면 어떻게 될까? 우리나라 경제에서 가장 중요한 환율은 원-달러 환율이므로 이를 통해 예시를 들자면, 원-달러 환율이 증가한다는 의미는 달러의 가치가 높아지고 원화의 가치가 낮아진 것이다. 이렇게 되면 낮아진 원화가치로 인해 수출에 있어 가격경쟁력이 생긴다. 다른 나라와 같은 물품을 수출하더라도 원화가치가 낮으므로 상대교역국에서 다른 나라보다 더 싸게 더 많이 살 수 있기 때문이다. 그렇기 때문에 수출이 많은 기업은 환율 상승은 호재와 같다. 반대로 환율이 하락하면 어떻게 될까? 환율이 하락한다는 것은 달러가치가 하락하고 원화가치가 상승한다는 것이다. 원화가치가 상승하면 수입이 많은 기업에게 호재다. 상대교역국에서 물건을 사올 때 원화가치가 높으므로 더 많이 더 싸게 사올 수 있기 때문이다. 따라서 이러한 환율 상승은 양날의 검이라 볼 수 있다. 

 

하지만 환율이 과도하게 변동하면 어떻게 될까? 만약 과도하게 환율상승이 이뤄졌다면 원화가치는 과도하게 떨어지는 것이다. 이는 국가와 기업의 외채의 상환부담이 커지게 된다. 또 불안정해진 화폐가치로 인해 국내에 투자한 외국인 투자자들이 한국주식과 채권을 팔고 떠난다면 국내 기업과 투자자들에게 손실이 발생하게 되고 기업의 생산과 투자가 줄고 고용이 줄면서 국민경제의 불안정성을 초래할 수 있다. 

 

 

4. 국제수지

국제수지란 무엇인가? 외화 입출금의 차이를 국가 단위에서 가계부 쓰듯 체계적으로 기록한 것이다. 나라 안으로 들어온 외화가 많을 경우 국제수지 흑자, 나라 밖으로 나간 외화가 많을 경우 국제수지 적자다. 국제수지는 구체적으로 어떻게 결정될까? 국제수지의 구성요소는 거래유형에 따라 경상수지, 자본수지, 금융계정이 있으나 경제신문이 주목하는 핵심은 경상수지다. 경상수지란 상품수지, 서비스수지, 본원소득수지, 이전소득수지로 나뉜다. 이 중에서 중요한 것은 상품수지와 서비스수지다. 상품수지란 상품수출입의 결과이며, 서비스수지란 운수, 여행 등의 서비스 거래의 결과다. 이 상품수지와 서비스수지가 중요한 이유는 많은 상품과 서비스를 수출할수록 기업의 이익이 커지고 생산이 커지고 고용이 늘어나고 결과적으로 국민소득이 올라가게 된다.

 

하지만 국제수지의 흑자가 과도하게 커져도 문제다. 그 이유는 상대교역국과 무역마찰이 발생할 수 있기 때문이다. 흑자를 보고 있다는 것은 상대교역국이 적자를 보고 있다는 말과 같다. 실례로 도널드 트럼프는 대통령 취임이후 한국의 대미 무역수지의 흑자가 과도하다는 점을 물고 늘어진 적 있다. 또한 현재 진행중인 미중 무역전쟁은 미국이 중국과의 무역에서 과도한 적자를 보고있다는 불만에서 비롯된 측면도 있다. 따라서 국제수지의 대규모 흑자는 반드시 좋다고 할 수는 없고 타 교역국과 경제협력을 위해 균형을 이루는 것이 합리적이라 할 수 있다.

 

 

5. BSI/CSI/ESI

BSI/CSI/ESI란 무엇인가? 경제주체의 주관적인 체감경기를 나타내는 경제지표다. BSI(Business Survey Index)는 기업경기실사지수로 기업의 관점에서 느끼는 체감경기를 나타낸 지표이며, CSI(Customer Survey Index)는 소비자의 관점에서 느끼는 체감경기를 나타낸 지표다. ESI(Economic Survey Index)는 BSI와 CSI를 종합한 지표다. 

 

이러한 BSI/CSI/ESI가 왜 필요할까? 수 많은 경제현상이 책에 나오는 경제이론과 경제지표들만으로 설명하기 어려운 측면이 있기 때문이다. 따라서 이를 보완하기 위해 심리적인 관점을 고려해 만든 심리지표라 할 수 있다. 그렇다면 이러한 주관적인 체감경기지표는 누가 어떻게 조사할까? 먼저 BSI는 한국은행, 산업은행, 대한상공회의소 등이 분기마다 조사를 실시하며, 기업의 업황, 재고, 생산설비, 설비투자, 인력, 신규수주, 생산, 매출, 가격 등의 요소를 묻는다. CSI는 한국은행이 매달 조사를 실시하며 전국 2,200여개 가구를 대상으로 가계 수입, 소비지출, 현재 경기 판단과 향후 전망 등의 항목을 묻는다.

 

BSI/CSI/ESI 지표의 어떠한 판단 가능한 수치가 있을까? BSI/CSI/ESI는 복잡해보이나 수치 해석 방법은 매우 간단하다. 세 지표 모두 0~200의 값을 가지며 기준치는 100이다. 100이란 의미는 긍정과 부정의 수치가 같다는 말이다. 100보다 크면 체감경기를 긍정적으로 바라본다는 의미며 100보다 작으면 체감경기를 부정적으로 바라본다는 의미다.

 

 

6. 고용률/실업률

고용률이란 무엇인가? 생산가능인구 중에서 취업자가 차지하는 비율이다. 생산가능인구란 만 15세~64세에 해당하는 인구를 일컫는다. 그렇다면 고용률은 어떤 역할을 할까? 국가경제의 실질적인 고용창출능력을 보여주는 역할을 한다. 

 

실업률이란 무엇인가? 경제활동인구 중 실업자가 차지하는 비율이다. 경제활동인구란 만 15세 이상 인구 중 취업자 + 실업자를 일컫는다. 여기서 말하는 실업자란 취업을 원하지만 취업하지 못한 사람을 일컫는다. 통상적으로 취업준비자나 구직단념자는 실업자에서 제외되어 실업률에 반영되지 않고, 별도의 비경제활동인구로 분류된다. 때문에 취업난이 지속되면 취업준비자나 구직단념자가 늘면서 오히려 실업자가 줄어드는 현상이 나타날 수 있다.

 

고용률과 실업률의 관계는 어떻게 될까? 흔히 고용률이 오르면 실업률이 떨어지고 실업률이 오르면 고용률이 오르는 역의 관계가 성립한다고 생각할 수 있다. 하지만 정확히는 그렇지 않을 수 있다. 그 이유는 비경제활동인구가 고용률을 산출할 때는 포함되고 실업률을 계산할 때는 제외되기 때문이다. 따라서 정확한 고용동향을 파악하기 위해서는 고용률과 실업률의 지표를 함께 보아야 한다. 

 

 

7. 주가지수

주가지수란 무엇일까? 수 많은 주식 종목의 가격 변화를 종합해 주식시장의 전반적인 상황을 보여주는 지수이다. 주가지수의 종류는 한국에서는 유가증권시장의 코스피지수와 코스닥시장의 코스닥지수가 있다. 코스피지수는 1980.1.4 기준시점에서 상장주식 가치의 총합을 100으로 기준삼으며 코스닥지수는 1996.7.1 기준시점으로 상장주식 가치의 총합을 1000으로 기준삼는다. 미국에서는 다우지수, 나스닥지수, S&P500이 대표적이다. 다우지수의 정식명칭은 다우존스 산업평균지수이며 뉴욕증권거래소의 대표 우량주 30개의 시세 움직임이다. 이외에 일본은 닛케이지수, 영국은 FTSE100 지수가 있다. 앞서 열거된 지수는 영향력 있는 주가지수로 통한다. 

 

그렇다면 주가지수는 왜 중요할까? 증시와 경제의 흐름을 보여주는 거울이기 때문이다. 또 경제의 호황과 불황을 가늠하는 지표며 또 지수만으로 투자상품이 되는 유의미성 때문이다.

 

 

8. 기준금리

기준금리란 무엇인가? 한 나라의 금리를 대표하는 정책금리로 시중 금리의 기준이 되는 금리다. 정책금리란 각국 중앙은행이 특별히 콕 찍어서 결정한 금리다. 중앙은행이란 은행들의 은행을 의미하는 것으로 한국의 '중앙은행'은 한국은행이다. 한국은행이 기준금리를 올리거나 내리면 시중은행도 이를 반영해 개인과 기업을 대상으로 한 예대 금리를 조절한다. 시중금리란 정책금리를 제외한 모든 금리를 일컫는 것으로 채권금리, 대출금리 등이 있다.

 

그렇다면 이 기준금리란 왜 중요성을 가지는 것일까? 돈의 가치가 달라지는 것이기 때문이다. 돈의 가치가 달라지면 이에 따라 채권, 주식, 부동산 시장에 미치는 파급효과가 생기기 때문이다. 예를 들어 시장금리가 낮아지면 기본적으로 예금이 줄고 대출이 많아진다. 또 기준금리가 낮아지면 국내 금융상품의 수익률은 상대적으로 낮아진다. 따라서 외국인의 국내 투자가 줄고, 기존 외국인의 투자금이 빠져나가 원화가치가 하락(환율상승)하는 요인으로 작용한다. 환율이 상승하면 수출시 가격경쟁력이 높아진다는 장점이 있다. 하지만 기준금리가 낮아진다고 해서 경기를 반드시 살린다는 보장은 없다. 낮아진 대출이자로 인해 부동산 대출 급증을 유발해 자산 거품을 일으킬 수 있기 때문이다. 

 

 

9. 가계부채/국가채무

가계부채와 국가채무란 무엇인가? 가계부채는 가계가 갚아야할 대출금의 총액이며 국가채무는 정부가 갚아야할 대출금의 총액이다. 가계부채와 국가채무는 왜 중요할까? 가계부채와 국가채무가 증가하면 국가신용등급이 하락하고 경제의 불안정성을 야기할 수 있기 때문이다. 따라서 가계부채와 국가채무를 관리하는 것이 중요한데 이 때 기준이 되는 것은 GDP다. GDP 대비 가계부채와 GDP 대비 국가채무가 얼마나 되는지 비율을 고려한다. 적절한 비율에 대한 고정된 기준은 없으나 이를 '잘' 조절할 수 있어야 한다. 참고로 문재인 정부의 최근 5년간의 국가채무와 GDP 대비 비율은 아래 그림과 같다.

 

 

10. 어닝 쇼크/어닝 서프라이즈

어닝 쇼크와 어닝 서프라이즈란? 어닝 쇼크는 기업의 실적이 시장예상치보다 부진한 상황을 의미하며 어닝 서프라이즈는 시장 예상치를 훨씬 뛰어넘는 상황이다. 이러한 어닝 쇼크와 어닝 서프라이즈는 어닝 시즌에 발표된다. 어닝시즌이란 상장사들이 1년에 네 차례 분기별 실적을 발표하는 시기다. 여기서 실적의 핵심지표는 매출액, 영업이익, 당기순이익 3가지다. 매출액은 기업의 성장성을 나타내는 주요 지표다. 영업이익은 기업의 수익성을 나타내는 주요 지표다. 당기순이익은 영업과 영업과 무관한 활동으로 얻은 수익을 나타내는 지표다. 예를 들어 제품 판매와 별개로 부동산 매각이나 주식처분으로 올린 수익이다. 따라서 당기순이익은 일회성인 경우가 있기에 영업이익과 당기순이익이 차이를 보이는 경우가 있다. 

 

 

Reference

『부자는 매일 아침 경제기사를 읽는다』

드론자율주행시스템 구축을 위해 기존에는 Ubuntu 22.04, ROS2, PX4, Gazebo를 사용했다. 다만 Gazebo를 사용하는 과정에서 해당 시뮬레이터의 안정성이 매우 떨어지고 비행제어가 잘 이뤄지지 않는 느낌을 강하게 받아 시뮬레이터를 AirSim으로 바꿔보고자 했다. AirSim 구동을 위한 UnrealEngine과 PX4와의 연동 예제가 Windows를 중점으로 이뤄져 있어 Windows 환경에 설치를 수행하기로 했다. 

 

Windows 11에서 드론비행제어 시뮬레이션 환경을 구성하기 위해 설치해야할 항목은 4가지다. ROS2, PX4, UnrealEngine, AirSim다. Windows 11 환경에 AirSim 시뮬레이션 환경을 구축하며 느낀 것은 Ubuntu 22.04에 ROS2, PX4, Gazebo 환경을 설치할 때 보다 잡다한 에러가 상대적으로 많이 발생했다는 것이고, 레퍼런스가 많지는 않아 공식 문서와 약간의 유튜브 영상을 잘 보고 환경 구성을 해야한다는 것이다. 

 

1. ROS2

ROS2 설치는 humble 배포판을 기준으로 수행했으며 전반적으로 아래 링크를 참조하여 수행하였다.

https://docs.ros.org/en/humble/Installation/Alternatives/Windows-Development-Setup.html#installing-prerequisites
설치해야할 것들이 많았다. chocolatey, python, visual studio, opencv, qt5, rqt 등을 위 공식문서에 따라 설치를 수행했다. 최종적으로 'hello world'를 수행했을 때 아래와 같이 topic을 publish하고 subscribe 할 수 있다면 설치가 완료된 것이다.

 

 

2. UnrealEngine & AirSim

AirSim은 UnrealEngine 기반으로 동작하기 때문에 UnrealEngine 설치가 필요하다. 전반적으로 다음 링크의 공식문서를 참조하여 UnrealEngine과 AirSim 설치를 수행했다. https://microsoft.github.io/AirSim/build_windows/

참고로 UnrealEngine 설치를 수행할 때 UnrealEngine 4.27 이상을 다운로드 받으라고 되어 있는데 23.07.31 기준 5.2.1 버전을 다운로드 받게 되면 UnrealEngine을 구동할 때 "Physxvehicles" 플러그인이 없다는 오류가 발생하므로 4.27 버전으로 맞춰 다운로드 해야 에러가 발생하지 않는다. UnrealEngine은 아래와 같이 독립적인 버전을 각각 설치해 관리할 수 있다. 4.27.2 버전을 다운로드 받자. 

 

 

3. PX4

PX4를 설치하기 위해 Windows의 WSL2를 사용한다. 기존에 사용하던 Ubuntu 22.04를 삭제하고 재설치하는 과정에서 에러가 발생해서 Ubuntu 20.04를 설치했다. Ubuntu 20.04 환경에서 아래 명령을 통해 소스코드를 내려받고 빌드해주었다.

git clone https://github.com/PX4/PX4-Autopilot

make px4_sitl_default none_iris

만약 make 과정에서 오류가 발생한다면 g++, cmake 등의 빌드를 위해 필요한 패키지를 설치해주어야 한다. 그리고 Windwos 11에서 구동되는 AirSim이 PX4와 연결되기 위해서 PX4의 IP address를 알아야 한다. ipconfig를 통해 WSL에 할당된 IP를 환경변수 PX4_SIM_HOST_ADDR에 할당해준다. 

 

 

알다시피 export를 통한 환경변수는 일회성이기 때문에 .bashrc의 제일 아랫 부분에 아래 명령을 추가해서 셸이 생성될 때마다 실행될 수 있도록 해주는 것이 좋다. 

 

 

이후에 UnrealEngine의 AirSim에서 해당 IP와 연결하기 위해 C:\Users\<user>\Documents\AirSim 경로에 있는 settings.json 파일을 아래와 같이 수정해준다. 참고로 이 때 LocalHostIp는 위 PX4의 IP address를 기입해준다.

 

참고로 위 settings.json은 다음 링크를 참조하였다. https://microsoft.github.io/AirSim/px4_sitl_wsl2/

이후 UnrealEngine에서 AirSim 시뮬레이션 모드인 AirSimGameMode를 선택해주고 시뮬레이션을 수행하면 아래와 같이 AirSim의 settings.json을 로딩하고 PX4의 IP와 연결하는 것을 확인할 수 있다. 참고로 UnrealEngine에서 월드를 구성하고 시뮬레이션을 수행하는 과정 전부는 아래 링크를 참조하였다.

 

Unreal AirSim Setup from scratch

AirSimDemo

AirSim with PX4 on WSL 2

UnReal 환경 만들기 및 설정(pixhawk 기반 HITL)

 

 

AirSim과 PX4가 연결되면 연결을 대기 중이던 상태에서 아래와 같이 명령을 수행할 수 있는 상태로 바뀌게 된다.

 

 

현재 상태에서 아래와 같이 commander takeoff 명령을 수행하게 되면 AirSim 시뮬레이션 상으로 명령이 전달되어 드론이 이륙하는 것을 확인할 수 있다.

 

 

ROS2를 통해 PX4에서 발행하는 uORB 토픽을 subscribe하고 AirSim 상으로 비행제어 코드를 수행하는 과정은 추후 포스팅에서 다루고자 한다.

본 글은 국내 신동원, 장형기님께서 배포해주신 "SLAM의 이해와 구현"이라는 자료를 기반으로 요약하였음을 밝힙니다.

 

01. SLAM 이란?

SLAM이란 동시적 위치추정 및 맵핑을 의미한다. 아주 쉽게 말해 Localization은 내가 어디에 있지를 알아내는 것이고 Mapping은 내 주변에 뭐가 있는지를 알아내는 것이다. 이 두 문제를 동시에 풀고자하는 방법이 SLAM이다.

 

02. SLAM 응용분야

SLAM 활용

  • 모바일 로보틱스 (Mobile Robotics)
  • 자율주행 (Autonomous Driving)

로봇 관련 회사

  • 소프트뱅크(Softbank) - 페퍼로봇
  • 테미(Temi) - 테미로봇
  • 테슬라 - 옵티머스

 

03. SLAM 알고리즘 종류

1900년대

  • 베이즈 필터 기반: Prior + Likelihood = Posterior를 계산.
    • 확장칼만필터 SLAM (EKF SLAM)
  • 파티클 필터 기반
    • Fast SLAM

 

2000년대

  • 그래프 최적화 기반
    • 그래프 노드: 로봇 위치
    • 그래프 엣지: 회전 & 이동
  • 특징점 기반: 카메라 궤적 추적 및 맵핑 수행
    • ORB-SLAM

 

  • 밝기 기반 (Intensity-based)
    • LSD-SLAM

 

04. SLAM 알고리즘 파이프라인

프론트엔드(Frontend)

  1. 카메라 or 라이다 센서 데이터 수집 + 전처리(노이즈 제거)

  2. 2.1 Visual Odometry (시각적 주행 거리 측정)

    - 센서의 상대적인 움직임을 예측

    2.2 루프 폐쇄 검출 (Loop closure detection)

    - 현재 센서 위치가 이전 방문 위치인지 판단
    - 비연속적 데이터로 상대적인 움직임 예측

백엔드(Backend)

  1. 백엔드 최적화
    • 프론트엔드에서 얻은 센서 위치와 주변 환경 정보를 이용해 불확실성 제거하고 일관성 있는 지도 만들기 위한 최적화 과정 수행
    • 현재 센서의 자세와 주변 환경의 랜드마크 정보를 그래프 노드로 표현 후 노드 사이의 제약조건을 그래프 엣지로 표현해 모든 그래프 사이의 제약조건을 최소화 하는 형태로 센서의 자세와 랜드마크 위치를 최적화
  2. 지도 표현
    • 최적화 정보를 기반으로 시나리오에 적합한 환경지도를 생성

 

Visual Odometry란? (시각적 주행 거리 측정)

정의: 인접 이미지 사이의 센서 움직임을 예측해 회전과 이동 파라미터를 계산하는 알고리즘

한계점: Visual Odometry만 사용해 연속적인 센서 궤적을 예측하면 누적된 표류 오차(Drift Erorr) 때문에 실제 궤적과 차이를 보임

보완방법: 루프 폐쇄 검출과 백엔드 최적화 과정이 반드시 필요함

 

루프 폐쇄 검출 (Loop Closure Detection)이란?

  • 정의: 현재 센서 위치가 이전에 방문한 곳인지 판단하는 알고리즘
  • 방법: 현재 센서 입력과 이전 센서 입력 사이의 유사성을 고려
  • 효과: 아래와 같이 Visual Odometry에 의해 표류오차가 누적된 빨간 선에서 루프 폐쇄 검출 알고리즘을 통해 같은 위치임을 판단해 전체 궤적을 초록선에 가까이 보정할 수 있음

  • 동작원리: 센서 입력 사이 유사성은 크게 이미지 간 유사성이나 기하학적 유사성을 고려함
    • 이미지 간 유사성은 같은 장소에서 촬영한 사진임에도 불구하고 다른 시간, 날씨, 조명, 시점과 같은 다양한 요인에 의해 시각적으로 큰 차이가 나는 영상이 나올 수 있음. 하지만 이러한 다양한 변화 요인들에도 불구하고 강건하게 같은 장소임을 판단하는 알고리즘이 루프 폐쇄 검출 알고리즘
    • 기하학적 유사성은 라이다 센서와 같은 3차원 공간에 대한 형상 정보를 수집할 때 사용할 수 있음

 

백엔드 최적화 (Backend optimization)란?

  • 정의: 노이즈가 많은 데이터로부터 전체 시스템의 상태를 정확하게 추정(State estimation) 방법
  • 분류: 필터 기반, 비선형 최적화 기반
    • 필터 기반
      • 베이즈 필터: 사전확률 + 가능도를 융합해 사후확률을 업데이트해 센서의 자세 또는 랜드마크의 위치를 업데이트 하는 방법
        • 칼만 필터
        • 파티클 필터
    • 비선형 최적화 기반
      • 정의
        • 센서 자세와 랜드마크 사이에 비선형적 관측 모델이나 연속적인 센서 사이의 비선형적 움직임 모델이 주어졌을 때 이러한 비선형 모델에 의해 만들어지는 제약조건을 최소화시키는 방향으로 센서의 자세와 랜드마크를 업데이트하는 방법
      • 종류
        • 번들 조정(Bundle adjustment)
        • 그래프 최적화(Graph optimization)

Map representation이란?

정의: SLAM 파이프라인의 마지막 단계로 최적화된 센서 자세와 랜드마크 자세를 이용해 환경 맵을 만드는 과정

고려: 환경 지도는 응용 시나리오에 따라 다르게 구현될 필요가 있음. 예컨데 가정용 로봇 청소기는 2차원 지도만으로 충분하나 자율주행 드론은 3차원 지도가 필요한 것과 같이 시나리오에 따라 정확성, 가용 가능 컴퓨팅 자원을 고려해 지도 표현 방법을 선정해야 함.

  • 로봇 청소기와 같은 실내환경에서 사용하는 2차원 점유 그리드 지도
  • 지하철 노선도와 같은 정점과 간선으로 표현하는 위상 지도
  • 3차원 환경 맵을 표현하는 일반적인 방법은 3차원 점군 지도
  • 가상/증강 현실의 몰입감을 위한 밀도 있는 볼륨형태의 3차원 볼륨 지도

 

05. SLAM의 수학적 정의

처음시간 부터 현재 시간 T까지의 로봇 움직임 제어 정보 $u_{1:T}=\{{u_1, u_2, \dots, u_T\}}$와 주변 환경에 대한 관찰 정보 $z_{1:T} = \{{z_1, z_2, z_3, \dots, z_t\}}$가 주어졌을 때 이것으로부터 정확한 로봇의 궤적에 대한 정보 $x_{1:T}=\{{x_1, x_2, x_3, \dots, x_T\}}$와 지도 정보 $m$을 계산하는 알고리즘이다.

 

그림으로 예를 들자면 파란색 원은 센서가 장착된 로봇의 위치를 나타내고, 노란색이 랜드마크 위치를 나타낸다. 이 때 파란색 화살표로 표시된 로봇 움직임 제어 정보와 검은선으로 표시된 랜드마크에 대한 관찰 정보가 주어졌을 때 오른쪽과 같이 처음부터 현재(T)까지의 로봇 이동 궤적에 대한 정보와 랜드마크 위치 정보를 계산하는 것이 목표다. 이에 대한 결과로서 정확한 로봇의 위치를 추정할 수 있고 주변 환경에 대한 지도를 작성할 수 있게 된다.

 

하지만 문제점은 실세계는 불확실성이 산재해 있기 때문에 1미터를 움직이라는 제어 명령을 주어도 외부요인에 의해 움직이는 거리가 달라질 수 있다. 또 센서도 노이즈가 포함되어 있기 때문에 이러한 불확실성을 줄이고 정확한 상태값을 추정하기 위한 최선의 방법으로 확률론적으로 접근이 필요하며 아래와 같은 수식으로 정의할 수 있다.

 

 

즉 SLAM은 처음 시점(0)부터 현재 시점(T)까지 불확실성이 포함된 주변 환경에 대한 관찰 정보와 센서가 장착된 로봇에 대한 움직임 제어 정보가 주어졌을 때, 가장 확률이 높은 로봇의 궤적 정보와 주변 환경에 대한 맵 정보를 추정하는 문제라고 할 수 있다. 이러한 SLAM의 수식적 정의를 도식화해 각 변수의 의존성을 나타내면 다음과 같이 표현할 수 있다.

 

  • 동그라미는 변수를 나타내고 화살표는 변수 사이의 의존성을 나타냄
  • t-1 시점의 로봇 자세$(x)$는 t-1 시점의 로봇 움직임 제어 정보$(u)$에 영향 받음
  • t-1 시점의 로봇 자세$(x)$는 t-1 시점에서 주변 환경에 대한 관찰 정보$(z)$와 다음 시점인 t 시점의 로봇 자세$(x)$에 영향을 미침
  • 지도 정보는 모든 시점에서 주변 환경에 대한 관찰 정보$(z)$에 영향을 미침

아래 내용은 <비행동역학 및 제어> 서적을 기반으로 작성되었습니다.

 

1.1 비행동역학 (Flight Dynamics)

비행동역학이란?

- 배경: 1903년 12월 라이트형제의 인류 최초 동력비행

- 개념: 대기를 비행하는 물체의 동적특성을 해석하는 학문

- 필요성: 좋은 성능의 비행제어시스템 설계를 위해

- 연관학문: 공기역학, 동역학, 구조역학, 수치해석학 등

 

1.2 비행제어: 유도항법제어

제어시스템 관련 요소

- 항법(Navigation): 비행체의 위치를 알아내는 것

- 유도(Guidance): 임무수행을 위한 위치이동을 위한 힘을 계산하는 것

- 제어(Control): 계산된 유도명령을 따르기 위해 비행체를 조절하는 것

 

2.1 비행동역학개론

- 항공기의 동적특성은 주로 안정성(Stability)과 조종성(Control)에 의해 규정됨

- 항공기의 동적특성에 직접적인 영향을 주는 것은 공력계수며 이를 이해하려면 에어포일과 날개의 기하학적, 공기역학적 특성을 살펴봐야함

- 시스템을 해석에는 주파수영역 해석기법이 있고 시간영역 해석기법이 있음

 

2.2 항공기의 기하학적, 공기역학적 특성

- 에어포일: 항공기 날개의 2차원 단면

- 날개: 2차원 모양의 에어포일을 날개 길이 방향으로 유한한 길이를 갖도록 포개서 만든 3차원 모형

- 양력발생원리: 에어포일 주변에 받음각으로 인해 에어포일 윗면과 아랫면의 유속차의 발생에 따라 압력분포가 달리 작용해 양력을 얻음

- 압력중심: 압력분포에 의한 모멘트 합이 0이 되는 점. 특징으론 받음각이 변하면 압력분포가 달라지므로 압력중심 위치도 변함

- 공력중심: 항공기 무게 중심에 대한 힘과 모멘트 계산에 있어 압력중심을 기준으로 사용하면 받음각의 변화로 압력중심이 달라지는 문제를 해결하기 위해 받음각에 따라 위치가 변하지 않는 점인 공력중심을 사용. 

- 피칭 모멘트(pitching moment): 모멘트가 Y축으로 작용(회전)하려는 힘

 

모멘트(Moment): 물체의 회전운동에 대한 양을 나타내는 개념이다. 즉 물체가 회전력을 받는 정도를 뜻한다. 모멘트는 어떤 물리량과 어떤 기준점 사이의 거리를 곱한 형태로 정의된다. 예를 들어 물리량은 질량, 힘, 길이 등이 될 수 있고 (질량 x 거리), (힘 x 거리), (길이 x 거리) 등으로 표현할 수 있다. 실제로 관성 모멘트는 질량과 거리제곱의 곱으로 표현되고 힘의 모멘트(토크)는 힘과 거리의 곱으로 표현된다. 모멘트는 어떤 물리량의 분포에 따라 물리적 특성이 달라질 때 사용한다.

 

2.4 비행안전성 개요

- 항공기 운동은 크게 병진운동과 회전운동으로 구분되며 이 둘은 서로 독립이라 가정해 별도의 해석이 필요함.

- 병진운동: 물체를 하나의 질점으로 간주해 질점계의 모든 질점이 평행이동 즉 모든 지점이 똑같이 이동하는 운동. 

- 회전운동: 물체가 한 점을 축으로 회전하는 운동. 주로 자세안정성해석이나 제어시스템 설계에 이용됨. 정적안정성과 동적안정성으로 구분됨. 정적안정성이란 크게 3가지로 정의됨. 한 물체가 초기에 평형상태에 있다고 가정했을 때 외력이 발생했지만 평형상태로 되돌아 가려는 1. 정적 안정, 외력이 발생해서 평형상태에서 멀어지는 2. 정적불안정, 평형이 유지되는 3. 정적중립. 동적안정성은 시간에 대한 변화를 염두에 두고 정의되는 특성으로 평형상태를 벗어난 뒤 어느 정도의 시간이 경과한 후 다시 평형상태로 되돌아오는 경향으로 정의

 

강체: 물리학에서 형태가 변하지 않는 물체. 외력이 가해져도 크기나 모양이 변형되지 않거나 무시할 만큼의 변형이라면 강체라 함. 강체의 가장 일반적인 운동은 질량중심의 병진운동과 질량중심을 지나는 축에 대한 회전운동의 결합.

 

(추가 작성 예정)

 

Reference

[1] <비행동역학 및 제어>

[2] https://dronelife.co.kr/oralexamination/?mod=document&uid=2085 

[3] https://astro.kasi.re.kr/learning/pageView/5231

'Science > 항공역학' 카테고리의 다른 글

[비행동역학] 좌표계의 종류와 특징  (0) 2023.07.02

드론 자율주행을 위해 목표 GPS 좌표를 설정하고 현재 GPS 좌표와의 차이를 구해 이동해야 할 좌표를 계산하는 데 있어 PID 제어가 쓰이는 것을 알 수 있었고 이에 대한 이해가 필요하다 판단했다. PID 제어는 목표값에 도달하기 위해 현재값과의 차이를 반복적으로 줄여나가는 시스템으로 아래와 같은 구성을 갖는다. 여기서 반복적으로 줄여나간다는 말은 Feedback loop가 있다는 것이다.

PID 제어에서 P, I, D가 나타내는 것은 비례(Proportional), 적분(Integral), 미분(Derivative)를 나타내며 이 세 요소는 에러를 줄여 목표지점에 도달하는 공통의 목표를 가지고 각자 역할을 수행한다. 이 요소는 각각 비례항, 적분항, 미분항이라 부르며 각각의 항에서 사용되는 상수(파라미터)는 Kp, Pi, Kd(비례이득, 적분이득, 미분이득)가 있다. 비례항, 적분항, 미분항을 살펴보기 바로 이전에 결론적으로 이러한 각 항의 상수들이 적절하게 설정되었을 때 시스템에 어떤 영향을 미칠 수 있는지 살펴보자.

 

위 GIF를 보면 Kp, Ki, Kd가 적절하게 전부 설정되었을 때 시스템이 안정화되는 것을 확인할 수 있다. 이는 비례항, 적분항, 미분항의 파라미터들이 함께 사용되었을 때 상보적인 효과를 가져온다는 것을 의미한다. 그렇다면 이제 오차에 대해 비례항과 적분항과 미분항의 역할을 살펴보고 각 항의 구성과 특징을 살펴보자.

 

1. 비례항

비례항은 오차값에 비례해서 시스템의 제어를 수행한다. 가장 직관적인 제어 방식이다. 수식으로는 $ P = K_p \times e$와 같다. e는 error를 의미한다. 여기서 비례항의 파라미터인 비례이득 $K_p$가 높으면 오차에 큰 반응으로 빠른 오차 감소가 가능하지만 불안정한 상태가 된다. 즉 목표지점(setpoint) 근처까지 빠르게 도달할 수 있지만 불안정한 상태로 도달하게 된다. 반대로 $K_p$가 낮으면  오차에 작은 반응을 보여 느린 오차 감소를 보이지만 안정한 상태가 된다. 즉 목표 지점 근처까지 천천히 도달하지만 안정한 상태로 도달할 수 있는 것이다. 비례항을 통해 비례제어를 수행해도 즉, $K_p$를 조절해도 목표지점에 정확히 도달하지 못하는 문제점이 있다. 이는 오버슈팅 현상 때문이다. 오버슈팅 현상은 목표값보다 오차가 커지는 것을 말한다. 제어기가 목표값에 도달해도 지나치게 흔들리거나 진동하는 경우가 있기 때문이다. 따라서 이러한 비례항만으로는 안정성있고 정확하게 목표지점에 도달하기 어렵기 때문에 이를 보완하기 위해 아래 적분항을 함께 사용한다.

 

2. 적분항

적분항은 오차값의 누적을 이용해 시스템의 제어를 수행한다. 적분항은 비례항과 마찬가지로 오차를 줄이기 위한 역할을 수행한다.  비례항은 단순히 오차에 비례이득을 곱했다면 적분항은 오차의 누적을 구해 적분이득을 곱해준다. 수식으로는 $I = K_i \times \int{e}$와 같다. 즉 적분이득($K_i$)을 작게 설정하면 오차의 누적이 둔화되어 안정적인 제어가 가능하지만 오차추종속도가 느릴 수 있고, 반대로 적분이득을 크게 설정하면 오차의 누적이 크게 반영되어 제어신호가 더 많이 증가하고 오차추종속도가 빠르지만 비례항과 마찬가지로 오버슈팅이 발생할 수 있다. 

 

3. 미분항

미분항은 오차의 변화율에 따라 시스템의 제어를 수행한다. 조금 더 구체적으로는 목표값과 제어값의 편차를 비교해 이와 기울기가 반대되는 쪽에 값(힘)을 주어 힘을 상쇄시킨다. 다른 두 항과 마찬가지로 오차를 줄이는 역할을 한다. 다만 특히나 다른 두 항에 비해 안정성을 높이는 역할을 한다. 이는 적분항에 있던 오차들을 변화율에 따라 제거해줌으로써 시스템이 안정화시키기 때문이다. 수식은 $D = K_d \times {de \over dt}$와 같다. 미분이득($K_d$)을 큰 값으로 설정하면 오차의 변화에 민감하게 반응해 오차추종속도가 빨라지나 진동이나 불안정성이 발생할 수 있다. 반면 미분이득을 작은 값으로 설정하면 오차변화에 대한 반응이 둔화되어 안정적인 제어가 가능하지만 오차추종속도가 느릴 수 있다.

 

 

이러한 비례이득, 적분이득, 미분이득은 함께 상호작용하며 시스템의 균형을 잡기 때문에 올바른 조합을 찾는 것이 중요하다. 이들 간의 균형은 시스템에 따라 달라질 수 있으므로 실험을 통해 최적의 값을 도출하는 것이 필요하다. 이를 PID 튜닝이라고 하며 가장 널리 알려진 방법으로는 지글러-니콜스 방법이 있다고 한다.

 

 

Reference

[1] https://ko.wikipedia.org/wiki/PID_%EC%A0%9C%EC%96%B4%EA%B8%B0

[2] https://velog.io/@717lumos/Control-PID-%EC%A0%9C%EC%96%B4

[3] https://blog.naver.com/PostView.nhn?blogId=scw0531&logNo=221285498257 

 

 

쿼터니언이란 무엇인가?

쿼터니언(Quaternion)이란 선형대수학에서 사용되는 개념으로 3차원 벡터 공간에서 회전을 표현하는 수학적 개념이다. 우리말로 사원수라고 일컬으며 4개의 요소로 구성된 복소수 시스템이다.

 

쿼터니언은 어떤 배경에서 고안되었는가?

쿼터니언은 3차원 공간의 회전을 표현한다고 했다. 이러한 3차원 공간의 회전을 표현하는 데 있어 원래는 오일러 각(roll, pitch, yaw)을 사용해 표현한다. 하지만 이 오일러 각을 사용할 경우 Gimbal Lock 현상이 발생한다. 잠깐 Gimbal에 대한 개념을 설명하자면, 단일 축에 대한 회전을 허용하는 수평 유지 장치를 의미한다. 

 

(좌): 각각의 짐벌은 roll, pitch, yaw의 자유도를 갖는다.

 

Gimbal Lock 현상은 3차원 공간상에서 두 축이 겹쳐 한 축이 소실되거나 자유도가 떨어지는 현상이다.  각 Gimbal들은 각자 특정 축(x, y, z)으로만 회전하도록 되어 있다. 하지만 위 우측 그림의 STATIC POSITION을 보면 맨 안쪽의 Gimbal은 다른 Gimbal을 회전시켜 두지 않는 이상 더 이상 roll 축으로 회전할 수 없게 된다. 이를 Gimbal Lock 현상이라 한다. 그렇다면 왜 Gimbal Lock 현상이 발생할까? 그 원인은 세 축이 의존적이기 때문이다. 예를 들어 z축을 회전시키면 x, y축도 함께 회전하게 되기 때문이다.

 

또 다르게 말하면 오일러 각에서 회전 자체를 세 축으로 나눠서 계산하기 때문이다. 예를 들어 어떤 물체 a가 있고 이 물체 a를 roll에 대해 회전하고 pitch에 대해 회전하고 yaw에 대해 회전한다고 가정하자. 어떤 물체 a는 roll에 대해 회전한 뒤 a’가 된다. 이후 pitch에 대해 회전한다고 하면 a에 대해 회전하는 게 아니라 a` 에서 회전하게 된다. 또 yaw에 대해 회전한다고 하면 a`가 아니라 a``에 대해 회전시킨다. 즉 각 축에 대한 회전은 이전 축에 의존하는 것이다.

 

쿼터니언은 이 Gimbal Lock 문제를 어떻게 해결할까?

쿼터니언은 정확히는 Gimbal Lock 문제를 해결하진 못한다. 다만 오일러 각을 사용해 회전을 표현할 때보다 Gimbal Lock 문제를 최소화시킬 수 있다. 쿼터니언은 4차원 복소수 공간의 벡터로 마찬가지로 벡터 공간에서의 회전을 표현하는 역할을 한다. 쿼터니언은 다음과 같은 형태를 가진다.

 

$$ q = xi + jy + zk + w $$

 

크게 보자면 쿼터니언 q는 xi + jy + zk는 벡터 요소, w는 스칼라 요소로 구성된다. i, j, k는 각각 x, y, z 축을 나타내는 허수 단위 벡터다. 이러한 쿼터니언은 4개의 요소로 구성되어 4차원 공간에서 회전을 표현한다. 이렇게 회전을 4차원으로 표현하는 쿼터니언은 세 개의 축을 사용하는 3차원 오일러 각과 달리 축의 의존성을 없애고 독립성을 가져오는 데 도움을 준다. 쿼터니언의 수식적 표현으로 파고들어 쿼터니언의 4차원 구조와 회전 연산 수식에 내재된 특성으로 짐벌락 문제를 해결하는 원리를 이해하는 데 도움될 수 있다 생각드나 짐벌락 문제 자체는 직관적으로 이해하는 것이 더 직접적이란 생각이 든다.

 

Reference

[1] https://handhp1.tistory.com/3

[2] https://luv-n-interest.tistory.com/805

[3] https://kangworld.tistory.com/185

[4] https://ko.wikipedia.org/wiki/짐벌

항공 및 우주분야에서는 비행체의 상태를 표현하거나 위치, 속도, 고도 등의 항법연산을 위해 다양한 기준 좌표계가 사용된다. 대표적인 좌표계는 크게 4가지가 있다.

 

1. 지구중심 관성 좌표계 (ECI: Earth Centered Inertial reference frame)

지구중심 관성 좌표계란 관성의 법칙이 적용되는 좌표계다. 관성의 법칙이란 뉴턴의 운동법칙 제1법칙으로 물체에 아무런 힘이 가해지지 않을 경우 물체는 정지하거나 등속직선운동을 하는 것이다. 즉 시간의 변화에 따라 가속하거나 회전하지 않는 좌표계다. 실제로는 지구가 회전하고 있기 때문에 존재하지 않는 좌표지만 다른 좌표계들과의 관계를 기술하기 위한 목적으로 만든 가상의 좌표계다. 이러한 관성 좌표계와 달리 가속운동을 하는 좌표계를 비관성 좌표계 또는 가속 좌표계라 부른다.

 

2. 지구중심 지구고정 좌표계 (ECEF, Earth Centered Earth Fixed frame)

지구중심 지구고정 좌표계란 회전이 포함된 지구중심 관성 좌표계다. 즉 지구의 자전으로 인해 회전하는 좌표계며 t=0 시점에서 지구중심 관성 좌표계와 동일하다.

 

3. 지면좌표계 (NED: North East Down frame)

지면 좌표계(NED frame)는 항공 및 우주분야에서 널리 사용되는 좌표계다. LLA(Latitude-Longitude-Altitude) 좌표계라고도 불리는 NED 좌표계는 비행체의 상대적인 위치와 방향을 표현하기 위해 사용된다. N은 North, E는 East, D는 Down을 나타낸다. North는 경도선과 평행을 이루며 북쪽을 바라보는 방향을 표현한다. 적도를 기준으로 북반구는 + 남반구는 -이다. x, y, z를 기준으로 상대적인 좌표를 표현하는 local frame 좌표계에서의 x축과 같다. East는 위도선과 평행을 이루며 동쪽은 + 서쪽은 -로 방향을 표현한다. 마찬가지로 local frame 좌표계에서 y축과 같다. Down(Depth)은 지구 중심, 내부를 바라보는 방향을 표현하는 것으로 지구 중심과 가까워지는 방향은 + 중심과 멀어지는 방향은 -로 표현한다. 마찬가지로 local frame 좌표계에서 z축과 같다.

 

이러한 NED 좌표계는 일반적으로 3차원 직교 좌표계로 표현된다. (North, East, Down)이며 예를 들어 (100, 200, -50)은 북쪽으로 100 단위, 동쪽으로 200단위 아래로 50단위로 이동한 지점을 나타낸다. NED 좌표계는 항공 및 우주 분야에서 좌표와 방향을 정확하게 표현하는데 사용되는 다른 좌표계와 결합되어 사용될 수 있다. 예컨데 GPS 좌표는 NED 좌표계로 변환되어 위치를 정확하게 나타낼 수 있다.

 

4. 동체 좌표계 (Body frame)

동체 좌표계는 물체(ex: 비행체, 선박 등)의 질량 중심을 원점으로 하는 좌표계다. 물체의 운동을 설명하는데 사용하는 좌표계로 일반적으로 물체의 운동방정식을 동체 좌표계상에서 표현하기 대문에 운동 방정식을 전개해 나가는데 편리한 좌표계다. 동체 좌표계는 물체의 중심에 대한 위치와 물체의 방향을 기준으로 한다. 위치는 일반적으로 (x, y, z)로 표현되고 방향은 (roll, pitch, yaw)의 각도로 표현된다.

 

동체 좌표계는 무언가 오일러 좌표계와 관계가 있고 비슷해 보인다. 어떤 관계를 가지고 어떻게 다를까? 결론적으로 동체 좌표계 안에 오일러 좌표계가 부분집합으로 속해있는 형태다. 그 이유는 동체 좌표계는 대상체의 위치와 방향을 나타내는 반면 오일로 좌표계는 대상체의 방향을 나타내기 때문이다. 오일러 좌표는 물체의 방향(자세)를 설명하기 위해 사용하는 좌표계로 세 개의 연속된 회전 각도를 사용해 물체의 자세를 나타낸다. 일반적으로 (roll, pitch, yaw)로 회전을 나타내며 이는 곧 물체의 방향과 같다. 따라서 오일러 좌표계는 동체 좌표계의 방향 정보를 나타내기 위해 사용될 수 있다.

 

 

Reference

[1] https://saack.tistory.com/96

[2] https://dongmin-archive.tistory.com/entry/1-Reference-Coordinate-System-and-Transformations

본 논문은 2021년에 나온 논문으로 스테레오 카메라를 통해 장애물을 인지하고 이를 기반으로 목표 지점까지 최적의 경로를 계산하는 드론 시스템을 개발하여 이를 검증한다. 장애물 회피 시뮬레이션에서 인지한 장애물은 Octomap을 사용하여 3차원 공간에 장애물 위치를 매핑하고 드론의 목표지점까지 최적의 경로를 계산했다. 나아가 간단히 실외 환경에서도 장애물 회피가 가능함을 보였다.

 

관련연구를 통해 강화학습 기반의 장애물 회피 연구가 수행되고 있음을 알게 되었고 결과적으로는 추후에는 강화학습 기반으로 연구를 이어가야겠다는 생각이 들었다. 장애물을 회피하면서 자율비행을 수행하는 드론 시스템 개발을 위해 저자는 먼저 하드웨어 측면과 소프트웨어 측면으로 나누어 시스템을 구성했다. 먼저 하드웨어 측면은 다음과 같다.

 

  • 간단한 딥러닝 연산이 가능한 Jetson Nano Develop Kit을 장착
  • 미션 컴퓨터는 비행제어 컴퓨터와 유선 시리얼 통신으로 연결되며 비행 상태 정보를 기반으로 최적 경로를 계산함
  • 장애물 인지를 위해 스테레오 카메라 인텔 리얼센스 D455 사용
    • 0.6m ~ 최대 6m 까지의 물체를 인식해 Point Cloud 형태로 출력함
    • 카메라는 최대 해상도 1280x720로 30fps의 Point Cloud 데이터 획득 가능
  • 정밀 위치 추정을 위해 Piksi Multi GNSS 모듈 사용 (LTE 모듈)
  • 개발한 드론은 이륙 중량 2kg, 4셀 6400mah 배터리에 최대 20분 비행 가능

 

한 가지 팁은 대용량의 Point Cloud 데이터를 원활하게 얻기 위해선 USB 3.0 인터페이스를 사용해야 하나 USB 3.0 케이블에 전원이 인가되면 주변 GPS 정보를 교란하는 현상이 있어 USB 2.0 케이블을 이용해 스테레오 카메라 정보를 획득해야 했다는 점이다.

 

소프트웨어 측면으로는 microRTPS를 통해 uORB 토픽을 ROS2 토픽으로 바꿔 비행제어 데이터를 미션 컴퓨터 측으로 송신하도록 구성했다. 또 스테레오 카메라가 획득하는 Point Cloud 데이터의 경우 순간 데이터 통신량이 높기 때문에 대용량 데이터 처리를 위한 QoS 설정을 통해 원활한 데이터 처리가 가능하도록 설정했다.

 

여기까지가 드론 시스템 개발에 대한 하드웨어 측면과 소프트웨어 측면에 대한 기술이다. 이후에는 핵심인 장애물 회피 시스템을 개발하고 시뮬레이션 한 것에 대해 기술하고자 한다.

 

저자는 장애물을 회피하고 목표지점까지 갈 수 있는 전역경로계획(Global Path Planner)를 개발하여 적용했다. 아래는 전역경로계획 시스템의 아키텍처다.

 

크게 경로를 계산하는 Global Planner Node와 주변환경과 장애물을 3차원 그리드로 저장하는 Octomap Node로 구성되어 있다. Global Planner Node는 비행제어 컴퓨터(FCC)로부터 자세 정보인 vehicle_attitude와 위치 정보인 vehicle_global_position, vehicle_local_position을 수신한다. 또 스테레오 카메라로부터 획득하는 주위 환경에 대한 Depth 데이터를 모두 결합하여 드론의 주변 환경을 인식한 결과를 Octomap Node로 전달한다.

 

Octomap Node는 이렇게 전달받은 데이터를 기반으로 3차원 occupancy grid 형태로 만들고 다시 Global Planner Node로 전달하면 이 3차원 정보를 기반으로 비행목적지까지 장애물을 우회해 비행 가능한 최적의 경로를 실시간으로 계산한다. 이후 Global Planner Node는 현재 위치에서 목표 지점을 vehicle_command를 통해 PX4로 전달하고 PX4는 이 지점을 다음 waypoint로 설정하여 비행을 수행하는 방식이다.

 

아래는 전역경로계획을 사용하여 장애물회피주행을 수행하는 그림이다. 좌측에는 Gazebo 시뮬레이션이 구동되고 우측상단은 Octomap Node에서 생성한 3차원 occupancy grid이며 그 아래는 GCS인 QgroundController다.

 

 

여기까지가 전역경로계획을 기반으로 장애물을 회피하여 목표지점까지가는 시스템에 대한 설명이다. 저자는 나아가 장애물을 회피하면서 비행을 할 때 효율적인 비행이 필요하다고 말한다. 여기서 말하는 효율적인 비행이란 위험도가 낮은 비행구간에서는 빠른 비행을 하고 위험도가 높은 구간에서는 천천히 비행할 필요성이 있다고 말한다. 여기서 위험도는 어떻게 정의될까? 아쉽게도 이에 대한 내용은 없다. 다만 현재의 위험도가 사용자가 임의 지정한 threshold를 넘으면 속도를 최소화하고 그렇지 않다면 속도를 증가시키는 방면으로 다음과 같이 알고리즘이 동작한다는 것만 알 수 있었다.

 

 

저자는 비행을 위해 사용한 파라미터를 다음과 같이 별도로 정리했다. PX4에는 수 백 여개의 파라미터가 있는 만큼 비행과 관련된 중요한 몇몇 파라미터를 정리해주었다는 점에서 다소 큰 팁이라 느낀다. 아래 파라미터 중 위험도 기반 속도제어에 사용했던 파라미터는 min_speed_와 max_speed_다.

 

 

아래 그림은 위험도를 고려했을 때와 고려하지 않았을 때의 비행을 비교하여 나타낸 것이다.

 

 

초록선은 속도조절 알고리즘을 적용한 것이며 빨간선은 속도조절 알고리즘을 적용하지 않았을 때다. 그 결과 적용했을 때 목표지점까지 20초가 걸렸고 적용하지 않았을 때 32초가 걸렸다. 이를 통해 효율적인 주행을 위해서는 이러한 위험도를 계산하고 때에 따라 속도를 조절하는 알고리즘이 필요하다는 것을 알 수 있다.

2020년 한국항공우주학회에서 나온 논문으로, 핵심 내용은 PX4 기반 쿼드콥터에 스테레오 카메라를 사용하여 3차원 공간에서 자율탐사와 실시간 경로계획을 수행한 것이다. 경로계획을 위해 크게 광역 경로계획과 지역 경로계획으로 나누어 알고리즘을 수행했다. 

 

광역경로계획

광역경로계획은 그리드 맵을 사용하는 A* 계열 알고리즘이 많이 사용된다. A* 알고리즘은 2차원에서는 8방향 3차원에서는 26방향으로 인접한 노드를 연결하여 경로를 생성한다. 하지만 이러한 A* 알고리즘은 직선과 45도 방향의 대각선만 사용할 수 있다는 단점이 있다. 따라서 이러한 고정된 각도가 아닌 임의의 각도를 사용할 수 있는 Theta* 알고리즘이 만들어졌고, 또 A* 알고리즘의 검색 정보를 다음 검색에 재활용하여 빠른 속도로 탐색할 수 있는 D* 알고리즘 등이 연구되고 있다.

 

해당 논문에서는 A* 계열 알고리즘 중 속도가 가장 빠른 JPS 알고리즘을 사용했다. JPS 알고리즘은 논리적 동치 관계를 이용해 탐색 노드수를 크게 줄인 알고리즘이다. 그리드 맵의 크기가 커질수록 탐색 시간이 지수 함수 형태로 증가하는 A* 알고리즘을 선형에 가까운 탐색시간 증가율을 보이기 때문에 계산효율이 좋다는 특징이 있다.

 

지역경로계획

그리드 맵에 거리 정보를 추가하는 것은 그리드 맵의 각 장애물 셀마다 주변 셀에 거리 정보를 전파하는 방식으로 구현된다. 하지만 3차원 공간에서는 전파해야 할 정보가 상대적으로 많기 때문에 실시간 경로계획에 많은 시간이 소요된다. 이러한 계산효율 문제를 해결하기 위해 지역 그리드 맵이 사용된다. 아래 그림은 광역 경로계획(빨강)으로 출력된 경로를 지역 경로계획으로 수정한 경로(노랑)를 시각화한 것이다. 저자에 따르면 수정된 노란 경로가 더 안전한 경로라고 한다.

 

 

결과적으로 경로계획 알고리즘 수행 알고리즘으로 목표 속도와 yaw rate를 계산하여 PX4 노드에 Offboard 명령 메시지로 전달하여 드론을 제어한다. 이를 Gazebo 시뮬레이션 상에 적용하여 자율탐사로 매핑을 수행한 결과는 다음과 같다.

 

 

새롭게 알게 된 점은 경로계획 관련 알고리즘에 A*, Theta*, D* 이 사용된다는 점이고, 아직 사용해보지 않았지만 SLAM을 위해 Octomap을 사용한다는 점을 알게됨

 

 

+ Recent posts