'프로그래밍'에 해당되는 글 87건

  1. 2010/05/11 게으른 엔지니어 MathWorks Technology Conference 2010
  2. 2010/03/30 게으른 엔지니어 매스웍스 제품군 (2) (2)
  3. 2010/03/25 게으른 엔지니어 매스웍스 제품군 (1)
  4. 2010/02/24 게으른 엔지니어 드뎌 Simulink 관련 제 1 호 책 출판... (1)
  5. 2009/09/07 게으른 엔지니어 Physical Modeling Tool에 대한 세미나가 열린다.
  6. 2009/09/07 게으른 엔지니어 MATLAB R2009b 가 나왔당
  7. 2009/07/17 게으른 엔지니어 에너지 및 제조 산업에서의 그린 SW 활용 - 2009년 7월호 특집 기사 (1)
  8. 2009/06/23 게으른 엔지니어 const 와 pointer의 조합...
  9. 2009/05/23 게으른 엔지니어 IplImage에서 RGB 데이타 뽑아 내기 (1)
  10. 2009/05/08 게으른 엔지니어 The MathWorks Technology Conference 2009 가 열린다...
해마다 열렸던 MathWorks Technology Conference가 올해도 6월8일에 작년과 같은 장소인 코엑스 인터컨티넨탈호텔 하모니볼룸(B1)에서 열린다. 홈페이지는 http://www.mathworks2010.net/이다. 홈페이지뿐만 아니라 트위터를 이용해서 정보를 제공하는 것을 시도하고 있다.
올해도 작년과 같이 다양한 형태로 매스웍스 제품이 사용되는 것들을 보여 주며, 역시나 약 10개 정도의 파트너 부스도 있어서 참석해서 다양한 데모등을 볼 수 있을 것으로 생각된다.

특히 요즘 많은 화두가 되는 Green Energy에 관해서도 풍력, 태양열, 전기자동차, 그리드 기술등과 같은 다양한 분야를 데모와 함께 외국 엔지니어로부터 많은 정보를 얻을 수가 있을것으로 보인다. Green Energy 트랙의 경우 동시 통역으로 진행되므로 영어의 부담은 안가져도 될 것 같다.

또 하나의 트랙은 임베디드 시스템 개발시에 초기 검증의 중요성과 함께, 다양한 검증 방법과 함께 C 코드 검증에 사용되는 Static Analysis Tool인 Polyspace까지 소개한다.

C/C++을 사용해서 개발하는 고객들이 항상 하는 얘기가 MATLAB이나 Simulink가 느리다는 얘기를 하는데, 생각해보면 어쩔 수 없는 부분이 있을 수 밖에 없다. 하지만 항상 단편적으로 수행 시간이 느리다는 얘기만을 하지만 실제적인 ROI 측면을 생각해 보지 않을 수가 없다. 실행 시간이 느리다는 얘기는 알고리즘이 다 개발된 상태에서 실행했을때 느리다는 얘기이지만, 실제 개발은 실행 시간이 좌우 하는 것보다 훨씬 많은 시간이 개발 도중에 걸리는 시간이다. 개발 과정에서 얼마나 쉽게, 검증을 하면서 빠르게 개발할 수 있는지가 관건이다. 마지막 트랙은 MATLAB과 Simulink로 개발한 알고리즘의 수행 시간을 조금이라도 빠르게 할 수 있는 다양한 방법들에 대해서 알려 주는 트랙이므로 속도에 대한 고민을 하는 경우 생각지 못했던 팁을 얻어 갈 수 있을 것으로 본다.
또한, 이미지 및 영상 처리 시스템 개발에 관한 매스웍스의 솔루션도 소개하므로 이미지 관련 사용자나 혹은 개발 업체는 새로운 방법을 알 수 있을 것 같다.

트랙내에 각 세션을 보면 MATLAB이나 Simulink 초보자에게는 좀 힘든 내용일 수 있으므로 이런 경우는 "MATLAB & Simulink 워크샵"을 듣는 것도 도움이 될 것으로 보인다. 물론 워크샵의 경우 인원 제한이 있어서 일찍 선택 하신 분들에게 우선권을 주므로 잘 선택해서 필요한 세션과 중복되지 않게 들으면 도움이 될듯 하다.

사용자 삽입 이미지

많은 사람들이 참석해서 많은 것을 얻어 갔으면 한다. 더 자세한 내용은 맨 앞에 소개한 홈페이지로 가면 자세한 내용을 알 수 있다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/211

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/211

매스웍스 제품군 (2)

프로그래밍/MathWorks Products 2010/03/30 19:31 게으른 엔지니어
앞에서 다 쓰지 못한 나머지 세 개의 플랫폼에 대해서 얘기해 보도록 하겠다.

5. 코드 생성 플랫폼
매스웍스 제품의 완결되는 플랫폼으로 Simulin로 만든 모델과 Embedded MATLAB 으로 만든 MATLAB 함수를 C/C++, HDL, PLC 형태의 코드로 만들어 주는 플랫폼이다. 매스웍스에서 얘기하는 모델 기반 설계(Model-Based Design)의 마지막을 장식하는 플랫폼으로 생성된 코드를 기존의 코드나 혹은 운영체제에 쉽게 접목 시킬 수 있도록 해주는 플랫폼이다. 초기 시작은 C 코드만을 생성하다가 C++로 확장되더니, HDL까지도 코드를 생성해 주며, 이번에 새로 나온 R2010a에는 Simulink PLC Coder가 포함되어서 훨씬 다양한 형태로 모델로부터 구현까지 지원을 하게 되었다. HDL Code와 함께 PLC Coder의 경우에도 아직 지원 안되는 블록셋이나 기능이 있긴 하지만 점차 버전 업이 되면서 이런 문제들도 해소될 거라고 보고 있다.

6. Verification 와 Validation을 위한 플랫폼
점차적으로 소프트웨어의 중요성이 커지고, 자동 생성 코드의 중요성이 커지면서 점점 중요해 지고 있는 분야가 테스팅 분야이다. 소프트웨어의 검증은 C/C++ 코드를 컴파일과 링크 과정을 통해서 오브젝트 코드를 만들어서 테스트를 하는 동적 테스팅과 소스 코드 자체를 검사하는 정적 테스팅이 있다.
동적 테스팅의 경우 코드가 완성되어서 직접 보드에 다운로드해서 테스팅해야 하는 번거로움과 함께, 테스팅이 거의 마지막 단계에서 완성되기 때문에 문제가 발생하게되면 많은 과정을 거쳐서 수정을 하게 된다. 매스웍스 제품은 컴파일러와 같이 오브젝트 코드를 만드는 제품이 없으며, 모델(Simulink로 만들어진 모델을 말한다.)을 만들어서 지속적으로 인풋을 만들어서 테스트를 하기 때문에 동적 테스팅과 같은 개념의 작업을 모델을 개발(알고리즘 개발) 하면서 하게 된다. 물론 오브젝트 코드로 바뀌고 나서 다시 테스트해봐야 하지만, 이미 모델을 테스트하면서 개발한 테스트 케이스가 있으므로 좀 더 편리하게 동적 테스팅을 할 수 있다. 이와 같이 모델 상에서 단순히 테스트 케이스로 테스트하는 것에서 더 나아가 모델 상에서의 커버리지를 보는 것과 같이 다양하게 Verification과 Validation을 하기 위한 제품을 제공한다.

