命令发布ros话题 rostopic pub 类型 +tab显示格式 快捷单元测试

本文介绍了在ROS开发中,特别是协同开发时,如何使用rostopicpub命令发布和测试主题,包括掌握命令格式、快捷键使用以及常见话题类型如std_msgs和geometry_msgs的实践应用。
摘要由CSDN通过智能技术生成

1.摘要

  在做ros开发时,协同开发时,A同事做发布主题的节点 ,B 同事做订阅主题相关节点,

   都完成后合并测试,如果 B同事先开发,怎么办?

   第一个办法:自己先写一个 发布主题的demo程序

  第二个办法:直接用命令发布 主题测试自己的订阅节点程序(rostopic pub 类型 +格式 )

2.命令发布主题

     2.1 如何快速用命令发布主题

          个人觉得主要是掌握 rostopic pub 的概念和觉快捷键及一些注意事项

     2.2 要掌握的知识 命令格式  rostopic pub /topic type []

rostopic pub 
Usage: rostopic pub /topic type [args...]

rostopic: error: /topic must be specified

         

   在终端中输入rostopic pub 回车即可,查看

如果您在百忙连 ‘pub’ 参数也忘记了,至少要记得 ‘rostopic ’

  在终端中输入 rostopic 回车 查看命令

dltc@dltc-IdeaCentre-GeekPro-14IOB:~$ rostopic 
rostopic is a command-line tool for printing information about ROS Topics.

Commands:
	rostopic bw	display bandwidth used by topic
	rostopic delay	display delay of topic from timestamp in header
	rostopic echo	print messages to screen
	rostopic find	find topics by type
	rostopic hz	display publishing rate of topic    
	rostopic info	print information about active topic
	rostopic list	list active topics
	rostopic pub	publish data to topic
	rostopic type	print topic or field type

Type rostopic <command> -h for more detailed usage, e.g. 'rostopic echo -h'

    

找到 rostopic pub  pulisth data to topic   然后再执行 ‘rostopic pub ’ 回车 查看 发布命令的格式

2.3 要掌握的快捷键  ‘Tab’

    

      在 2.2 章节中 ‘rostopic pub  /topic  type ’ 中 我们知道基本格式,但是还有有点 懵懂,无法急速行军,这时,我们需要知道自己的主题名称,并且之前与协同同事也约定了 主题类型 即type

 如: std_msgs/String

那么我们的命令是:  rostopic pub /handcmd      std_msgs/String  后面输入什么 ? 暂时不知道,只能网上搜索? 然后网上的知识也不全,影响自己的效率

 此时 只需要 按一下 'Tab' 键 即可:

rostopic pub /handcmd std_msgs/String

  再按一次 'Tab'

rostopic pub /handcmd std_msgs/String "data: ''" 

例如:我的字符串为json字符串  :{"name":"sim","leftspeed":0,"rightspeed":0,"rightcp":0}

则拼成:

rostopic pub /handcmd      std_msgs/String "data: '{"name":"sim","leftspeed":0,"rightspeed":0,"rightcp":0}'" 

回车

查看结果

3.快捷命令发布主题

       rostopic pub /topic  type  一路 'Tab' 即可

4.如果你的ubuntu 不支持tab 补齐 请参考

   

