ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第二部分 单机以及编队控制实验—初级教程(5)

2021-07-12 13:02:22  阅读:241  来源: 互联网

标签:终端 单机 0.0 机器人 话题 初级教程 rostopic 节点 编队


2.6 重要的话题Topics

机器人有许多的功能,这些功能的实现是依靠着机器人各个模块之间的通信来完成。在ros中有两种通信方式,其中一种就是topic通信(异步通信),而另一种是service(同步通信)通信。本节只对rostopic做一些简单的讲解,详细的了解可以前往ros的wiki上的rostopic。如果您还想了解servicr,可以前往ros的wiki上的rosservice

我们先来了解一下异步通信和同步通信:

  1. 异步通信:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
  2. 同步通信:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。

topic是一种节点对节点的单向通信方式,这里的节点指的是ros中的node,单向就是这个节点要么只负责这个话题消息的接受,要么负责这个话题消息的发送,不会同时存在消息接受和发送。在ros中,负责发送消息给话题的叫发布者(Publisher),负责将话题传来的消息接受到的叫订阅者(Subscriber)。

例如:

我们通过键盘控制机器人的移动,就需要键盘和机器人的驱动来进行通信。我们会开启机器人驱动节点和键盘控制节点,其中键盘就是就是发布者,机器人的驱动就是订阅者。

2.6.1 rostopic命令

ros有很多的命令行工具,rostopic就是其中的一个,通过对rostopic的学习,我们可以较直观的看到机器人各个节点是如何通过topic进行通信的。

我们可以通过终端来看看rostopic的用法,打开终端,输入下面指令

rostopic -h

会在终端显示一些关于rostopic的用法

 

翻译如下:

rostopic是一个命令行工具,用于打印有关ROS话题的信息。

命令:

​ rostopic bw 显示话题使用的带宽

​ rostopic delay 从标题中时间戳显示话题延迟

​ rostopic echo 将消息打印到屏幕

​ rostopic find 按类型查找话题

​ rostopic hz 显示话题发布率      

​ rostopic info 打印有关活动主题的信息

​ rostopic list 列出活动话题

​ rostopic pub 将数据发布到话题

​ rostopic type 打印话题或字段类型

键入rostopic -h以了解更详细的用法,例如“rostopic echo -h”。我们主要讲解rostopic listrostopic echorostopic pub

2.6.1.1 通过rostopic list列出活动话题

1)打开一个终端,开启机器人的驱动节点

 roslaunch handsfree_hw handsfree_hw.launch

2)打开一个新终端,将机器人驱动节点的活动话题列出来

 rostopic list

下图为列出来的活动话题

 

3)关掉这两个终端,(关掉机器人驱动节点的终端时,先Ctrl+C结束节点进程,再关掉该终端)

4)重新打开一个终端,开启键盘控制节点,输入下面这段话

 roslaunch handsfree_hw keyboard_teleop.launch

5)打开一个新终端,将键盘控制节点的活动话题列出来

 rostopic list

下图为列出来的活动话题

 

6)通过对比,我们可以看到机器人驱动节点和键盘节点的活动话题有 3 条是相同的,这就代表两个节点之间有通过这几个相同的topcis进行通讯。

 

7)关掉这些终端,记得用Ctrl+C 将节点进程停止后,在关掉终端。

2.6.1.2 通过rostopic echo将消息打印到终端

我们通过 rostopic list看到了活动的话题,那么该如何看到话题接受到的消息

1)打开终端,启动机器人的驱动节点

 roslaunch handsfree_hw handsfree_hw.launch

2)打开第二个终端,启动键盘控制节点

 roslaunch handsfree_hw keyboard_teleop.launch

3)打开第三个终端,将话题传递的消息打印到屏幕

 rostopic echo /mobile_base/mobile_base_controller/cmd_vel

正常情况下, 您会看到有消息在打印

 

4)选中开启了键盘控制节点的终端,通过键入u、i、o、j、l、m、,、。来控制机器人移动,看看打印的消息是否发生了变化。如图,线速度和角速度的值发生了改变。

 

2.6.1.3 通过rostopic pub将数据发布到话题

我们在终端将话题的消息打印出来,同时也可以通过rostopic pub命令让终端成为发布者,发布一个话题的消息,让机器人驱动节点订阅这个消息,让机器人动起来。

打开一个新终端,复制粘贴输入下面的指令(这些是一整句指令哦):

rostopic pub /mobile_base/mobile_base_controller/cmd_vel geometry_msgs/Twist "linear: x: 0.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.5"

按下回车键,就可以让机器人旋转一个小的角度。修改对应的linear和angular值,可以让机器人完成前进、后退、旋转等。

2.6.2 重要的topic说明

1)获取imu的数据反馈

