본문 바로가기
ros2_python/Ros2 msg,srv,action,parm

ros2_python코드에서 param 데이터 사용법

by 알 수 없는 사용자 2022. 4. 27.

참고

https://docs.ros.org/en/foxy/Tutorials/Using-Parameters-In-A-Class-Python.html#

 

이 부분까지 진행중이다.

ros2 tutorial 잠깐 멈출거임 

 


 

ros2 pkg create --build-type ament_python python_parameters --dependencies rclpy

 

직접 editor로 코드추가

디렉토리 내부에 dev_ws/src/python_parameters/python_parameters라는 새 파일을 만들고 그 python_parameters_node.py안에 다음 코드를 붙여넣습니다.

코드 설명 : my_parameter

minimal_param_node 네이밍 -> 

declare_parameter로 파라미터 선언(이름은  my_parameter  value는 world->

2초마다 한 번씩 timer_callback 콜백함수 호출 ->

get_parameter 함수로 마파를 밸류 my_param에 대입후 get_logger로 콘솔출력 ->

 

my_new_param에 정해진 형식으로 data 넣고 ->

all_new_parameters = [my_new_param] 이거로 all_new_parameters 에 또 data 넣고 ->
self.set_parameters(all_new_parameters) 이거로 all_new_parameters set.파라미터 해서 수정

 

import rclpy
import rclpy.node

class MinimalParam(rclpy.node.Node):
    def __init__(self):
        super().__init__('minimal_param_node')
        timer_period = 2  # seconds
        self.timer = self.create_timer(timer_period, self.timer_callback)

        self.declare_parameter('my_parameter', 'world')

    def timer_callback(self):
        my_param = self.get_parameter('my_parameter').get_parameter_value().string_value

        self.get_logger().info('Hello %s!' % my_param)

        my_new_param = rclpy.parameter.Parameter(
            'my_parameter',
            rclpy.Parameter.Type.STRING,
            'world'
        )
        all_new_parameters = [my_new_param]
        self.set_parameters(all_new_parameters)

def main():
    rclpy.init()
    node = MinimalParam()
    rclpy.spin(node)

if __name__ == '__main__':
    main()
 

 

 

rosdep install -i --from-path src --rosdistro foxy -y

 

 

 

colcon build --packages-select python_parameters

 

 

 

. install/setup.bash

 

 

ros2 run python_parameters param_talker

 


파라미터서버를 통해서 바뀌나 확인

ros2 param set /minimal_param_node my_parameter "param셋팅하는 부분"

 


코드로 파라미터 서버 봐꾸는 방법

실행 파일에서 매개변수를 설정할 수도 있지만, 먼저 실행 디렉토리를 추가해야 합니다. dev_ws/src/python_parameters/ 디렉토리 내에 launch라는 새 디렉토리를 생성합니다. 여기에 새 파일을 만듭니다.

 

python_parameters_launch.py

from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        Node(
            package='python_parameters',
            executable='param_talker',
            name='custom_parameter_node',
            output='screen',
            emulate_tty=True,
            parameters=[
                {'my_parameter': 'earth'}
            ]
        )
    ])

 

setup.py

이제 setup.py 파일을 엽니다. 파일 맨 위에 import 문을 추가하고 data_files 매개 변수(param)에 다른 새 문을 추가하여 모든 launch file을 포함합니다.

 

import os
from glob import glob
# ...

setup(
  # ...
  data_files=[
      # ...
      (os.path.join('share', package_name), glob('launch/*_launch.py')),
    ]
  )

 

 

 

colcon build --packages-select python_parameters

 

 

. install/setup.bash

 

 

 

ros2 launch python_parameters python_parameters_launch.py

 

 

 

 

 

 

댓글