如果需要更改默认的Tab键设置,可以通过修改bash配置文件(~/.bashrc)来实现。打开该文件并添加以下代码:
# Enable bash completion in all interactive shells.
if ! shopt -oq posix; then
    if [ -f /usr/share/bash-completion/bash_completion ]; then
        . /usr/share/bash-completion/bash_completion
    elif [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
    fi
fi

    一般系统都会自带上面的代码,把的注解放开即可。如果是二手三手系统,其他要删除了 就从新系统或网搜索贴回去即可,重启或用sudo 让其生效即可。

5.提高

    topic type 很多 请多学习,但是 以 “熟” 打‘生’  渐入佳境的方式 就是 通过 tab 操作

      

 1.std _ msgs

该类型是 ROS 内置的标准消息类型,是最基础的消息类型

ROS Message Types

        Bool

        Byte

        ByteMultiArray

        Char

        ColorRGBA

        Duration

        Empty

        Float32

        Float32MultiArray

        Float64

        Float64MultiArray

        Header

    #高级戳记数据类型的标准元数据。
    #这通常用于通信时间戳数据
    #在特定的坐标系中。
    uint32 seq序列号
    time stamp时间戳
    string frame_id参考坐标系 

        Int16

        Int16MultiArray

        Int32

        Int32MultiArray

        Int64

        Int64MultiArray

        Int8

        Int8MultiArray

        MultiArrayDimension

        MultiArrayLayout

        String

        Time

        UInt16

        UInt16MultiArray

        UInt32

        UInt32MultiArray

        UInt64

        UInt64MultiArray

        UInt8

        UInt8MultiArray

2.geometry_msgs

主要包含一些与机器人运动控制和定位姿态相关的消息类型

ROS Message Types

        Accel

        AccelStamped

        AccelWithCovariance

        AccelWithCovarianceStamped

        Inertia

        InertiaStamped

        Point

    #这包含了一个点在自由空间中的位置
    float64 x
    float64 y
    float64 z
    //一般情况下推荐使用point类型,也就是64位的定义方式,可以促进互操作性(可能ros中大多数函数的接口是用64位定义的) 

        Point32

    #这包含了一个点在自由空间中的位置(32位精度)。
    #建议尽可能使用Point,而不是Point32。
    #这个建议是为了促进互操作性。
    #此消息的设计目的是在发送时占用更少的空间
    #譬如在有许多点(大规模点云)情况下使用Point32
    float32 x
    float32 y
    float32 z 

        PointStamped

    #这表示一个有参考坐标帧和时间戳的点
    std_msgs/Header header
    geometry_msgs/Point point 

        Polygon

        PolygonStamped

        Pose

    #自由空间中的姿态表示,由位置和方向组成。
    geometry_msgs/Point position
    geometry_msgs/Quaternion orientation 

        Pose2D

    #这表示了一个2D流形上的位置和方向。
    #弃用,请使用完整的3D姿势
    #一般来说,我们的建议是使用所有内容的完整3D表示,对于2D特定应用程序,在平面上进行适当的投影以进行计算,但最好在处理过程中保留3D信息。(主要原因在于当使用两种接口去实现内容的时候,3D可以转2D,但2D无法转3D)
    float64 x
    float64 y
    float64 theta 

        PoseArray

    #一个带有全局引用头的姿势数组。
    std_msgs/Header header
    geometry_msgs/Pose[] poses 

        PoseStamped

    #一个带有参考坐标帧和时间戳的位姿
    std_msgs/Header header
    geometry_msgs/Pose pose 

        PoseWithCovariance

    #这代表了一个不确定的自由空间中的位姿。
    # 6x6协方差矩阵的行主序表示
    #方向参数使用固定轴表示。
    #参数依次为:
    # (x, y, z,绕x轴旋转,绕y轴旋转,绕z轴旋转)
    geometry_msgs/Pose pose
    float64[36] covariance 

        PoseWithCovarianceStamped

    #这表示一个带有参考坐标帧和时间戳的估计的位姿
    std_msgs/Header header
    geometry_msgs/PoseWithCovariance pose 

        Quaternion

    #这表示一个四元数形式的自由空间方向。
    float64 x
    float64 y
    float64 z
    float64 w 

        QuaternionStamped

    #这表示一个带有参考坐标帧和时间戳的方向。
    std_msgs/Header header
    geometry_msgs/Quaternion quaternion 

        Transform

    #这表示了自由空间中两个坐标系之间的变换。
    geometry_msgs/Vector3 translation
    geometry_msgs/Quaternion rotation 

        TransformStamped

    #这代表了父级坐标系id到子级坐标系id之间的变换。
    #此消息主要被用于tf包。
    std_msgs/Header header
    string child_frame_id
    geometry_msgs/Transform transform 

        Twist

    #这表示自由空间中的速度,分解成线性部分和角部分。
    geometry_msgs/Vector3 linear
    geometry_msgs/Vector3 angular 

        TwistStamped

    #带有参考坐标帧和时间戳的速度
    std_msgs/Header header
    geometry_msgs/Twist twist 

        TwistWithCovariance

    #这表示在不确定的自由空间中的速度
    #6x6协方差矩阵的行主序表示
    #方向参数使用固定轴表示。
    #参数依次为:
    # (x, y, z,绕x轴旋转,绕y轴旋转,绕z轴旋转)
    geometry_msgs/Twist twist
    float64[36] covariance 

        TwistWithCovarianceStamped

    #这表示一个带有参考坐标帧和时间戳估计的速度。
    std_msgs/Header header
    geometry_msgs/TwistWithCovariance twist 

        Vector3

    #表示自由空间中的向量。
    #它只是代表一个方向。因此,它没有有意义的应用一个转换到它(例如,当应用一个通用刚性转换到Vector3, tf2将只应用旋转)。如果希望数据也是可转换的,请使用 geometry_msgs/Point消息代替。
    float64 x
    float64 y
    float64 z 

        Vector3Stamped

    #这表示了一个参考坐标帧和时间戳的Vector3
    std_msgs/Header header
    geometry_msgs/Vector3 vecto 

        Wrench

        WrenchStamped

3.nav_msg

主要包含一些与导航相关的消息类型

ROS Message Types

        GridCells

    # 2D网格中的单元格数组
    std_msgs/Header header
    float32 cell_width
    float32 cell_height
    geometry_msgs/Point[] cells 

        MapMetaData

    #这包含了关于占据网格特征的基本信息
    #加载地图的时间
    #地图分辨率[m/cell]
    #地图的宽度
    #地图的高度
    #地图的起始[m, m, rad]。这是在地图中 cell (0,0)真实世界的位姿
    time map_load_time
    float32 resolution
    uint32 width
    uint32 height
    geometry_msgs/Pose origin 

        OccupancyGrid

    #这表示一个2D网格地图,其中每个单元格代表占据的概率
    #头信息
    #地图元数据
    #地图数据,以行主序优先,从(0,0)开始。占据概率在[0,100]范围内。未知是-1。
    std_msgs/Header header
    nav_msgs/MapMetaData info
    int8[] data 

        Odometry

    #这表示在自由空间中的位置和速度的估计。
    #这条消息中的Pose应该在header.frame_id给出的坐标帧中指定。
    #该消息中的twist应该在child_frame_id给出的坐标帧中指定
    std_msgs/Header header
    string child_frame_id
    geometry_msgs/PoseWithCovariance pose
    geometry_msgs/TwistWithCovariance twist 

        Path

    #一个位姿数组,表示机器人要遵循的路径
    std_msgs/Header header
    geometry_msgs/PoseStamped[] poses 

ROS Service Types

        GetMap

        GetPlan

        LoadMap

        SetMap

ROS Action Types

        GetMap

4.sensor_msgs

主要包含一些与传感器信息读取相关的消息类

ROS Message Types

        BatteryState

        CameraInfo

        ChannelFloat32

    #这个消息被PointCloud消息用来保存可选数据,与云中的每个点相关联。数组values的长度应该与点云中点的数组的长度相同,values中每个值与点云中一个点相对应。
    目前常见的通道名称包括
    "u", "v":图像的行列
    "rgb":uint8(R, G, B),共24bits;
    "intensity":激光或者像素密度
    "distance":距离
    通道名称应该给出通道具体的语义,如 "intensity密度" 而不是 "value值".
    string name
    float32[] values 

        CompressedImage

        FluidPressure

        Illuminance

        Image

        Imu

    #这是一个从IMU(惯性测量单元)保存数据的消息
    #加速度应该是m/s^2(不是g’s),旋转速度应该是rad/sec
    #如果测量的协方差是已知的,它应该被填写(如果你所知道的只是每次测量的方差,例如从数据表中,只需将它们沿对角线放置)
    #一个全为0的协方差矩阵将被解释为“协方差未知”,并要使用这个协方差数据,那么必须假设或从其他来源获得。
    #如果你没有对其中一个数据元素的估计(例如,你的IMU没有产生一个方向估计),请将相关协方差矩阵的元素0设置为-1
    #如果您正在解释此消息,请检查每个协方差矩阵的第一个元素的值是否为-1,并忽略相关的估计。
    std_msgs/Header header
    geometry_msgs/Quaternion orientation
    float64[9] orientation_covariance
    geometry_msgs/Vector3 angular_velocity
    float64[9] angular_velocity_covariance
    geometry_msgs/Vector3 linear_acceleration
    float64[9] linear_acceleration_covariance 

        JointState

        Joy

        JoyFeedback

        JoyFeedbackArray

        LaserEcho

        LaserScan

    #平面激光测距仪单次扫描
    #如果你有另一个具有不同行为的测距设备(例如声纳# array),请找到或创建一个不同的消息,因为应用程序将对这些数据做出相当精确的假设
    std_msgs/Header header#头部的时间戳是扫描中第一条射线的获取时间。
    float32 angle_min#扫描起始角度[rad]
    float32 angle_max#扫描结束角度[rad]
    float32 angle_increment#测量之间的角度步长[rad]
    float32 time_increment#测量间隔时间步长[秒]-如果您的扫描仪正在移动,这将用于3d点的插值位置
    float32 scan_time#扫描间隔时间[秒]
    float32 range_min#最小范围[m]
    float32 range_max#最大范围[m]
    float32[] ranges#范围数据[m](注意:值< range_min或> range_max应被丢弃)
    float32[] intensities#密度数据[设备特定的单位]。如果你的设备不提供密度,请离开空数组。(这个具体不太清楚) 

        MagneticField

        MultiDOFJointState

        MultiEchoLaserScan

        NavSatFix

        NavSatStatus

        PointCloud

    #这个消息包含一个3d点的集合,加上可选的附加关于每个点的信息。
    #传感器数据采集时间,坐标帧ID。
    # 3d点数组每个Point32应该被解释为一个3d点(在头文件中给定的帧中)。
    #每个通道应该有相同数量的元素点数组,每个通道中的数据应与每个点1:1对应。常用的通道名称在ChannelFloat32.msg中列出。
    std_msgs/Header header
    geometry_msgs/Point32[] points
    sensor_msgs/ChannelFloat32[] channels 

        PointCloud2

    #该消息包含一个n维点的集合,其中可能包含额外的信息,如法线、强度等。点数据存储为二进制blob,其布局由“fields”数组的内容描述。
    点云数据可以被组织为2d(类似图像)或1d(无序)。组织为2d图像的点云可以由相机深度传感器如立体声或飞行时间产生。
    #传感器数据采集时间,坐标帧ID (3d点)。
    std_msgs/Header header
    #点云的2D结构。如果云是无序的,高度为1,宽度为点云的长度。
    uint32 height
    uint32 width
    #描述通道及其在二进制数据blob中的布局。
    sensor_msgs/PointField[] fields
    bool is_bigendian#这个数据是双端数据吗?
    uint32 point_step#点的长度(以字节为单位)
    uint32 row_step#一行长度(以字节为单位)
    uint8[] data#实际的点数据,大小为(row_step*height)
    bool is_dense如果没有无效点则为True 

        PointField

    #该消息以PointCloud2消息格式保存了一个点条目的描述。
    uint8 INT8=1
    uint8 UINT8=2
    uint8 INT16=3
    uint8 UINT16=4
    uint8 INT32=5
    uint8 UINT32=6
    uint8 FLOAT32=7
    uint8 FLOAT64=8
    string name#字段名称
    uint32 offset#从点结构开始的偏移量
    uint8 datatype#数据类型枚举,参见上面
    uint32 count#字段中有多少元素 

        Range

        RegionOfInterest

        RelativeHumidity

        Temperature

        TimeReference

ROS Service Types

        SetCameraInfo

6.总结

     在此备忘,同时希望也能够百忙提高一下其它兄弟的工作效率,如果写的不对的地方请指出,及时修正,谢谢!

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值