본문 바로가기
Mathamatics/Control Theory

ACADO Toolkit 이란? 2. Code Generation 폴더 변경 방법

by 항공학도 2022. 3. 4.

참고: ACADO homepage-making your own projects using Cmake

ACADO 기본 패키지를 사용하면 code generation할때

<ACADO_ROOT>/examples/code_generation/mpc_mhe

와 같이 복잡한 폴더 속에 넣어야 한다. 그래서 내가 원하는 폴더로 변경하기 위해 몇가지 작업을 해줄 필요가 있다.

1. <ACADO_ROOT>/examples 안의 CMakeLists.txt 변경

CMakeLists.txt 안을 보면 33번째 줄부터 example directory를 입력하게 되어 있다.

	SET( EXAMPLE_DIRS
		basic_data_structures/curve
		basic_data_structures/function
		basic_data_structures/matrix_vector
		basic_data_structures/symbolics
		basic_data_structures/variables_grid
		controller
		getting_started
		integration_algorithm
		integrator
		validated_integrator
		multi_objective
		nlp
		ocp
		parameter_estimation
		process
		simulation_environment
		my_acado_test
	)

우리는 마지막 줄과 같이 my_acado_test를 추가해서 여기에 code_generation이 되도록 해보자.

2. <ACADO_ROOT>/examples/my_acado_test 폴더 생성

앞의 CMakeLists.txt안에 적은것과 같은 동일한 명의 폴더를 생성한다.

3. 아래 내용의 CMakeLists.txt를 my_acado_test 폴더안에 생성

################################################################################
#
# Description:
#	CMake scipt for building code-generation ACADO examples
#
# Authors:
#	Milan Vukov, milan.vukov@esat.kuleuven.be
#
# Year:
#	2012 - 2014.
#
# NOTE:
#	- It is assumed that one executable has only one source (.cpp) file.
#
# Usage:
#	- This file should be called from the main CMake script for examples.
#
################################################################################

################################################################################
#
# Compilation of examples
#
################################################################################

#
# Compiling examples
#
UNSET( SOURCES )
FILE( GLOB SOURCES ./*.cpp )
IF( NOT ACADO_DEVELOPER )
	#
	# Remove examples with dev_ prefix
	#
	FILE( GLOB DEV_SOURCES ./dev_*.cpp )
	IF ( DEV_SOURCES )
		LIST( REMOVE_ITEM SOURCES ${DEV_SOURCES} )
	ENDIF ( DEV_SOURCES )
ENDIF( NOT ACADO_DEVELOPER )
	
#
# Temporary patch: remove closed loop examples and test files
#
FILE( GLOB CLOSED_LOOP_SOURCES ./*_closed_loop.cpp )
FILE( GLOB CLOSED_LOOP_SOURCES ./*_test.cpp )
IF ( CLOSED_LOOP_SOURCES )
	LIST( REMOVE_ITEM SOURCES ${CLOSED_LOOP_SOURCES} )
ENDIF ( CLOSED_LOOP_SOURCES )

#
# Compile examples
#
FOREACH( SRC ${SOURCES} )
	GET_FILENAME_COMPONENT( EXEC_NAME ${SRC} NAME_WE )
	SET( CURR_EXE code_generation_${EXEC_NAME} )
	ACADO_APPLICATION( ${CURR_EXE} ${SRC} )
ENDFOREACH( SRC ${SOURCES} )

4. acado syntax로 작성된 코드를 넣고 코드 생성 진행행

이렇게 하면 <ACADO_ROOT>/examples/my_acado_test 폴더 안에 실행파일이 하나 생성되고 이를 실행하면

1. Code Generation 방법 에서 설명한 것과 같이 코드들이 자동 생성되는 것을 확인할 수 있다.

댓글