ROS2(2):C++ ROS node coding
·
1. 创建C++功能包
cd ~/ws/src,输入如下指令创建功能包
ros2 pkg create dog --build-type ament_cmake --dependencies rclcpp
创建结果如下:

在~/ws/src/dog/src下创建CPP文件
2. 代码编写
导入库时,发现如下问题,无法找到相关库(仅在VScode中出现如下问题)
![]()
打开"include path setting",添加/opt/ros/eloquent/**

在dog.cpp文件中编写如下代码:
#include "rclcpp/rclcpp.hpp"
int main(int argc, char **argv){
//init client
rclcpp::init(argc, argv);
//create new node
auto node = std::make_shared<rclcpp::Node>("dog");
RCLCPP_INFO(node->get_logger(), "Hello, tom. I will bite you.");
//spin
rclcpp::spin(node);
//shutdown
rclcpp::shutdown();
}
3. 配置文件修改
打开~/ws/src/dog/CMakeLists.txt,编辑添加如下内容
add_executable(dog_node src/dog.cpp)
ament_target_dependencies(dog_node rclcpp)
install(TARGETS
dog_node
DESTINATION lib/${PROJECT_NAME}
)
其中,dog_node指的是代码中的功能包节点名称。
4. 编译及运行
cd ~/ws,输入如下命令
colcon build --packages-select dog
source更新
source install/setup.bash
查看功能包
![]()
运行功能包
![]()
5. 代码优化
更新如下代码
#include "rclcpp/rclcpp.hpp"
class DogBarkNode: public rclcpp::Node
{
private:
/* data */
public:
DogBarkNode(std::string name):Node(name)
{
RCLCPP_INFO(this->get_logger(), "Hello, tom. I will bark at you.");
// RCLCPP_INFO(this->get_logger(), "Hello, tom. %s will bark at you.", name.c_str());
}
};
int main(int argc, char **argv){
//init client
rclcpp::init(argc, argv);
//create new node
auto node = std::make_shared<DogBarkNode>("dog_node_bark");
//spin
rclcpp::spin(node);
//shutdown
rclcpp::shutdown();
}
修改配置文件CMakeLists.txt
add_executable(dog_node_bark src/dog_bark.cpp)
ament_target_dependencies(dog_node_bark rclcpp)
install(TARGETS
dog_node_bark
DESTINATION lib/${PROJECT_NAME}
)
参考链接:
更多推荐
所有评论(0)