使用Autolabor官方入门教程,笔记内容为注意事项
首页 – Autolabor开源ROS机器人底盘 – 官方网站
一. ROS通信机制的解释
例如在生活中,我们在家里有一个放零食的箱子,而操作服务器就是这个箱子,无论是使用者还是开发者都可以共同使用他。
- 话题通信是ROS中使用频率最高的一种通信模式,话题通信是基于 发布订阅模式的,也即:一个节点发布消息,另一个节点订阅该消息
雷达——->导航(计算)——–>底盘
在传递消息和传递运动控制指令时,就使用了话题通信,那么
雷达就是发布, 导航是订阅发布,底盘是订阅。
简单的三要素,发布 – 订阅 – 中间要素
角色—-> 流程 —-> 注意
(1)角色:
-
master —–> 管理者(媒婆)
-
talker ——>发布者 (男方)
-
listner ——->订阅者 (女方)
(2)流程 :
master 可以根据话题 建立发布者和订阅者之间的连接
-
男方提交信息 (房,手机号) ——————发布者比订阅者信息多
-
女方提交信息 (房)
-
媒婆把男方电话发给女方
-
女方打电话给男方(房 连接)
-
男方响应(加微信/给微信)
-
女方加男方微信
(3)注意:
1.使用的协议由RPC和TCP;
2.步骤1和步骤0没有顺序关系
3.talker 和 listener可以存在多个
4.建立连接后,master就可以关闭了
5.上述流程已经封装,直接调用就好
—————————————————————————
我们要设置 发布 和 订阅方(分别进行)- (我们的实操部分只进行C++实现案例)
接下来 将从头开始一一介绍(VScode的配置请参照上面的链接进行修改,否则无法正常调试)
一 : 发布框架+发布逻辑
(2)添加包 (头文件)—第一次为文件名,第二次为我们添加的包(后面服务可作修改)
(4) 在 CmakeLists 里面修改参数 (映射名字和定义名字最好一样 )
修改下面两处
(1)
(2)
然后shift+ctrl+b调试看看有没出错
(2)修改 CmakeLists
与发布者相同,对比着上面修改一下名称即可
注意事项在所给的课件里面有提到
就可以查看了
(3)运行
roscore
接下来为详细操作:
(1)创建新的功能包
新建服务文件夹和文件( srv 与 Addints.srv)
package 和 Cmakelist下更改配置
三 – 参数服务器
参数服务器实现是最为简单的,该模型如下图所示,该模型中涉及到三个角色:
- ROS Master (管理者)
- Talker (参数设置者)
- Listener (参数调用者)
ROS Master 作为一个公共容器保存参数,Talker 可以向容器中设置参数,Listener 可以获取参数。
(直接再虚拟机上操作)
订阅乌龟位姿(话题订阅)
- 新建文件:test02_sub_pose
内容如下:
/*
订阅小乌龟的位姿: 时时获取小乌龟在窗体中的坐标并打印
准备工作:
1.获取话题名称 /turtle1/pose
2.获取消息类型 turtlesim/Pose
3.运行前启动 turtlesim_node 与 turtle_teleop_key 节点
实现流程:
1.包含头文件
2.初始化 ROS 节点
3.创建 ROS 句柄
4.创建订阅者对象
5.回调函数处理订阅的数据
6.spin
*/
#include "ros/ros.h"
#include "turtlesim/Pose.h"
void doPose(const turtlesim::Pose::ConstPtr& p){
ROS_INFO("乌龟位姿信息:x=%.2f,y=%.2f,theta=%.2f,lv=%.2f,av=%.2f",
p->x,p->y,p->theta,p->linear_velocity,p->angular_velocity
);
}
int main(int argc, char *argv[])
{
setlocale(LC_ALL,"");
// 2.初始化 ROS 节点
ros::init(argc,argv,"sub_pose");
// 3.创建 ROS 句柄
ros::NodeHandle nh;
// 4.创建订阅者对象
ros::Subscriber sub = nh.subscribe("/turtle1/pose",1000,doPose);
// 5.回调函数处理订阅的数据
// 6.spin
ros::spin();
return 0;
}
再次配置CMakeList
Original: https://blog.csdn.net/ArtoriaLili/article/details/125162278
Author: ArtoriaLili
Title: ROS编程入门(C++ 及 思路)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/813956/
转载文章受原作者版权保护。转载请注明原作者出处!