挑战一周学会ROS(第二天)
以小海龟为例查看话题列表rosnode list发布话题消息rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twistlinear:x:1.0y:0.0z:0.0angular:x:0.0y:0.0z:0.0发布服务请求rosservice call /spawn :x:5.0y:5.0theta:0.0name:turtle2话题记录rosbag record -a-O cmd_record话题复现rosbag play cmd_record.bag工作空间是一个存放工程开发相关文件的文件夹src代码空间build编译空间devel开发空间install安装空间创建工作空间mkdir -p ~/catkin_ws/srccd ~/catkin_ws/srccatkin_init_workspacecd ~/catkin_ws/catkin_makesource devel/setup.bashecho $ROS_PACKAGE_PATH如何实现一个发布者初始化ROS节点向ROS Master注册节点信息包括发布的话题名还有话题中的消息类型创建消息数据按照一定频率循环发布消息如何实现一个订阅者初始化ROS节点订阅需要的话题循环等待话题消息接收到消息后进入回调函数在回调函数中完成消息处理如何实现一个客户端初始化ROS节点创建一个Client实例发布服务请求数据等待Server处理之后的应答结果角色通信模式适用场景是否需要回复Publisher 发布者话题、持续流式广播传感器高频数据激光、图像、里程计、持续速度指令无回复单向发送Client 客户端服务、单次请求响应单次指令、状态查询、开关控制、带反馈操作必须等待服务端返回结果当你需要主动发起一次性任务、查询数据并且需要获取执行结果反馈时必须创建客户端Client虽然只会用到一个软件包里面的某个节点但是下载时候还是会把整个包都下载下来节点不能脱离包而单独存在创建Package软件包创建在~/catkin_ws/src文件夹里面catkin_create_pkg包名依赖项名 用catkin工具创建一个Package软件包rospy roscpp std_msgs 这三个为依赖包即通用项指令roscd 在终端中进入指定软件包的文件地址这个地址里面存放的全是ROS的Package包这些包的来源/opt/ros/ROS版本/share 软件包来源sudo apt-get install ros-ROS版本-desktop-full 基础包sudo apt-get install ros-ROS版本-xxx 独立扩展包而这些通过apt下载的这些软件包都是现成的可执行文件可以直接运行而catkin工作空间的软件包都是源码文件需要编译成可执行文件才能运行像这样成功编译下面运行第一个ros节点先启动roscore确定ROS核心处于运行状态终端执行 rosrun 包名 节点文件名恭喜你第一个node程序成功出现ctrl shift w 可以强制终止该终端欧克终于结束一个简单的Package 和node步骤大致如下1、使用catkin_create_pkg创建一个软件包2、在软件包的src文件夹下创建一个cpp源码文件3、在节点的源码文件中include包含ros的头文件4、构建一个main函数并在函数的开头执行ros::init()初始化5、构建while循环循环的条件为ros::ok()6、在CMakeLists.txt中设置节点源码的编译规则7、编译运行下面开始Topic话题还有Message消息ROS的主要通信方式在ROS中的众多节点是如何通讯的1、话题Topic是节点之间进行持续通讯消息在一直不停的发送接收的一种形式2、话题通讯的两个节点通过话题的名称建立起话题通讯连接3、话题中通讯的数据叫消息message)4、消息message通常会按照一定的频率持续不断的发送以保证消息数据的实时性5、消息的发送方叫做话题的发布者Publisher6、消息的接收方叫做话题的订阅者Subsciber补充一个ROS节点网络中可以同时存在多个话题一个话题可以多个发布者也可以有多个订阅者一个节点可以对多个话题进行订阅也可由发布多个话题不同的传感器消息通常会拥有各自独立话题名称每个话题只有一个发布者机器人速度指令话题通常会有多个发布者但是同一时间只能有一个发言人我们在生成消息包的时候通常有不同的类型调整发送频率发布一个话题和发送消息的操作小结1、确定话题名称和消息类型话题名称不能使用中文字符否则会报错2、在代码文件中include消息类型对应的头文件3、在mian函数中通过Nodehandler大管家发布一个话题并得到消息发送对象4、生成要发送的消息包并进行发送数据的赋值5、调用消息发送对象的publish()函数将消息包发送到话题当中常用指令rostopic list 列出当前系统中所有活跃着的话题rostopic echo 主题名称 显示指定话题中发送的消息包内容rostopic hz 主题名称 统计指定话题中消息包的发送频率检测一个话题是否有消息在发送以及发送的频率是否符合需求这样的话两者之间的话题通讯就算完成了话题订阅1、确定话题的名称和消息类型2、在代码文件中includeros.h和消息类型对应的头文件3、在main函数中通过NodeHandler大管家订阅一个话题并设置消息接收回调函数4、定义一个回调函数对接收到的消息包进行处理5、main函数中需要执行ros::spinOnce()让回调函数能够响应接收到的消息包常用工具rqt_graph图形化显示当前系统活跃的节点以及节点之间的话题通讯关系使用launch文件一次启动多个节点xml语法标记名称 属性名1属性值1 ...内容/标记名称