ROS学习(四)

1. Topic 和 Message 的概念

  1. Topic 是 Node 间进行持续通迅的一种形式 。
  2. 通讯中的两个 Node 通过 Topic 名称建立起话 Topic 通讯连接 。
  3. Topic 中通讯的数据 ,叫做消息 Message 。
  4. Message 通常会按照一定的频率持续不断的发送 ,以保证消息数据的实时性 。
  5. 发送消息的 Node 是 Publisher , 接受消息的 Node 是 Subscriber 。

2. 多 Publisher

通常的情况是一个 Node 和多个 Node 或者多个和多个建立联系 ,下图中展示了两个 Publisher 和 一个 Subscriber 之间的联系 。
这里使用到两个 Topic 分别与 Subscriber 建立连接 。
使用

rqt_graph

显示下图
两个发布者节点和一个订阅者节点的通信

i. 上图中,A_node(_copy) 是发布者节点的名称, B_node 是订阅者节点名称 。
ii. 订阅者节点通过订阅发布者节点所发布的主题来建立通信。
iii. 发布者发送的具体消息图中未显示。

PS:Publisher 的发言顺序需要控制 ,同一时刻只能有一个 Node 发言 。

3. Message

话题 Topic 中流动的消息 Message ,消息的作用是携带数据从消息的发布者 Publisher 流动到订阅者 Subscriber ,消息的数据、类型和容量都存在差距,因此消息的格式也分为很多种类型,以满足不同的数据传输要求。
例如: std_msgs 包 ,具体支持的类型到index.ros.org中查看。

============================================================================================================================================

ROS中的多节点同时启动

将多个节点编写到一个 launch 中实现一次启动多个节点
  1. 在包 pkg_A 下创建 launch 文件夹
  2. launch 中创建 cnt.launch 文件然后放入下列代码
    ~~ PS : 不需要编译
<launch>

    <node pkg = "pkg_A" type = "node_A" name = "node_A"/>

    <node pkg = "pkg_A" type = "node_A_copy" name = "node_A_copy"/>

    <node pkg = "pkg_B" type = "node_B" name = "node_B" output = "screen" />

</launch>
  1. 启动多个节点
roslaunch pkg_A cnt.launch

============================================================================================================================================

机器人的运动控制(典型发布者节点应用)

  1. 在工作空间的src目录下创建新软件包vel_pkg 。
  2. 打开vscode,在包的src目录下船舰新节点vel_node。
  3. 代码中,创建话题发布对象vel_pub,调用NodeHandle创建话题发布名称/cmd_vel
  4. 创建对象vel_msg,发送速度控制消息
  5. 开启while循环,vel_pub对象发送速度消息包
	ros::init(argc, argv, "vel_node");
    ros::NodeHandle n;
    ros::Publisher vel_pub = n.advertise<geometry_msgs::Twist>("/cmd_vel", 10);

    geometry_msgs::Twist vel_msg;
    vel_msg.angular.x = 0;
    vel_msg.angular.y = 0;
    vel_msg.angular.z = 0;
    vel_msg.linear.x = 0.1;
    vel_msg.linear.y = 0;
    vel_msg.linear.z = 0;

    ros::Rate r(30);

    while (ros::ok)
    {
        vel_pub.publish(vel_msg);
        r.sleep();
    }
  • 26
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值