通过在终端输入 rostopic echo /handsfree/imu,可以看到

 header:

  seq: 8163

  stamp:

    secs: 1600054727

    nsecs: 591243289

  frame_id: "base_link"

 orientation:

  x: -0.00797228142619

  y: -0.0354238115251

  z: -0.181618481874

  w: 0.982698500156

 orientation_covariance: [0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0]

 angular_velocity:

  x: -0.00319267483428

  y: 0.0

  z: 0.0

 angular_velocity_covariance: [0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0]

 linear_acceleration:

  x: 0.659971177578

  y: -0.0286944005638

  z: 9.31850624084

 linear_acceleration_covariance: [0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0]

说明:

  • orientation 是姿态四元数;
  • angular_velocity 是三轴角速度;
  • linear_acceleration 是三轴加速度;

2)获取机器人底层硬件基本信息反馈

通过在终端输入rostopic echo /handsfree/robot_state,可以看到

 header:

  seq: 1126

  stamp:

    secs: 0

    nsecs:         0

  frame_id: ''

 system_time: 1258132864.0

 cpu_temperature: 37.0329437256

 cpu_usage: 0.0

 battery_voltage: 4.31145191193

 power_remain: -1.0

说明:

  1. system_time 是嵌入式下位机系统时间,单位是(us)
  2. cpu_temperature 是嵌入式下位机上的cpu温度,单位是摄氏度(℃)
  3. cpu_usage 是嵌入式下位机上的cpu使用率百分比,取值范围: 0~1。
  4. battery_voltage 是嵌入式下位机的电池电压,单位是伏特(V)
  5. power_remain 是嵌入式下位机上的电量剩余百分比,取值范围: 0~1。-1代表电池没有检测到。

3)获取机器人各个关节的位置、速度、力反馈信息

通过在终端输入rostopic echo /mobile_base/joint_states,可以看到

 header:

  seq: 24122

  stamp:

    secs: 1599730954

    nsecs:  12885933

  frame_id: ''

 name: [pitch_joint wheel1_joint wheel2_joint wheel3_joint wheel4_joint yaw_joint]

 position: [2.3561785221099854 0.0 0.0 0.0 0.0 -2.3561785221099854]

 velocity: [0.0 0.0 0.0 0.0 0.0 0.0]

 effort: [0.0 0.0 0.0 0.0 0.0 0.0]

说明:

  1. name 是机器人上可运动的关节的名称,pitch代表云台俯仰关节,yaw代表云台偏航关节,wheel1~4代表底盘的1~4号电机(不同的车电机数量不一样)
  2. position 是对应位置关节的实时位置反馈(机械臂和云台的关节,一般是位置关节,单位是弧度)
  3. velocity 是对应速度关节的实时速度反馈(底盘的电机,一般是速度关节,单位是弧度/S)
  4. effort 是对应力关节的实时力矩反馈(一般的关机用不到力控制)

4)机器人里程计反馈

通过在终端输入rostopic echo /mobile_base/mobile_base_controller/odom,可以看到

 header: 
  seq: 34004
  stamp: 
    secs: 1599731449
    nsecs: 704565438
  frame_id: "odom"
 child_frame_id: "base_link"
 pose: 
  pose: 
    position: 
      x: 0.00883402861655
      y: 0.006383263506
      z: 0.0
    orientation: 
      x: 0.0
      y: 0.0
      z: 0.110907605137
      w: 0.993830721563
  covariance: [0.001, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1000000.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1000000.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1000000.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1000.0]
 twist: 
  twist: 
    linear: 
      x: 0.0
      y: 0.0
      z: 0.0
    angular: 
      x: 0.0
      y: 0.0
      z: 0.0
  covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

说明:

  1. pose 代表里程计反馈的位置和姿态数据。
  2. twist 代表底盘的速度控制数据。

5)底盘控制话题(切记:不是驱动的反馈,而是驱动节点收到的其它节点的控制数据)

运行键盘遥控终端:

 roslaunch handsfree_hw keyboard_teleop.launch

打开新终端输入

rostopic echo /mobile_base/mobile_base_controller/cmd_vel

 linear: 
  x: 0.0
  y: 0.0
  z: 0.0
 angular: 
  x: 0.0
  y: 0.0
  z: 0.0

说明:

  1. linear为线速度矢量,控制机器人走直线距离,其中的x、y、z为空间坐标系。由于机器人是小车,所以只有x会生效。
  2. augular为角速度矢量,控制机器人转向,其中的x、y、z为空间坐标系。由于机器人是小车,所以只有z会生效。

也可以在ros的wiki上详细了解

6)云台控制话题: 云台的两个自由度的话题分别是:

/mobile_base/pitch_position_controller/command/mobile_base/yaw_position_controller/command

 float64 data

举例1:云台仰视45度:

rostopic pub -1 /mobile_base/pitch_position_controller/command std_msgs/Float64 -- 0.79

举例2:云台右转45度:

rostopic pub -1 /mobile_base/yaw_position_controller/command std_msgs/Float64 -- -0.79

标签:终端,单机,0.0,机器人,话题,初级教程,rostopic,节点,编队
来源: https://blog.csdn.net/qq_31530791/article/details/118672577

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有