ROS package 의 환경변수 설정을 확인해주기 위해 다음 명령어를 사용

$ export | grep ROS


1. 새로운 workspace 만들기

$ rosws init ~/fuerte_workspace /opt/ros/fuerte

참고: rosinstall package 에 rosws명령어가 포함되어 있는데 ros설치시 기본으로 포함되어 있지 않음(별도로 설치해주자)

$ sudo apt-get install python-rosinstall


2. 새로운 package 를 위해 directory 만들기

$ mkdir ~/fuerte_workspace/sandbox $ rosws set ~/fuerte_workspace/sandbox

new package의 경로를 환경변수 ROS_PACKAGE_PATH에 포함해주기 위해 다음 명령을 사용한다

$ source ~/fuerte_workspace/setup.bash

환경변수에 포함되어진거 확인하려면

$ echo $ROS_PACKAGE_PATH


'ROS electric' 카테고리의 다른 글

ROS topic의 이해  (0) 2014.01.08
ROS node의 이해  (0) 2014.01.08
ROS package 빌드  (0) 2014.01.07
ROS package 생성  (0) 2014.01.07
ROS Filesystem  (0) 2014.01.07
Posted by 신영식
,

'메모장으로 디버깅 메시지 출력1'에서는 clip board를 이용하여 노트패드로 문자열을 전달하였습니다. 이번에는 Edit 컨트롤의 EM_SETSEL과 EM_REPLACESEL 메시지를 사용하여 메시지를 전송합니다.

마찬가지로 출처는 Open Robotics 블로그입니다.

간단히 소스코드를 분석해보았습니다.

전체 코드입니다.

일단 동작원리를 확인해 보겠습니다. WinExec()함수를 이용하여 notepad를 실행시킨 후 DebugMessage() 함수를 이용하여 메모장으로 내보냅니다.

4번째 줄의 함수의 선언부를 보면 가변인수를 받아들이기 위해 '...' 으로 되어있습니다. '...' 이하의 인수값들을 받아들이기 위해서 va_list, va_start, va_end를 이용합니다.

10번째 줄의 wvsprintf(msg, fmt, args)를 이용하여 전달받은 가변인수 (여기서는 변수 i에 저장되어있는 값)과 'fmt 포인터가 가르키고 있는 문자열 '변수 i = %d'의 값을 결합하여 '변수 i = 0' 과 같은 문자열은 만들어 msg에 전달해준다.

12번째 줄부터 WinExec()를 이용하여 실행한 메모장의 윈도우를 찾고 Child Window를 확인합니다.
SendMessage()함수와 WM_GETTEXTLENGTH를 이용하여 텍스트윈도우의 문자열의 길이를 확인하고, EM_SETSEL로 text window의 문자열의 시작과 끝을 설정하고 EM_REPLACESEL을 이용하여 문자열을 덧붙이게 됩니다.

'sample code' 카테고리의 다른 글

메모장으로 디버깅 메시지 출력1  (0) 2013.02.19
Posted by 신영식
,

Windows에서 프로그래밍 할 때, 디버깅 메시지를 메모장으로 출력하는 방법입니다.

출처는 Open Robotics 블로그입니다.

제가 mfc를 잘 모르기 때문에 간단히 소스코드를 분석해보았습니다.

전체 코드입니다.

일단 동작원리를 확인해 보겠습니다. WinExec()함수를 이용하여 notepad를 실행시킨 후 DebugMessage() 함수를  이용하여 메모장으로 내보냅니다.

메모장으로 텍스트를 내보내기 위해서 클립보드를 사용합니다. DebugMessage()함수는 printf() 함수의 인자들과 비슷한 형식을 취하고 있습니다. 이렇게 사용하기 위해서는 가변인자에 대해서 알아야합니다.

4번째 줄의 함수의 선언부를 보면 가변인수를 받아들이기 위해 '...' 으로 되어있습니다. '...' 이하의 인수값들을 받아들이기 위해서 va_list, va_start, va_end를 이용합니다.

va_list args
char *형으로 정의 되어있으며 가변인수를 읽기위한 포인터 변수를 선언했다고 생각하자.

va_start(args, fmt)
이 명령은 가변 인수를 읽기위한 준비를 하는 것으로 args가 첫 번째 가변인수를 가르키도록 초기화한다. 첫 번째 가변인수의 번지를 조사하기위해 마지막 고정인수 fmt를 전달해 주었다.

va_end(args)
가변인수를 다읽은 후 뒷처리를 해준다.


10번째 줄의 wvsprintf(msg, fmt, args)를 이용하여 전달받은 가변인수 (여기서는 변수 i에 저장되어있는 값)과 'fmt 포인터가 가르키고 있는 문자열 '변수 i = %d'의 값을 결합하여 '변수 i = 0' 과 같은 문자열은 만들어 msg에 전달해준다.

DebugMessage() 함수의 그 이하의 내용은 WinExec()를 이용하여 실행한 notepad의 window를 찾고 child window를 찾아 msg에 들어있는 문자열의 내용을 클립보드로 올린 후 paste해주는 내용인듯 한다.

 

처음에 컴파일 했을 때 에러가 발생했다. 원인은 char로 전달받은 문자열을 wvsprintf()와 다른 함수들에서 유니코드로 처리하는 듯한다. 해결방법은 visual studio 2008의 메뉴에서 프로젝트-속성-구성속성-일반-문자집합-멀티바이트 문자집합사용으로 설정해주면 된다.

'sample code' 카테고리의 다른 글

메모장으로 디버깅 메시지 출력2  (0) 2013.02.19
Posted by 신영식
,