7. 코드 검증 분야
정적 테스팅의 경우 C/C++과 ADA 의 소스 코드를 검증하기 위한 PolySpace라는 제품군을 제공한다. 일반적인 정적 테스팅의 경우 코드를 분석하여 오류가 발생할 만한 부분들을 표시해 주는 것이지만, PolySpace의 경우 Formal Method 중에서 Abstract Interpretation 이라는 기법을 사용하여 오류가 발생하지 않음을 검증하는 제품이다. 처음 들으면 기존의 정적 분석 툴과 다를게 없어 보이지만, 실제로는 개념상 완전히 다르게 봐야 한다. PolySpace의 경우 코드를 분석하여 현재 코드 상에서 발생할 수 있는 모든 경우의 수에 대해서 수학적으로 검증을 하게 되므로 동작중에 가장 많이 나타나는 배열 첨자가 지정된 범위 바깥을 나타낸다던지, 혹은 0으로 나누기 등과 같은 다양한 에러에 대해서 발생하지 않음을 검증하는 제품이다. 이 제품도 얘기하자면 무지 길므로 다음에 기회가 있으면 자세하게 설명을 하도록 하겠다.

이상과 같이 매스웍스의 제품군은 자세히 보면 엔지니어링 전반에 걸쳐서 사용할 수 있으며, 서로 잘 연결된 전체 제품군으로 동작하므로 간단한 시스템에서 부터 다양한 분야가 접목된 상태에서 같은 제품을 사용할 수 있는 큰 장점이 있다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글 2개가 달렸습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/210

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/210

매스웍스 제품군 (1)

프로그래밍/MathWorks Products 2010/03/25 07:47 게으른 엔지니어

3월 첫주 금요일에 R2010a 버전이 새롭게 나왔다. 벌써 몇 년째 1년에 두번씩 업데이트된 버전을 내고 있는데, 이번 버전에서 가장 크게 추가된 기능은 System Object 라는 것이다.
조만간 이것에 대해서 자세하게 언급할 경우가 있겠지만, 실제 이쪽 분야 담당자와 얘기해 본 결과 상당히 좋아진 기능이라서 많은 사람들이 알았으면 하는 기능이라는 것이다.

지금 MathWorks 제품은 크게 보면 7개 정도의 큰 분야로 분리를 할 수 있다.

1. MATLAB 플랫폼
가장 기본적인 플랫폼으로 수학적인 알고리즘 계산등을 하기에 편리하며, 다른 프로그래밍 언어처럼 처리가 가능하다. MATLAB 플랫폼은 일종의 interpreter 언어로 볼 수 있으며, 기본적인 모든 연산은 행렬 연산을 기준으로 하고 있다. 덕분에 엔지니어링쪽에서 필요로 하는 계산을 사용자가 코딩할 때도 많이 생략되며, 또한 거의 최강이다 시피한 Data Visualization 을 손 쉽게 할 수 있다.

사용자 삽입 이미지


2. Distributed Computing 플랫폼
MATLAB 환경하에서 Parallel Computing을 하는 방법이 몇 년전부터 추가 되어서 다양하게 활용되고 있는 중이다. 한 컴퓨터 내에서 멀티 코어가 있을때 이를 직접적으로 활용하기 위해서는 Parallel Computing Toolbox를 사용할 수 있으며, 물리적으로 따로 떨어진 여러 대의 컴퓨터를 연결해서 알고리즘 전체를 여러번 반복해서 돌릴때 스케쥴러가 이런것을 이용해서 할때 사용하는 제품이 MATLAB Distributed Computing Server(MDCS)이다.

3. Simulink 플랫폼
또 다른 플랫폼처럼 얘기하긴 했지만, 더 바닥에는 MATLAB이 있어야만 실행이 가능하다. MATLAB과는 다르게 블록 다이어그램으로 필요한 프로그래밍을 하게 된다. MATLAB 플랫폼과 같이 일반적인 프로그래밍 언어로 알고리즘을 개발하던 엔지니어에게는 좀 생소할 수 있지만, 약간 익숙해 지면 대단히 편리하게 엔지니어링 일을 할 수 있다. 게다가 State Machine 알고리즘을 개발할 때는 Stateflow라는 제품을 활용해서 그래픽과 텍스트가 혼용된 형태로 모델링하여 훨씬 효과적으로 알고리즘을 개발할 수 있다. 또한 기존의 C코드가 있는 경우 Simulink에서 사용 가능한 형태의 블록으로 만들어서 Legacy Code와도 같이 사용하기 쉽게 되어 있으며, C로 블록을 만드는 방법 자체가 공개되어 있기 때문에 대부분 다른 툴과 연동이 쉽게 되어 있다.
사용자 삽입 이미지


사용자 삽입 이미지

4. Physical Modeling 플랫폼
Simulink를 이용해서 제어기 설계나 시물레이션을 하다보면 항상 문제가 될 수 있는 부분이 플랜트이다. 플랜트란 제어 하고자 하는 대상체를 통상적으로 지칭하는 말로서, 예전에는 수식을 특정 대상체에 대한 시간에 대한 특성을 수식으로 만들어서 Simulink로 수식을 구현하던가, Adams와 같은 Dynamic System의 모델링을 전문적으로 하는 툴에서 만들어서 Simulink로 가져 오는 방법등을 사용했었다. 하지만, 이런 경우 기계적인 시스템과 전기적인 시스템, 그리고 유압 시스템까지 같이 있는 플랜트의 경우는 한꺼번에 시물레이션을 하기가 매우 힘들다.

Physical Modeling 플랫폼의 경우 물론 Simulink 위에서 블록처럼 존재하지만, 실제로는 Simulink 에서 제공하는 다른 블록들과는 다르게 동작하며, 다양한 도메인을 위한 라이브러리가 존재한다. Physical Modeling 플랫폼의 경우 특정 시스템을 모델링할 때 시스템의 수식을 만들어서 이를 Simulink로 구현하는게 아니라 실제 존재하는 각 컴포넌트를 연결함으로써 시스템의 수식은 내부적으로 만들어 진다. 예를 들어 SimElectronics 라는 Physical Modeling 플랫폼의 제품중에 하나는 일반적으로 많이 사용하는 모터가 블록으로 존재해서 실제 모터의 스펙 값을 입력하는 것으로 모터에 대한 모델링을 끝낼 수가 있다.

R2010a를 기준으로 현재 제공하는 다양한 도메인을 제공하는데, 예를 들어 비행기의 랜딩 기어를 설계할 경우, 엑츄에이터로 유압 모터가 좋을지 일반적인 전기 모터가 좋은지를 비교해야 할 경우를 생각해 보자. Physical Modeling 플랫폼에는 SimHydraulics라는 라이브러리가 있어서 유압 모터가 블록으로 존재하며, SimElectronics에 있는 전기 모터를 Simulink 환경에서 쉽게 블록을 변경하면서 테스트 할 수 있다.

