파라미터란 노드의 동작을 제어하는 설정값으로, 노드 내부의 특정 동작에 대한 설정을 저장하고 관리한다.

각 노드는 독립적인 파라미터 서버를 통해 자신의 파라미터를 관리하고 노드 동작을 제어할 수 있다.
ex_calculator 에서 파라미터는 퍼블리셔와 서브스크라이버를 가지고 있는 argument와 calculator 노드에서 분산된 형태로 존재한다.
✔ declare_parameter(선언)
노드에서 사용할 파라미터의 고유 이름을 지정하고 초깃값을 설정한다✔ get_parameter(읽기)
노드에서 사용할 파라미터 값을 불러온다✔ add_on_set_parameters_callback(변경)
파라미터 변경 요청이 있을 때 사용된다
✔ 파라미터 선언
class Argument(Node):
def __init__(self):
super().__init__('argument')
self.declare_parameter('qos_depth', 10)
qos_depth = self.get_parameter('qos_depth').value
self.declare_parameter('min_random_num', 0)
self.min_random_num = self.get_parameter('min_random_num').value
self.declare_parameter('max_random_num', 9)
self.max_random_num = self.get_parameter('max_random_num').value
self.add_on_set_parameters_callback(self.update_parameter)
self.declare_parameter('qos_depth',10) : qos_depth 라는 파라미터 이름을 선언하고 기본값을 10으로 지정qos_depth = self.get_parameter('qos_depth').value : 선언된 qos_depth 값을 가져와 qos_depth 변수에 저장qos_depth를 그냥 사용한 이유는 해당 메서드 내에서면 사용하는 임시 변수(로컬 변수)이기 때문self.add_on_set_parameters_callback(self.update_parameter) : 파라미터가 변경될 때마다 호출되는 콜백 함수 등록✔ 파라미터 업데이트 콜백
def update_parameter(self, params):
for param in params:
if param.name == 'min_random_num' and param.type_ == Parameter.Type.INTEGER:
self.min_random_num = param.value
elif param.name == 'max_random_num' and param.type_ == Parameter.Type.INTEGER:
self.max_random_num = param.value
return SetParametersResult(successful=True)
params : 변경된 파라미터 목록'min_random_num' 이 변경되면 self.min_random_num 을 새로운 값으로 업데이트Parameter.Type.INTEGER : 파라미터 타입이 정수형인지 확인파라미터 존재하는 노드를 실행시킨다.
ros2 run ex_calculator argument
파라미터 목록을 확인한다.
ros2 param list
파라미터 CLI를 사용한다.
ros2 param get /argument max_randim_num : 해당 파라미터 값을 가져온다.

ros2 param set /argument max_random_num 1000 : 해당 파라미터 기본 설정값을 변경한다.

프로그램의 실행 명령어와 함께 인수를 추가하여 프로그램을 실행할 때 사용되는 인자를 실행인자라고 한다. 입력을 미리 정의할 수 없을 때, 실행인자로 외부로부터 입력을 받아 프로그램에 사용할 수 있다.
ros2 run ex_calculator checker -g 100
: ex_calculator 패키지의 checker 노드에 추가로 -g 100 실행인자를 사용했다는 뜻이 된다.
- 프로그래밍에서의 파라미터(Parameter) : 함수나 메서드를 정의할 때 사용되는 변수 이름이다.
- ROS2에서의 파라미터(Parameter) : 노드의 동작을 제어하는 설정값이다.
여기서는 프로그래밍에서의 파라미터 의미에 가깝다.
def add(x,y) 에서 x,y는 파라미터
def add(2,3) 에서 2,3은 실행인자이다.
argc와 argv 대신 sys.argv 를 사용하는 명령 줄 인자 처리 리스트argument를 파싱하여 프로그램 내에서 사용할 수 있도록 해석하고 처리하는 도구1. 파서 만들기
ArgumentParser 클래스의 인스턴스를 생성한다.def main(argv=sys.argv[1:]):
parser = argparse.Argument(
formatter_class=argparse.ArgumentDefaultsHelpForamtter)
2. 인자 추가하기
add_argument 메서드를 이용하여 실행 인자를 정의한다.parse.add_argument(
'-g', #단축형 이름
'--goal_total_sum', #전체이름
type=int, #데이터타입
default=50, #기본값
help='Target goal value of total sum')
# --help 도움말 실행시 볼 수 있는 문구
3. 인자 파싱하기
parse_args 메서드를 호출하여 명령줄에서 전달된 인자를 파싱하고 Namespace 객체로 반환한다.args = parser.parse_args()
4. 인자 사용하기
args.xxx 로 인자를 사용할 수 있다.checker.send_goal_total_sum(args.goal_total_sum)
add.argument 에서 정의했던 -goal_total_sum 으로 접근하여 사용할 수 있다.