1、推荐继承方式
推荐以继承Node的方式来创建节点对象。继承方式可以在一个进程内组织多个节点,这对于提高节点间的通信效率是很有帮助的,但是直接实例化则与该功能不兼容。
C++继承Node实现示例如下:
#include "rclcpp/rclcpp.hpp"
class MyNode: public rclcpp::Node{
public:
MyNode():Node("node_name"){
RCLCPP_INFO(this->get_logger(),"hello world!");
}
};
int main(int argc, char *argv[])
{
rclcpp::init(argc,argv);
auto node = std::make_shared<MyNode>();
rclcpp::shutdown();
return 0;
}
Python继承Node实现示例如下:
import rclpy
from rclpy.node import Node
class MyNode(Node):
def __init__(self):
super().__init__("node_name_py")
self.get_logger().info("hello world!")
def main():
rclpy.init()
node = MyNode()
rclpy.shutdown()
2、自定义消息类型
(1)CMakeLists.txt文件
为了将.msg文件转换成对应的C++和Python代码,还需要在CMakeLists.txt中添加如下配置:
find_package(rosidl_default_generators REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/Student.msg"
)
(2)package.xml文件
在package.xml中需要添加一些依赖包,具体内容如下:
<build_depend>rosidl_default_generators</build_depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<member_of_group>rosidl_interface_packages</member_of_group>
3、ROS2包中使用其他ROS2包中的消息类型
在 ROS 2 中,如果功能包 A 需要使用功能包 B 中定义的消息类型,你需要在 CMakeLists.txt 和 package.xml 中做以下修改:
(1)在Cmakelist中的修改:
find_package(message_interfaces REQUIRED) # 替换为功能包 B 的实际名称
ament_target_dependencies(your_target_name
rclcpp
message_interfaces # 替换为功能包 B 的实际名称
)
(2)在package中的修改:
<build_depend>message_interfaces</build_depend>
<exec_depend>message_interfaces</exec_depend>
1337

被折叠的 条评论
为什么被折叠?



