一、话题通信
1、话题通信核心实现
1-1 、C++实现
发布方
1-1.创建发布方;
publisher_ = this->create_publisher<std_msgs::msg::String>("topic", 10);
API:(创建发布方对象)
create_publisher ()
/*
模板: std_msgs::msg::String(被发布的消息类型 )
参数:
1、话题名称
2、Qos(消息队列长度)
返回值:
发布对象指针(rclcpp::Publisher<std_msgs::msg::String>::SharedPtr publisher_😉
*/
1-2.创建定时器;
timer_ = this->create_wall_timer(500ms, std::bind(&MinimalPublisher::timer_callback, this));
API: 创建定时器
create_wall_timer ()
/*
参数:
1、时间间隔(此处可以使用using namespace std::chrono_literals)
2、CallBack(回调函数)
返回值:
定时器对象指针(rclcpp::TimeBase::SharedPtr timer_)
*/
1-3.组织消息并发布。
publisher_->publish(message);
API:发布消息
publish()
/*
参数:
1、发布的消息
*/
订阅者
1-1.创建订阅方;
subscription_ = this->create_subscription<std_msgs::msg::String>("topic", 10, std::bind(&MinimalSubscriber::topic_callback, this, _1));
API:(创建订阅者)
create_subscription()
/*
模板:std_msgs::msg::String (消息类型)
参数:
1、话题名称
2、Qos(消息队列长度)
3、CallBack(回调函数(对订阅的消息进行处理))
返回值:订阅对象指针( rclcpp::Subscription<std_msgs::msg::String>::SharedPtr subscription_;)
*/
1-2.处理订阅到的消息。
回调函数(void topic_callback(const std_msgs::msg::String & msg))
1-2、Python实现
发布方
1.创建发布方
self.publisher_ = rclpy.create_publiser(String, 'topic', 10)
API: (创建发布方)
create_publisher()
/*
参数:
1、消息类型
2、话题名称
3、Qos(消息队列长度)
返回值:self.publisher_ (发布对象)
*/
2.创建定时器;
self.timer = self.create_timer(timer_period, self.timer_callback)
API: (创建定时器)
create_timer ()
/*
参数:
1、时间间隔
2、回调函数(处理订阅到的消息)
*/
3.组织消息并发布。
API:回调函数(
self.publisher_.publish(message)
)
publish()
/*
参数:
1、订阅到的消息
*/
订阅者
1.创建订阅方;
self.subscription = self.create_subscription(String,'topic',self.listener_callback,10)
API:(创建订阅者)
create_subscripition ()
/*
参数:
1、消息类型
2、话题名称
3、CallBack(回调函数)
4、Qos(消息队列长度)
返回值:self.subscripition(订阅对象)
*/
2.处理订阅到的消息。
listener_callbak(self,msg)
/*
处理订阅到的消息
*/
1-3、自定义消息
1、新建msg文件夹
2、配置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、配置CMakeLists.txt文件
find_package(rosidl_default_generators REQUIRED)
为接口文件生成源码
rosidl_generate_interfaces(${PROJECT_NAME}
“msg/Student.msg”
)
C++文件包含自定义消息头文件时需要配置Vscode中俄c__cpp_properties.json文件,在文件中的includePath属性下添加一行:
“{workspaceFolder}/install/base_interfaces_demo/include/**”