parameter ์ฌ์ฉํ๊ธฐ (C++)
๊ฐ์
์ค์ต
ROS parameter๋ฅผ ์ฌ์ฉํ๊ธฐ
node๋ฅผ ์์ฑํ ๋ ํด๋น node์์ ํ์ํ parameters๊ฐ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋ค.
cd ~ /ros2_ws/src
ros2 pkg create --build-type ament_cmake cpp_parameters --dependencies rclcpp
2-1-1 package.xml ์
๋ฐ์ดํธํ๊ธฐ
package ์์ฑ์์ --dependencies ์ต์
์ ์ฌ์ฉํ์ฌ์ package.xml๊ณผ CMakeLists.txt์ ์์กด์ฑ์ ์ถ๊ฐํ์ง ์์๋ ๋๋ค.
package.xml ์์ ํ๊ธฐ
<description >C++ parameter tutorial</description >
<maintainer email =" you@email.com" >Your Name</maintainer >
<license >Apache License 2.0</license >
2-2 C++ node ์์ฑํ๊ธฐ
ros2_ws/src/cpp_parameters/src/cpp_parameters_node.cpp ํ์ผ ์์ฑ
#include < chrono>
#include < functional>
#include < string>
#include < rclcpp/rclcpp.hpp>
using namespace std ::chrono_literals;
class MinimalParam : public rclcpp ::Node
{
public:
MinimalParam ()
: Node(" minimal_param_node" )
{
this ->declare_parameter (" my_parameter" , " world" );
timer_ = this ->create_wall_timer (
1000ms, std::bind (&MinimalParam::timer_callback, this ));
}
void timer_callback ()
{
std::string my_param = this ->get_parameter (" my_parameter" ).as_string ();
RCLCPP_INFO (this ->get_logger (), " Hello %s!" , my_param.c_str ());
std::vector<rclcpp::Parameter> all_new_parameters{rclcpp::Parameter (" my_parameter" , " world" )};
this ->set_parameters (all_new_parameters);
}
private:
rclcpp::TimerBase::SharedPtr timer_;
};
int main (int argc, char ** argv)
{
rclcpp::init (argc, argv);
rclcpp::spin (std::make_shared<MinimalParam>());
rclcpp::shutdown ();
return 0 ;
}
2-2-1 ์คํ์(executable) ์ถ๊ฐํ๊ธฐ
CMakeLists.txt ์์ ํ๊ธฐ (find_package(rclcpp REQUIRED) ์๋ ์ถ๊ฐํ๊ธฐ)
add_executable (minimal_param_node src/cpp_parameters_node.cpp )
ament_target_dependencies (minimal_param_node rclcpp )
install (TARGETS
minimal_param_node
DESTINATION lib/${PROJECT_NAME}
)
2-3 ๋น๋ ๋ฐ ์คํํ๊ธฐ
์์กด์ฑ ํ์ธํ๋ ๋ช
๋ น ์คํ
cd ~ /ros2_ws
rosdep install -i --from-path src --rosdistro foxy -y
์ package๋ฅผ ๋น๋ํ๊ธฐ
cd ~ /ros2_ws
colcon build --packages-select cpp_parameters
์ ํฐ๋ฏธ๋ ์ด๊ณ source ํ๊ธฐ
source install/setup.bash
ros2 run cpp_parameters minimal_param_node
[INFO] [minimal_param_node]: Hello world!
2-3-1 console๋ก ๋ณ๊ฒฝํ๊ธฐ
ros2 run cpp_parameters minimal_param_node
์ ํฐ๋ฏธ๋ ์ด๊ณ source ์คํํ ํ์ ์๋ ๋ช
๋ น ์คํ
my_parameter ์ค์ ํ๊ธฐ
ros2 param set /minimal_param_node my_parameter earth
์ ํฐ๋ฏธ๋์์ source ํ ์๋ ๋ช
๋ น ์คํํด๋ณด๊ธฐ
ros2 run cpp_parameters minimal_param_node
[INFO] [minimal_param_node]: Hello earth!
2-3-2 launch ํ์ผ๋ก ๋ณ๊ฒฝํ๊ธฐ
ros2_ws/src/cpp_parameters/ ๋๋ ํ ๋ฆฌ ๋ด๋ถ์ launch ๋๋ ํ ๋ฆฌ ์์ฑ
launch ๋๋ ํ ๋ฆฌ ๋ด๋ถ์ cpp_parameters_launch.py ํ์ผ (์๋ ๋ด์ฉ ๋ถ์ฌ๋ฃ๊ธฐ)
from launch import LaunchDescription
from launch_ros .actions import Node
def generate_launch_description ():
return LaunchDescription ([
Node (
package = "cpp_parameters" ,
executable = "minimal_param_node" ,
name = "custom_minimal_param_node" ,
output = "screen" ,
emulate_tty = True ,
parameters = [
{"my_parameter" : "earth" }
]
)
])
CMakeLists.txt ํ์ผ์ ์๋ ์ฝ๋ ์ถ๊ฐํ๊ธฐ
install (
DIRECTORY launch
DESTINATION share/${PROJECT_NAME}
)
colcon build --packages-select cpp_parameters
์ ํฐ๋ฏธ๋์์ source ํ๊ธฐ
source install/setup.bash
ros2 launch cpp_parameters cpp_parameters_launch.py
[INFO] [custom_minimal_param_node]: Hello earth!