또한 Physical Modeling 플랫폼에서 제공하지 않는 컴포넌트는 Simscape Language를 활용하여 직접 손 쉽게 만들 수 있다.

이 부분은 얘기하자면 무지 길어 지니 다음 천천히 시간을 내서 설명을 하도록 하겠다. 지금은 매스웍스 홈페이지의 소개하는 http://www.mathworks.com/physical-modeling/를 참조 하자.

사용자 삽입 이미지


나머지 세 개의 플랫폼은 5. 코드 생성 플랫폼, 6. Verification과 Validation을 위한 플랫폼, 7. 코드 검증 분야 플랫폼 으로 나누어 지는데, 다음에 올리 도록 하겠다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/209

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/209

드뎌 몇년간 마음속에서 여유를 없게 만들었던 책이 출판된다. 매스웍스 제품 전문 출판사인 아진 출판사(http://ajin.to)를 통해서 출판한다.

Simulink를 잘 모르지만 써야 하는 사람들을 위해서 쓴 책이다. 가능한 자세히 선수 지식이 없어도 따라 할 수 있도록 최선을 다해서 썼지만, 항상 이런 작업을 하고 조금만 더 라는 유혹에 빠지게 된다. 더 이상 미룰 수 없어서 현재 가장 괜찮다는 생각에 출판을 하게 되었다.

몇 년간 마음속에 여유를 없게 했던 일중에 하나를 끝내서 시원 섭섭하며, 벌써 다음 책을 구상하고 쓸 계획을 하는 것을 보면 어쩔 수 없이 또 마음 속에 짐을 하나 가지고 다닐것 같다.

책은 아직까지는 일반 서점에 까지는 안 풀린것 같고, 아마 이번주에 인쇄를 마치고 빨라도 다음주는 되어야 일반 서점에 풀릴것 같다. 책 표지를 궁금해 할 사람(?)을 위해서 아진 출판사로부터 여기에서 볼 수 있다.

클릭을 귀찮아 하는 사람(?)을 위해서 표지 이미지를 여기에 넣어 둔다.

사용자 삽입 이미지

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글 하나가 달렸습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/208

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/208

매스웍스사에서는 일반적으로 플랜트 모델링을 쉽게 수식을 유도하지 않고, 모델링 할 수 있는 다양한 툴을 제공하고 있다. 국내에는 툴에 대해서 다양하게 알려져 있지 않기 때문에 사용하지 않지만, 사용법을 본다면 그 쉬운 방법에 반할 수 밖에 없을 것이다.

국내에서 최초로 이런 Physical Modeling 툴만을 위한 세미나를 모레(9월9일) 삼성동에 있는 섬유센타에서 개최한다.
자세한 내용은 아래 주소에 가서 확인하고 등록해서 참석했으면 한다.
http://www.mathworks.co.kr/company/even ··· 222.html


또한 대전에서 Green Energy의 기반이 되는 Window Power Generation과 Solar Power에 대해서 Physical Modeling Tool 뿐만 아니라 매스웍스사의 다른 툴인 제어기 개발과 연계하여, 어떤 식으로 사용하실 수 있는지에 대한 Case Study를 볼 수 있으니 많이 와서 보고 배워 갔으면 한다.

http://www.mathworks.co.kr/company/even ··· 378.html

국내에서 처음으로 시도되는 Physical Modeling 관련 행사 이므로 많은 것을 배울 수 있을 거라고 생각한다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/205

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/205

MATLAB R2009b 가 나왔당

프로그래밍/MathWorks Products 2009/09/07 14:22 게으른 엔지니어
벌써 MATLAB R2009b가 나왔다. 2007년부터인가 1년에 두 번씩 업그레이드를 약속하더니, 지금까지 계속해서 1년에 두 번씩 업그레이드가 나오고 있다. 지난번 버전부터인가, 실제로 고객들에게 DVD를 보내지 않고, 가능한 웹으로 다운 로드 받아서 설치하기를 유도하고 있다. 물론 고객이 원하는 경우에 요청을 하면 DVD는 보내 주기는 하지만 말이다.

일단 새 버전을 인스톨 했으니, 뭐가 바뀌었나 부터 봐야 겠당... Pre-release 부터 사용을 해서 UI가 좀 바뀐것을 알긴 하지만, 뭐... 예전과 그리 많이 바뀐거 같지는 않다.

몇가지 크게 바뀐건 예전에 TASKING, VisualDSP++, Green Hills MULTI, TI's Code Composer Studio등에 대한 각각의 Link 제품이 있었는데, 이번에 하나로 통합된게 외향적으로 아주 크게 바뀐것으로 보인다.

Simulink에서 사용자에게 가장 크게 바뀐 부분은 PID Controller를 위한 새로운 블록이 추가 되었다. Simulink Control Design과도 연계되는 블록으로 PID 설계를 좀더 쉽게 할 수 있게 되었다고 볼 수 있다.
사용자 삽입 이미지


또 하나의 바뀐 내용은 Simulink를 사용하다 보면 자주 사용하는 블록들이 생기게 되는데, Simulink Library Browser에 "Most Frequently Used Blocks"라는 탭이 생겨서 자동으로 추가 시켜 주게 된다.
사용자 삽입 이미지

Simulink Library Browser에 생길 뿐만 아니라  마우스 오른버튼을 눌렀을때 나오는 컨텍스트 메뉴에도 생겨서 블록의 추가를 쉽게 할 수 있게 되었다.

사용자 삽입 이미지


그리고 Help 윈도우에 따로 존재 하던 Demo 탭이 각 제품의 밑에 Demos라는 항목으로 추가 되었다. 모양도 좀 더 예뻐지고....
사용자 삽입 이미지

 실제 내부를 사용하다 보면 훨씬 많은 것들이 바뀌었겠지만, 현재 보이는 건 이 정도이다.
담에 기회되면 몇 가지 더 알리도록 하겠다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/204

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/204

아래 내용은 마이크로소프트웨어 2009년 7월호에 기사로 나간 내용입니다. 물론 초안이라서 책에 나간 내용과는 약간 차이가 있습니다. 저작권 문제가 있을 수 있으므로, 복사하시지는 말고 링크만 걸어 주시기 바랍니다. 잡지 기사를 pdf로 보실려면 iMaso 홈페이지에 가셔서 구매하실 수 있습니다.



에너지 및 제조 산업에서의 그린 SW 활용

제 1 절  Overview

Green IT는 위키피디아의 정의에 의하면 Green Computing과 같은 개념으로 본다. Green Computing은 컴퓨터 자원을 효율적으로 활용하여, 유해 물질의 사용 최소화나 에너지 사용 효율의 극대화, 자원의 재활용, 친환경 에너지 개발을 하는 것이다. 본 편에서는 임베디드 소프트웨어가 이러한 Green IT 개념에 어떻게 적용되는지를 친환경 차, 친환경 대중 교통 수단인 바이모달 트램, 다양한 자연 에너지(예를 들어 풍력) 발전소에 대해서 그 기본 개념과 개발 방식 및 소프트웨어의 역할을 보도록 한다.

제 2 절  친환경 그린카

2009년 5월19일 버락 오바마 미국 대통령은 지구 온난화에 큰 영향을 주는 배기가스 배출 기준을 대폭 강화했으며, 자동차 연비를 높여서 석유의 의존도를 줄이고자 하는 규제안을 발표했다.

규제안에 따르면 배기가스 배출량을 30% 줄이고, 현재 적용되는 갤런당 평균 25마일의 연비를 갤런당 평균 35마일로 높여야 하는 기준을 제시했으며, 차종별로 2012년부터 단계적으로 2016년까지 적용되며, 최종적으로 승용차는 갤런당 42마일, 경트럭과 지프형 차량 및 밴은 26마일로 연비를 높여야 한다.

또한 EU(유럽연합)에서도 비슷한 형태의 규제 법안을 내놓았으며, 법안을 만족 시키지 못할 경우 과중한 벌금을 내도록 규제하고 있다.

이런 규제들을 만족시키기 위한 다양한 시도가 있었으며, 그중 대표적으로 친환경 그린카 라고 부를 수 있는 다음과 같은 종류가 있다.1.

클린 디젤 자동차
현재 유럽쪽에서 구현되고 있으며, 가솔린 차량보다 효율이 높은 디젤 차량의 장점을 살려 기존 문제점이었던 미세 먼지, 질소산화물 등의 배출 가스를 현저히 줄인 자동차
하이브리드 자동차
구동 시 내연 기관과 전기 모터를 같이 이용하는 자동차, 주행의 상태에 따라 두 동력 장치를 적절히 연동시켜 연비를 향상시킴
플러그인 하이브리드 자동차
내연기관과 전기모터를 같이 이용하지만, 가정용 전기로 충전할 수 있는 배터리를 장착하여 단거리 주행시 전기 모터로만 구동하는 자동차
수소 연료전지 자동차
탱크에 저장된 수소를 산소와 반응시켜 생산한 전기로 전기모터를 작동시키는 자동차
전기 자동차
순수하게 배터리의 힘으로만 움직이는 자동차

단순히 연비를 만족시키기 위해서는 클린 디젤 엔진을 활용하면 가능할 수 있지만, 온실효과를 일으키는 CO2의 배출 기준을 만족시키는 것은 현 기술로는 거의 불가능하다. 연비와 배출가스의 기준을 만족시키는 가장 좋은 방법은 전기 자동차이다. 하지만, 아직까지 전기 자동차는 몇 가지 난관을 가지고 있으며, 현재 기술로는 토요타의 프리우스와 같은 가솔린 엔진(혹은 디젤 엔진)과 전기 모터가 결합된 형태인 하이브리드 카(Hybird Electric Vehicle, HEV)가 각광을 받고 있다.

2.1  하이브리드 카

세계 최초로 대량 생산된 하이브리드 카인 토요타의 프리우스는 1997년 일본에서 처음 발매되었으며, 2000년에 미국에 발매된 이후로 전세계적으로 2009년 초반까지 120만대 이상을 판매하였다. 환경 규제 법안을 만족 시키기 위해서는 이런 하이브리드 카에대한 연구가 지속적으로 수행될것이며, 국내 업체인 현대/기아에서도 이미 ‘연비 개선 로드맵’에 따라 2015년에 미 연방정부의 규제를 만족시킬 수 있는 갤런당 35마일로 높이기로 내부 목표를 세웠다.

사용자 삽입 이미지

그림 1: 토요타의 프리우스

지난 4월에 있었던 모터쇼에서 현대/기아는 이미 아반떼 하이브리드 LPI 및 포르테 하이브리드 LPI를 소개했으며, 7월과 8월에 각각 출시할 예정이다. 또한 내년에는 쏘나타 하이브리드를 미국 시장에 투입시킬 예정이다. 아직까지는 외국계 회사의 하이브리드 카에 비해서는 연비가 떨어지지만 점차 높여서 나가서 ‘연비 개선 로드맵’에 맞추어 개발할 예정이다2.

이런 하이브리드 카의 원리를 간단하게 살펴 보고, 소프트웨어의 역할을 확인해 보자.

2.1.1  하이브리드 카의 작동 원리

하이브리드 카의 경우 가솔린(혹은 디젤) 엔진과 전기 모터를 활용하여, 연료의 효율을 높이고 화석 연료를 최소화해서 사용하므로 배출 가스를 대폭 줄일 수 있다. 일반적인 상태에서는 가솔린 엔진이 작동하며, 특정 모드에서는 가솔린 엔진과 전기 엔진이 모두 동작하게 된다.

구성


사용자 삽입 이미지

그림 2: 일반적인 하이브리드 카 구성 요소

그림 2는 토요타의 프리우스의 Hybrid Synergy Drive 시스템의 구성을 간략하게 표현한 것으로 일반적인 가솔린(혹은 디젤) 엔진과 같은 구성을 볼 수 있으며, 변형된 동력 전달 장치와 전기 모터, 발전기 및 대용량의 배터리등을 볼 수 있다. 또한 동력 분산 장치(Power Splitter)의 경우 전기적 파워와 기계적 파워를 변경 가능하도록 하는 장치이다.

구성 장치는 현재 운전이 어떤 모드로 되는지에 따라서 동작하는 것이 달라지게 된다. 여기서는 총 5가지로 모드를 나누어서 생각해 보자.

출발 모드
출발을 할 경우는 가솔린 엔진을 이용하여 차를 움직이게 된다. 이 시점에서는 전기 모터를 사용하지 않고, 가솔린 엔진만을 사용한다.

주행 모드


사용자 삽입 이미지

그림 3: 주행 모드에서의 동작

주행 모드에서는 가솔린 엔진으로부터의 동력을 전달 받아서 동력 분산 장치가 실제 차를 구동 시키면서 필요한 경우 발전기를 통해서 배터리를 충전할 수 있다. 그림 3처럼 가솔린 엔진이 동력 분산 장치를 통해서 실제 차를 구동 시키고 배터리의 충전이 필요한 경우는 동력을 발전기에 전달하여 배터리의 충전까지 하게 된다.

가속 모드


사용자 삽입 이미지

그림 4: 가속 모드에서의 동작

급격한 가속을 하거나 혹은 더 많은 동력을 필요로 하는 경우, 가솔린 엔진과 함께 전기 모터도 동력 분산 장치로 동력을 전해줘서 필요한 만큼의 동력을 얻게 된다. 그림 4를 보면 가솔린 엔진과 전기 모터가 함께 차축에 동력을 전달하는 것을 알 수 있다.

브레이크 모드


사용자 삽입 이미지

그림 5: 브레이크 모드에서의 동작

차량 운행중에 브레이크를 밟는 동작은 현재 동작중인 엔진으로부터의 동력을 끊고, 바퀴를 멈추기 위해서 실제로 에너지를 버려야 하며, 이러한 것들이 바로 마찰에너지등로 사라지게 된다. 그림 5처 럼 하이브리드 카는 이런 소멸되는 에너지를 다시 동력 분산 장치를 통해서 발전기를 통해서 배터리를 충전하는 방식으로 에너지를 어느 정도 재사용할 수 있게 해준다. 이렇게 충전된 배터리는 가속 모드에서 필요한 동력을 위해서 전기 모터를 동작 시킬 수 있게 된다.

정지 모드
정지 모드에서는 에너지를 소비하지 않기 위해서, 가솔린 엔진과 전기 모터 모두 자동으로 동작을 멈추게 된다. 이 때문에 일반적인 자동차 보다는 정지 이후에 출발시 약간 늦게 출발한다는 느낌을 받을 수 있다.

2.1.2  하이브리드 시스템을 위한 시물레이션 및 구현
이상과 같이 간단하게 설명된 원리 구현을 위해서는 하드웨어(가솔린 엔진, 전기 모터, 등등)와 함께 소프트웨어가 필요하다. 특정 시점에 맞춰서 동력 전달을 위한 결정도 해야 하며, 언제 전기 모터를 가솔린 엔진과 함께 사용하고, 가솔린 엔진만으로 구동하거나, 혹은 배터리를 주행중에는 언제 충전할 것인지등은 모두 소프트웨어적으로 결정되어야 한다.

전체 시스템 구성


사용자 삽입 이미지

그림 6: Simulink상에서의 하이브리드 시스템 구성

그림 6는 그림으로만 설명했던 하드웨어적인 부분들을 전체적으로 배열하여 놓은 Simulink 모델이다. Simulink는 그림 6와 같이 블록을 연결하여 알고리즘을 구현하며, 하드웨어의 동작까지도 소프트웨어로 구현 가능하기 때문에 하드웨어의 제작전에 알고리즘이 적합한 것인지등을 테스트 하거나 혹은 요구 사항(여기서는 규제안에 맞는 연비와 효율 등)이 구현 가능한 것인지등을 미리 검증할 수 있기 때문에 다양한 엔지니어링 분야에서 사용되고 있다.

또한 시물레이션을 통해서 검증된 알고리즘에 대해서도 C 코드를 생성해 낼 수 있기 때문에, 모델의 재활용이며, 알고리즘을 검증한 후 C 코드를 직접 생성해 내는 것보다 훨씬 효율적임을 알 수 있다.

이런 시물레이션을 통한 알고리즘의 검증과 C 코드 생성을 활용하는 것은 제품 개발 시간의 단축 및 제품의 신뢰성에 큰 영향을 줄 수 있다. 이런 방식의 개발 방법을 Model-Based Design이라고 한다. 더 자세한 내용은 2007년 7월부터 10월까지 마소지에 연재된 기사를 참조하기 바란다.

컴포넌트 별 모델링
그림 6와 같이 전체 시스템을 분류별로 잘 나누어서 모델링을 한 이후에 각 컴포넌트를 좀더 실제 상황과 맞게 모델링을 하게 된다. 여기서는 예를 들어 하드웨어 부분과 소프트웨어 부분을 어떤 식으로 모델링되어 있는지 보도록 하자.

DC-DC Converter 모듈
그림 6에서 DC-DC Converter 모듈을 좀 더 자세하게 알아 보자. DC-DC Converter 모듈은 배터리에서의 나온 전압을 증폭하는 모듈이다. 그림 7를 보면 실제 회로도를 보는 것과 같이 모델링한 것을 알 수 있다. 이런 하드웨어적인 부분들을 자세하게 포함하면 할 수록 시물레이션에 걸리는 시간은 많이 걸린다. 그림 7와 같이 실제 하드웨어를 시물레이션하기 위해서는 수식을 작성하거나 해서 만들어야 하지만, 그림 7와 같이 실제 하드웨어의 구성품들을 연결하여 모델링을 하도록 도와 주는 제품들도 있다. 여기서 보여 지는 제품은 Simscape 이라고 하는 제품을 활용하여 만든 것이다.
사용자 삽입 이미지

그림 7: Simscape을 이용한 DC-DC Converter 모듈 모델링

테스트 케이스
시물레이션을 하게 되면, 당연히 테스트 케이스가 있어서 알고리즘을 테스트 하게 된다. 그림 6에서 ‘Driver Inputs’ 부분이 전체 알고리즘을 테스트 하는 부분이며, 내용을 보면 그림 8와 같다. 그림 8에서 빨간색 선으로 된 인풋은 가솔린 엔진의 페달을 어느 정도 밟았는지 표시하는 것이며, 파란색 선은 브레이크를 어느 정도 밟았는지 표시하는 것이다.
사용자 삽입 이미지

그림 8: 알고리즘을 테스트 하기 위한 테스트 케이스

운전 모드에 따른 모델링
각 운전 모드를 스테이트로 보고 스테이트 머신을 모델링하면 시물레이션을 해 볼 수 있다. 스테이트 머신의 경우 Stateflow 라는 소프트웨어를 활용하면 각 스테이트의 변경을 에니메이션으로 볼 수도 있으며(이는 디버깅시 상당히 편리하다), 알고리즘이 완성되면 Stateflow Coder라는 제품으로 코드를 생성할 수 있다.

그림 9는 Stateflow로 운전 모드를 스테이트 머신 형태로 모델링한 것이며, 파란색으로 보이는 박스가 현재 동작중인 스테이트를 나타낸다. 조건이나 이벤트에 의해서 스테이트간의 움직임을 볼 수 있는 이런 기능은 직접 코딩을 해서 디버거를 이용하는 방법 보다는 훨씬 쉽게 알고리즘을 파악할 수 있다. Stateflow에 관한 내용은 마소지 2008년 1월부터 4월까지 필자가 연재한 내용을 보면 어느 정도 정보를 얻을 수 있다.


사용자 삽입 이미지

그림 9: Stateflow로 만든 모드 로직

2.1.3  임베디드 소프트웨어와 활용

이상과 같이 하이브리드 카의 기본적인 작동 원리와 시물레이션을 위한 소프트웨어의 역할을 간단하게 보았다. 앞에서 보여준 것과 같이 간단한 모델에서 점차 각각의 모듈을 더욱 세부적으로 실제 시스템과 비슷하게 모델링하여 하드웨어의 제작과 별개로 알고리즘을 테스트 할 수 있다.

시물레이션을 한 후에 알고리즘을 다시 직접 C 코드를 작성하게 되면, 인력과 시간의 소모가 생길뿐이므로 가능한 자동 생성 코드를 사용해서 C 코드를 생성하여 제품 개발 시간 단축과 임베디드 소프트웨어의 신뢰도를 높일 수 있다. 이런 개발 방법을 Model-Based Design(MBD)라고 한다.

실제로 GM에서는 Simulink, Stateflow와 같은 모델링툴과 모델로부터의 코드 생성툴인 Real-Time Workshop Embedded Coder과 Stateflow Coder를 활용하여 하이브리드 카를 개발하였다3.

2.2  전기 자동차

전기 자동차는 기본적으로 전기 충전을 해서 배터리와 전기 모터만으로 차를 구동시키는 방법이다. 이 방법의 문제는 전기 충전을 위해서 주유소와 같이 전기 충전소가 필요하며, 충전시 걸리는 시간등이 문제가 되며, 또한 배터리의 효율성도 문제가 된다.

이런 전기 자동차에서 사용되는 배터리는 주로 연료 전지(Fuel Cell)를 이용한다. 전기 자동차에도 다양한 구성 요소가 있지만, 제일 중요한 요소가 바로 연료 전지이므로 연료 전지의 기본 원리와 함께 소프트웨어의 역할을 살펴 보자.

2.2.1  연료 전지 정의 및 구조
일반적인 내연 기관(예를 들어 가솔린 엔진)과 연료 전지의 가장 큰 차이점은 다음과 같다.

일반적인 내연 기관
가솔린 + 산소 →에너지 + 물 + CO2 + CO

연료 전지
수소 + 산소 →에너지 + 물

연료 전지는 기본적으로 환경 친화적인 에너지 발생 장치임을 알 수 있다. 전기 에너지를 사용할 수 있도록 하는 대표적인 제품은 배터리인데, 연료 전지의 경우 그림 10에서 보는것처럼 외부에서 수소와 산소를 인풋으로 받아서 내부의 화학적 변화로 에너지와 물을 생성한다. 배터리의 경우 내부에 축적된 에너지를 사용하기 때문에 클로즈드 시스템이라고 하며, 연료 전지의 경우 오픈 시스템으로 본다.


사용자 삽입 이미지

그림 10: 연료 전지의 기본 원리

일반적으로 한 개의 연료 전지는 자체적으로 0.7 볼트의 전압을 발생시킬 수 있기 때문에 실제로 사용하기 위해서는 그림 11와 같이 스택처럼 쌓아서 사용해야 한다.


사용자 삽입 이미지

그림 11: 연료 전지 Stack

2.2.2  연료 전지 시스템 시물레이션 및 구현
연료 전지 Stack의 경우 외부에서 수소와 산소가 제공되어야 하므로 그림 12처럼 수소의 양을 조절하여 생성되는 에너지인 전기의 세기를 조절하게 된다. 이런 수소의 양을 조절하기 위해서 제어 보드가 있어야 하며, 임베디드 소프트웨어가 필요하게 된다.

사용자 삽입 이미지

그림 12: 연료 전지 시스템

연료 전지 시스템 플랜트 모델링
그림 12에서 연료 전지 시스템의 플랜트 부분의 모델은 그림 13와 같이 Simulink 환경에서 사용 가능한 블록 형태로 제공되는 ThermoLib/FClib라는 제품이다. 이 제품은 Simulink 환경에서 연료 전지 시스템에서 플랜트 부분을 모델링하는 데 필요한 모든 블록을 제공한다.


사용자 삽입 이미지

그림 13: 연료 전지 시스템 플랜트 모델링

Power Converter 모델링
그림 12에서 Power Converter 부분은 Simulink 환경에서 동작하며, 전력이나 발전에 관한 다양한 블록을 제공하는 SimPowerSystems를 이용하여 그림 14와 같이 모델링 할 수 있다.


사용자 삽입 이미지

그림 14: Power Converter

전력 및 물에 대한 제어
제 어하고자 하는 대상인 플랜트에 대한 모델링을 하였으므로 이제 이 들을 제어할 부분을 고려해 보자. 간단하게 생각하면 전력에 대한 제어와 생성되는 물에 대한 제어가 필요하다. 전력에 대한 제어는 스위치를 활용할 수 있으며, 물에 대한 제어는 밸브를 이용해서 제어가 가능하다. 이러한 제어의 경우에도 특정한 조건이나 이벤트에 따라 동작해야 하므로, 그림 15와 같은 Stateflow로 모델링을 한다.


사용자 삽입 이미지

그림 15: 제어기

2.2.3  임베디드 소프트웨어와 연료 전지의 활용
이상과 같이 임베디드 소프트웨어를 작성하기 전에 하드웨어를 직접 만들기 전에 시스템을 PC상에서 구성하여 시물레이션을 할 수 있으며, 그에 대한 코드를 생성할 수 있다. 시스템상에서 코드를 생성할 수 있는 것은 다양한 장점이 있는데, 그 중 가장 큰 장점은 앞에서 설명한 알고리즘을 새로 C 코드를 작성할 필요가 없다는 점이다. 또 하나의 장점은 HIL(Hardware-In-the Loop) 시스템 구성이나 RCP(Rapid Control Prototype 혹은 줄여서 RP) 시스템으로 시스템을 테스트할 수 있다.

연료 전지의 활용은 차량에서만 사용할 수 있는 것이 아니고, 현재 배터리나 전기로 동작하는 제품에는 모두 연료 전지를 사용할 수 있다. 자전거, 휴대폰, 노트북, 청소기, 아파트 난방, 휴대용 연료전지,무인 항공기, 항공기, 인공위성, 군용 장비등 다양한 분야에 활용할 수 있다.

Ford Motor사와 Pi Technology사는 함께 MBD를 활용하여 연료전지 자동차를 이미 개발했으며, 다양한 성공 사례가 있다4.

제 3 절  철도 분야

자동차 분야에서 활발하게 친환경에 대한 활동이 있다는 얘기는 역으로 말하면 지금까지 친환경에 대해서는 많이 부족했다는 점이다. 개인용 차량이나 버스등에 대해서 개발이 활발한데, 사람 수송에 가장 큰 영향을 주는 철도에서도 이런 친환경에 대한 연구가 이루어 지고 있다. 대표적인 것이 바로 바이모달 트램이다.

3.1  바이모달 트램(Bimodal Tram)

일반적으로 철도는 정해진 궤도(철로)를 따라 달리는 교통 수단이지만, 바이모달 트램은 이름에서 뜻하는 것처럼 정해진 궤도나 혹은 일반 도로에서도 달리는 새로운 교통수단이다. 수도권이나 지방 대도시에서 볼 수 있는 지하철의 장점과 유연한 운행과 쉬운 접근성이 있는 버스의 장점을 합쳔 차세대 교통 수단으로 볼 수 있다.

전체 구성
바 이모달 트램의 경우 동력원으로 CNG-하이브리드와 연료 전지 등을 추진 시스템으로 사용하는 하므로 친환경적이라고 볼 수 있다. 또한 운전자의 조작 없이 시스템이 동작하며, 모든 바퀴의 방향을 조작할 수 있는 전체 차륜 조향 시스템을 사용하므로 정거장에 정차하는 위치를 정밀하게 제어 할 수 있어서 지하철과 같이 정밀한 정차가 가능하다. 그림 165를 보면 바이모달 트램의 구성을 볼 수 있으며, 앞에서 이미 설명했던 다양한 하드웨어가 사용됨을 알 수 있다.


사용자 삽입 이미지

그림 16: 바이모달 트램 시스템 구성

그림 16는 하드웨어적인 구성과 형태에 따른 바이모달 트램 시스템의 구성이며, 그림 17은 실제 시스템 개발시 소프트웨어 측면에서 본 구성이다. 이와 같은 구성을 보면 결국 다른 시스템에서 봤던 것과 같이 소프트웨어를 이용하여 시물레이션 하고 그 모델로부터 코드 생성해서 임베딩할 수 있는 MBD를 활용할 수 있음을 알 수 있다.


사용자 삽입 이미지

그림 17: 바이모달 트램 시스템 구성

제 4 절  자연 에너지 발전소

친환경 에너지를 생각하면 발전소를 빠트릴 수가 없다. 화석 연료를 사용하는 발전소와 달리 자연 환경을 사용하는 발전소를 살펴보자.

4.1  풍력 발전소

현실적으로 가장 많이 사용되는 발전소는 풍력 발전이다. 다른 에너지원은 여러 가지 문제가 있어서 아직까지는 풍력이 가장 각광을 받고 있으며, 친환경적이다. 간단히 풍력 발전소의 원리를 보고, 소프트웨어가 왜 필요한지 알아 보자.

4.1.1  동작 원리
풍력 발전소는 다수의 풍력 터빈을 설치하여 기계적인 동력이나 전기를 발생시켜서 사용하는 시스템이다. 풍력 터빈은 바람의 힘인 운동 에너지를 기계적인 동력으로 변환하며, 컨버터 등을 사용해서 다시 전기로 변경시킬 수 있다. 그림 186를 보면 풍력 터빈의 구조를 각 컴포넌트별로 표현한 것이다. 하드웨어가 복잡해질 수록 제어를 하기 위한 임베디드 소프트웨어의 복잡성은 당연한 사실이다.

사용자 삽입 이미지

그림 18: 풍력 터빈의 구조

그림 19는 풍력 터빈에 제어가 필요한 부분을 표시한 것이다. 이런 제어를 하기 위해서는 실제 하드웨어서 직접 할 수도 있지만, 시물레이션이 역시 필요한 것이다.


사용자 삽입 이미지

그림 19: 제어가 필요한 부분

풍력 터빈에서 중요한 것은 바람에 의해서 동작하는 블레이드(Blade)가 항상 정상 속도로 회전하도록 만드는 것이다. 블레이드가 너무 빨리 회전하면 풍력 터빈에 손상을 가져 올 수 있으며, 너무 늦게 회전하면 필요한 만큼의 기계적 동력을 얻지 못한다. 블레이드가 일정한 속도로 회전하는 것은 블레이드의 핏치(Pitch)를 바꿈으로서 얻을 수 있다. 매스웍스 제품을 활용할 경우 풍력 발전에 필요한 모든 내용을 모델링, 시물레이션, 그리고 코드 생성까지 가능하며7, 여기서 중요한 블레이드 핏치 제어를 위해서 블레이드와 그 연결 부위를 모델링하는 것을 살펴 보자. 전체 시스템의 모델링은 http://www.mathworks.com/programs/wind_turbine_webinars/에서 볼 수 있다.

블레이드 및 연결 부위
블레이드 핏치를 제어 하기 위해서는 그림 20에서 모델링한 하드웨어를 시물레이션을 하기 위해서 구성해야 한다. 이렇게 모델링으로 구성하고 나면 마찬가지로 제어기를 구성하여 시물레이션을 해볼 수 있다. 그림 20에서 오른쪽에 있는 모델은 SimMechanics라는 제품을 활용한 것이다. 3D로 된 강체의 모델링을 수식을 세우지 않고 쉽게 모델링 할 수 있게 도와 주며, Simulink 환경에서 동작하기 때문에 제어기 설계등을 하나의 환경에서 쉽게 연결해서 할 수 있다.


사용자 삽입 이미지

그림 20: 블레이드 핏치 제어를 위한 모델

4.2  GreenIT, 시물레이션, 그리고 임베디드 소프트웨어

지금까지 몇 가지 예를 들어 GreenIT에서 실제로 소프트웨어가 어떤 역할을 하는지 살펴 보았다. Green IT의 특징은 시스템이 점점 지능적이 되어 가면서 소프트웨어의 역할은 점점 더 커지고 있는 것이며, 하드웨어와 함께 동작하는 것을 알 수 있다. 보드에 임베딩되는 특성 때문에 항상 하드웨어가 제작되기 전에는 알고리즘을 확인하기 힘들기 때문에 시물레이션의 중요성이 커지면서, 소프트웨어로 하드웨어의 일부를 대체해서 테스트해 볼 수 있는 RCP와 HIL의 중요성이 커지고 있다.

또한 소프트웨어의 디펙트나 알고리즘의 문제점을 초기에 발견해서 고칠수록 비용과 시간이 절감되기 때문에 Model-Based Design과 같은 모델링 기법들을 사용해서 초기에 검증하고 그 모델들을 재사용하여 코드 생성까지 하는 것도 일종의 리소스를 재활용하는 것이다.

Notes

1산업 연구원

2http://www.theautochannel.com/news/2009/03/11/453029.html

3http://www.mathworks.co.kr/company/user_stories/userstory19893.html?by=company

4http://www.mathworks.com/company/user_stories/userstory13369.html?by=company

5http://www.hydrail.org/docs/present3/chang.pdf

6http://www1.eere.energy.gov/windandhydro/wind_how.html

7http://www.mathworks.com/programs/wind_turbine_webinars/


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글 하나가 달렸습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/203

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/203

const 와 pointer의 조합...

프로그래밍/C와 C++ 2009/06/23 00:27 게으른 엔지니어

아래 자료는 예전에 쓰던 네이버에서의 자료를 복사한 것이다. 계속해서 네버에 있는 자료를 블로그로 옮겨야 겠다.


회사에서 시행되는 S/W 역량 강화 시험을 준비하다가 갑자기 생각나서 자료를 찾아 보았다.


cont keyword와 pointer를 같이 쓸때의 정확한 의미가 궁금해서 말이다.


기본적으로 const는 변수 정의시 같이 사용하면 변수의 값을 절대 바꿀수 없게 되어 있다.

때문에 const를 사용하여 변수 정의할 때는 초기화를 해 주지 않으면 그 변수는 다시는 값을 저장할 수 없는 경우가 발생한다.


포인터 변수에 const는 두 개까지 사용할 수 있다. 왜냐고?

포인터 변수를 생각해 보면 포인터 변수는 기본적으로 주소를 가지고 있고, 그 주소를 따라가면 뭔가 자료가 저장되어 있다. 그러므로 변경하지 못하게 하는게 두개가 생긴다. 바로 포인터 변수가 가지고 있는 주소값과 그 주소값에 저장되어 있는 값 말이다.

int a = 10;

int b = 5;

const int *p1 = &a;

int * const p2 = &a;


이렇게 변수를 const를 이용하여 정의 할 수 있다.

컴파일러가 이를 해석하는 입장으로 생각해 보자.


p1의 경우 const가 적용되는 부분이 int * 이다. 그러므로

*p1 = 20;

과 같이 사용하면 에러가 된다. 바꿀 수 없는 녀석을 바꿀려고 한다는 것이다. 대신 p1 = &b;는 가능하다.

두번째 경우인 p2의 경우

const p2 에만 적용이 된다. 즉 p2의 내용인 주소를 변경할 수 없다는 것이다.

그러므로

p2 = &b로 사용할 수 없다. 대신 *p2 = b; 는 가능하다.


그럼 이것들을 전부 적용해보면

const int * const p3 = &a;


는 p3가 가지는 주소값도 변경 못하면서, 그 주소값에 있는 값도 바꿀수 없게 된다.


요약하자면

"const는 그 다음에 오는 것을 상수화 시킨다"

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
TAG ,
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/202

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/202

6월에 있을 큰 행사에서 사용할 데모 때문에 하드웨어 연동 부분을 Simulink에서 사용 가능하도록 하고 있는 중이다. 하드웨어는 http://www.varram.com에 있는 DRC 카메라와 홈페이지에서 동영상으로 보이는 로봇이다. 뭐 카메라에 대한 자세한 내용은 홈페이지를 참조하면 되겠다.

카메라의 특징중에 하나가 RF를 이용해서 이미지가 전송되고 이를 PC상에서 처리해서 결과를 보내 주면 카메라는 다른 보드들과는 시리얼로 통신이 가능하다는 개념이다.  카메라가 DRC Station이라고 USB로 PC와 연결되어 있는 보드로 RF로 이미지를 보내 주면 PC에서는 이를 OpenCV를 이용해서 이미지 처리를 하도록 되어 있다.

Simulink나 MATLAB에서 이를 쓰게 할려면 몇 가지 작업을 거쳐야 한다. 첫 번째 문제점은 OpenCV를 활용해서 PC로 넘어 오는 이미지의 포맷이 IplImage 라는 점이다. MATLAB이나 Video and Image Processing Blockset에서 사용하기 위해서는 RGB 형태가 제일 좋다.

지금 진행된 작업은 DRC Station에서 가져온 데이타를 Simulink에서 사용 가능하도록 블록을 만들었다. 이제 할 일은 IplImage 포맷을 RGB로 변환해서 넘겨 주도록만 하면 될것 같다.

구글신께 상황을 물어 보니 여러 가지 답이 나오는데, 이것 저것을 직접 본 결과 제대로 답을 주는 코드가 없어서 오히려 더 헷갈리기만 해서 직접 IplImage의 포맷을 확인한 결과 의외로 배열을 잘 핸들링만 하면 특별히 어려울게 없다는 것을 알았다. 아래의 내용은 채널수가 3인 경우에 해당된다. Gray Scale로 오는 경우는 3을 곱할 필요도 억고, 당은연히 RGB로 뽑아 낼 수도 없다.

IplImage 구조에 있는 필드 중에 imageData라는 필드가 실제로 RGB 데이타를 가지고 있는데, 1차원 배열로 저장이 BGR 순서로 되어 있다. 즉 아래 그림과 갈이 있는다는 것을 알 수 있다. RGB의 각각의 처음이 (1, 1)부터 시작된다고 하면, 아래와 같이 imageData의 첫번째가 바로 Blue 데이타이고, 그 다음이 Green 데이타의 처음, 그 다음이 Red 테이타의 처음이다. 이런식으로 위치에 대한 데이타가 1차원으로 주욱 나열 되어 있다.
사용자 삽입 이미지

실제 MATLAB이나 Simulink에 있는 Video and Image Processing Blockset에서 사용하기 쉽게 하기 위해서는 아래 그림과 같이 각각의 데이타를 가진 배열로 만들어서 3차원 배열로 만들면 된다.

사용자 삽입 이미지


이를 위해서 IplImage의 필드 중에서 필요한 필드를 이용하여 직접 만들어야 한다. 아래에 코드가 이를 하기 위한 코드이다.  월요일에 사무실에 가서 실제 하드웨어에서 값을 받아서 해봐야 겠다.

img를 IplImage의 포인터 타입이라고 생각하자. 그러면 IplImage의 구조를 보면 img->width, img->height, img->widthStep 등을 활용해서 필요한 RGB를 뽑아 낼 수 있다.

[code]
for ( i = 0; i < img->height; i++ )
{
  for ( j = 0; j < img->width; j++ )
  {
     b[i][j] = img->imageData[i*img->widthStep + j*3];
     g[i][j] = img->imageData[i*img->widthStep + j*3 + 1];
     r[i][j] = img->imageData[i*img->widthStep + j*3 + 2];
  }
}
[/code]
로 코드를 뽑으면 된다. 현재 하드웨어가 없어서 되는지를 MATLAB에서 확인해 봤다. 월요일날 실제로 적용해서 되는지를 적도록 하겠다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글 하나가 달렸습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/194

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/194

2006년부터 해마다 매스웍스 코리아에서는 정기적으로 큰 행사를 진행하고 있다. 국내 엔지니어뿐만 아니라 본사 엔지니어들과 매스웍스 제품을 사용하고 있는 고객들까지 참여해서 하는 행사이다. 올해도 코엑스 인터컨티넨탈 호텔에서 행사를 진행한다. 행사의 이름은
The MathWorks Technology Conference 2009

행사 세부 일정을 보면 하루 종이 행사이며, 매스웍스 제품군을 대부분 다 다루는 행사이다. 또한 다양한 마스터 클래스로 참석자들에게 필요한 내용을 전달하기도 하며, 다양한 분야의 데모도 준비하고 있다. 또한 "임베디드 제어 시스템 설계 및 검증" 트랙은 동시통역까지 하므로 들을때도 많은 도움이 될거라고 생각한다.

특히나 국내 임베디드 소프트웨어 담당자들은 주로 커널 포팅이나 디바이스 드라이버 작성을 많이 생각하는데, 실제로는 알고리즘이 더 중요하다. 이런 알고리즘의 중요성을 인식하게 되면 시물레이션을 하지 않을 수가 없으며, C/C++ 같은 경우는 시물레이션을 하기에는 사용자에게 너무 많은 시간과 노력을 요구한다. 임베디드 소프트웨어 제어 시물레이션을 위한 툴 중에는 거의 독보적인 위치에 있는 Simulink 플랫폼에 대한 비전을 충분히 느낄 수 있을거라고 생각한다.

이미 선진국인 미국, 유럽, 일본등은 시물레이션하는 단계를 벗어나서 어떻게 하면 Verification과 Validation을 시물레이션 단계에서 할 수 있는지에 대한 고민을 하고 있으며, 매스웍스 제품군이 이런 사용자의 요구를 어떻게 수용해서 제품으로 도움을 주는지 세미나에 참석하면 알 수 있을듯 하다.

많은 사용자가 사전 등록해서 보러 왔으면 한다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/200

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/200