从零搭建ros间的通信,各功能包、节点之间的通信

新建消息类型

catkin_create_pkg car_interfaces roscpp rospy std_msgs message_generation message_runtime

书写自定义的msg:
比如我写一个GlobalPathPlanningInterface.msg:

float64  timestamp  #时间戳
float32[]  startpoint   #起点位置,先经后纬
float32[]   endpoint    #终点位置,先经后纬
float32[]   routedata   #路径集合(所有途径点的集合)
float32  process_time    # 进程处理时间

接着再处理编译文件CMakeLists.txt:

add_message_files(
  FILES
  GlobalPathPlanningInterface.msg
  # Message2.msg
)


generate_messages(
  DEPENDENCIES
  std_msgs  
)


catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES car_interfaces
  CATKIN_DEPENDS message_generation message_runtime roscpp rospy std_msgs
#  DEPENDS system_lib
)

修改package.xml文件:
添加上:

  <build_depend>message_runtime</build_depend>
  <exec_depend>message_generation</exec_depend>

这样就定义好了。
rosmsg show msg包/msg类型
从零搭建ros间的通信,各功能包、节点之间的通信_第1张图片

新建一个功能包

catkin_create_pkg planning roscpp rospy std_msgs
catkin_make # 编译一次即可
接着就能直接新建py写了,比cpp简单太多了。

global_path_planning.py文件:

#!/usr/bin/env python3
#coding=utf-8

import rospy
from car_interfaces.msg import GlobalPathPlanningInterface


if __name__ == "__main__":
    rospy.init_node("chao_node")  # 节点名称
    rospy.logwarn("我的枪去而复返")

    pub = rospy.Publisher("global_path_planning_data", GlobalPathPlanningInterface, queue_size = 10) # 话题名称

    rate = rospy.Rate(10)

    while not rospy.is_shutdown():
        rospy.loginfo("我要开始刷屏了")  #发一次显示一个,不是实际的消息,只是一个info
        msg = GlobalPathPlanningInterface()
        msg.timestamp = 2.7
        msg.startoint = [1.0, 2.0, 3.0]
        msg.endpoint = []
        msg.routedata = []
        msg.process_time = 3.1
        
        pub.publish(msg)
        rate.sleep()

注意
(这样的话其实也可以直接再创建的时候添加,就不用改这两个文件了)

catkin_create_pkg self_start roscpp rospy std_msgs car_interfaces

如果没有动car_interfaces,那就添加就好了
修改CMakeLists.txt:
find_package:
增加car_interfaces

修改package.xml:
car_interfaces
car_interfaces
测试效果还可以
从零搭建ros间的通信,各功能包、节点之间的通信_第2张图片

你可能感兴趣的:(机器人,python)