精华内容
下载资源
问答
  • ROS通信

    2019-12-16 16:45:58
    Topic通信方式: 异步:只管发或者只管收。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • Topic通信方式:
      异步:只管发或者只管收。
    展开全文
  • 安卓与ROS通信开发——1、安卓与ROS通信的现状 概述概述概述 安卓与ROS通信的现状 ROS官方支持的语言绑定只有C++和Python,目前安卓想与ROS通信,必须借助半官方的rosjava包。 rosjava话题通信机制(Publish/...

    安卓与ROS通信开发——1、安卓与ROS通信的现状

    概述概述概述

    安卓与ROS通信的现状

    ROS官方支持的语言绑定只有C++和Python,目前安卓想与ROS通信,必须借助半官方的rosjava包

    rosjava话题通信机制(Publish/Subscribe)

    rosjava和C++/Python一样,是一个全功能、大体量的ROS绑定,即可以在Java(android)平台上创建Master Node,然后其他Node(C++/Python)可以连上这个Master,进行分布式通信。
    rosjava的gradle脚本较为复杂,将其集成到自己项目的android工程难度较大。

    rosbridge服务通信机制(Client/Server)

    rosbridge协议,该协议的基本思想是将节点间的分布式通信,改成client节点与一个代理节点进行C/S通信,然后代理节点再将请求转发给server节点,这样移动端就不需要实现整个ROS平台通信,三只需要跟代理节点通信即可。
    注:移动平台无法做server节点,但轻量化。

    ![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTc1ODc5OS8xNTk0Nzk1NTEyNTgwLWY5NjM0NDAwLWVjNzYtNDViZC05Njg2LWVhMDg0YmQzOTIxZS5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=610&margin=[object Object]&name=image.png&originHeight=610&originWidth=1152&size=294237&status=done&style=none&width=1152)

    相关ROS包的跨平台特性

    ![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTc1ODc5OS8xNTk0Nzk1NTU3NDExLWNlNWM3MzQ5LTA3M2QtNDE0MC05MWNmLTM4MzQ2OTdlMzY0Ni5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=788&margin=[object Object]&name=image.png&originHeight=788&originWidth=1196&size=106399&status=done&style=none&width=1196)
    rosjava/rosbridge 均能满足x86架构设备(工控机/ROS系统)与ARM-A架构设备(安卓设备)通讯。
    ![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTc1ODc5OS8xNTk0Nzk2MjA4NDIzLWY3YjRjN2UxLWVlNTYtNDEyMC1iMjQzLWM0Njg5OGY3YzMzNS5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=359&margin=[object Object]&name=image.png&originHeight=359&originWidth=1163&size=434378&status=done&style=none&width=1163)
    ROSBridge:在安卓系统使用指定数据内容的基于JSON(或BSON)格式的网络请求(ROSBridge支持TCP、UDP、WebSocket三种网络通讯方式)来调用ROS的功能。

    rosjava ros包安装:
    http://wiki.ros.org/rosjava/Tutorials/kinetic/Source%20Installation
    (官方仅提供kinetic版本安装,暂不支持melodic版本ROS)

    展开全文
  • ROS通信

    ROS通信

    展开全文
  • ROS通信编程

    2021-03-17 10:02:22
    ROS通信编程 文章目录ROS通信编程创建工作区间 创建工作区间 工作空间是一个存放工程开发相关文件的文件夹。包含: src:代码空间(Source Space) build:编译空间(Build Space) devel:开发空间(Development Space) ...

    ROS通信编程

    创建工作区间

    创建工作区间

    工作空间是一个存放工程开发相关文件的文件夹。包含:
    src:代码空间(Source Space)
    build:编译空间(Build Space)
    devel:开发空间(Development Space)
    install:安装空间

    1.创建工作区间 使用命令mkdir -p ~/catkin_ws/srccd ~/catkin_ws/src;catkin_ws_init_workspace
    在这里插入图片描述
    2.编译工作空间 使用命令cd ~/catkin_ws/;catkin_make
    在这里插入图片描述
    3.设置环境变量 使用命令source devel/setup.bash
    4.检查环境变量 使用命令echo $ROS_PACKAGE_PATH
    在这里插入图片描述

    创建功能包

    1.创建功能包 命令cd ~/catkin_ws/src;catkin_create_pkg learning_communication std_msgs rospy roscpp
    在这里插入图片描述
    2.编译功能包 命令cd ~/catkin_ws;catkin_make;
    在这里插入图片描述
    source ~/catkin_ws/devel/setup.bash
    在这里插入图片描述
    同一个工作空间下,不允许存在同名功能包;不同工作空间下,允许存在同名功能包
    3.查看ROS相关的环境变量env | grep ros
    在这里插入图片描述

    ROS通信编程

    话题编程

    话题编程流程

    1. 创建发布者
    2. 创建订阅者
    3. 添加编译选项
    4. 运行可执行程序
    1. 在功能包learning_communication的src文件夹编辑下发布者代码talker.cpp
    #include<sstream>
    #include"ros/ros.h"
    #include"std_msgs/String.h"
    int main(int argc,char **argv)
    {
    	//ROS节点初始化
    	ros::init(argc,argv,"talker");
    	//创建节点句柄
    	ros::NodeHandle n;
    	//创建一个Publisher,发布名为chatter的topic,消息类型为std_msgs::String
    	ros::Publisher chatter_pub=n.advertise<std_msgs::String>("chatter",1000);
    	//设置循环的频率
    	ros::Rate loop_rate(10);
    	int count=0;
    	while(ros::ok())
    	{
    		//初始化std_msgs::String类型的消息
    		std_msgs::String msg;
    		std::stringstream ss;
    		ss<<"hello world"<<count;
    		msg.data=ss.str();
    		//发布消息
    		ROS_INFO("%s",msg.data.c_str());
    		chatter_pub.publish(msg);
    		//循环等待回调函数
    		ros::spinOnce();
    		//接受循环频率延时
    		loop_rate.sleep();
    		++count;
    	}
    	return 0;
    }
    
    

    与订阅者代码listener.cpp

    #include"ros/ros.h"
    #include"std_msgs/String.h"
    //接收到订阅的消息,会进入消息的回调函数
    void chatterCallback(const std_msgs::String::ConstPtr& msg)
    {
    	//将接收到的消息打印处理
    	ROS_INFO("I heard:{%s}",msg->data.c_str());
    }
    int main(int argc,char **argv)
    {
    	//初始化ROS节点
    	ros::init(argc,argv,"listener");
    	//创建节点句柄
    	ros::NodeHandle n;
    	//创建一个Subscriber,订阅名为chatter的topic,注册回调函数chatterCallback
    	ros::Subscriber sub=n.subscribe("chatter",1000,chatterCallback);
    	//循环等待回调函数
    	ros::spin();
    	return 0;
    }
    
    
    1. 在learning_communication的cmakelist中设置编译选项。
      在这里插入图片描述
      3.编译,命令catkin_make
      在这里插入图片描述
      编译完成
      在这里插入图片描述

    2. 运行结果,打开三个终端分别输入以下三个命令

    注意:这里可能会有报错 rospack Error :package ‘learning_communication’ not found 是因为bashrc里没有这个路径
    解决方法:输入命令gedit ~/.bashrc,在文件的末尾加上source /home/你的用户名/catkin_ws/devel/setup.bash
    在这里插入图片描述

    roscore
    在这里插入图片描述

    rosrun learning_communication talker
    在这里插入图片描述

    rosrun learning_communication listener
    在这里插入图片描述
    停止:在每一个终端输入Ctrl+c就会停止。

    自定义话题消息

    1. 定义msg文件;使用命令
      cd src/learnning_communication;mkdir msg;sudo vim Person.msg
      在这里插入图片描述
    2. 在package.xml中添加功能包依赖,在一些较低的版本中可能需要把exec_depend修改为run_depend.
      在这里插入图片描述
    3. 在CMakeList.txt添加编译选项
      在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    编译catkin_make,编译完成如图所示
    在这里插入图片描述
    查看自定义消息rosmsg show Person
    在这里插入图片描述

    服务编程

    服务编程流程

    1. 创建服务器
    2. 创建客户端
    3. 添加编译选项
    4. 运行可执行程序

    创建一个srv文件夹,并在里面创建一个AddTwoInts.srv文件
    在这里插入图片描述
    在文件中添加如下内容

    int64 a
    int64 b
    ---
    int64 sum
    

    添加功能包依赖

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

    在learning_communication的src文件夹下新建client.cpp与server.cpp并复制以下内容
    client.cpp

    #include<cstdlib>
    #include<ros/ros.h>
    #include"learning_communication/AddTwoInts.h"
    int main(int argc,char **argv)
    {
    	//ROS节点初始化
    	ros::init(argc,argv,"add_two_ints_client");
    	//从终端命令行获取两个加数
    	if(argc!=3)
    	{
    		ROS_INFO("usage:add_two_ints_client X Y");
    		return 1;
    	}
    	//创建节点句柄
    	ros::NodeHandle n;
    	//创建一个client,请求add_two_ints_service
    	//service消息类型是learning_communication::AddTwoInts
    	ros::ServiceClient client=n.serviceClient<learning_communication::AddTwoInts>("add_two_ints");
    	//创建learning_communication::AddTwoInts类型的service消息
    	learning_communication::AddTwoInts srv;
    	srv.request.a=atoll(argv[1]);
    	srv.request.b=atoll(argv[2]);
    	//发布service请求,等待加法运算的应答请求
    	if(client.call(srv))
    	{
    		ROS_INFO("sum: %1d",(long int)srv.response.sum);
    	}
    	else
    	{
    		ROS_INFO("Failed to call service add_two_ints");
    		return 1;
    	}
    	return 0;
    }
    

    server.cpp

    #include<ros/ros.h>
    #include"learning_communication/AddTwoInts.h"
    //service回调函数,输入参数req,输出参数res
    bool add(learning_communication::AddTwoInts::Request &req,learning_communication::AddTwoInts::Response &res)
    {
    	//将输入的参数中的请求数据相加,结果放到应答变量中
    	res.sum=req.a+req.b;
    	ROS_INFO("request: x=%1d,y=%1d",(long int)req.a,(long int)req.b);
    	ROS_INFO("sending back response:[%1d]",(long int)res.sum);
    	return true;
    }
    int main(int argc,char **argv)
    {
    	//ROS节点初始化
    	ros::init(argc,argv,"add_two_ints_server");
    	//创建节点句柄
    	ros::NodeHandle n;
    	//创建一个名为add_two_ints的server,注册回调函数add()
    	ros::ServiceServer service=n.advertiseService("add_two_ints",add);
    	//循环等待回调函数
    	ROS_INFO("Ready to add two ints.");
    	ros::spin();
    	return 0;
    }
    
    

    在Cmakelists.txt中加入新的编译项
    在这里插入图片描述
    在这里插入图片描述

    编译完成后
    在这里插入图片描述
    编译过程会出现一些警告对结果没有影响
    运行可执行文件 命令roscore;rosrun learning_communication server //需要放在client前面执行;
    rosrun learning_communication client 整数 整数
    在这里插入图片描述
    客户端结果
    在这里插入图片描述

    动作编程

    什么是动作
    一种问答通信机制
    带有连续反馈
    可以在任务过程终止运行
    基于ROS的消息机制实现

    Action的接口
    goal:发布任务目标
    cancel 请求取消任务;
    status 通知客户端当前的状态
    feedback周期反馈任务运行的监控数据
    result 向客户端发送任务执行结果,只发布一次。

    代码实现步骤:
    1.建立action文件夹以及action文件DoDishes.action
    DoDishes.action

    uint32 dishwasher_id
    # Specify which dishwasher we want to use
    ---
    #结果
    uint32 total_dishes_cleaned
    ---
    float32 percent_complete
    
    

    在package.xml中添加功能包依赖
    在这里插入图片描述

    CMakeLists.txt修改
    在这里插入图片描述
    在这里插入图片描述
    编写动作服务器端与客户端的代码
    DoDishes_server.cpp

    #include "ros/ros.h"
    #include "actionlib/server/simple_action_server.h"
    #include "learning_communication/DoDishesAction.h"
    typedef actionlib::SimpleActionServer<learning_communication::DoDishesAction> Server;
    // 收到action的goal后调用该回调函数
    void execute(const learning_communication::DoDishesGoalConstPtr &goal, Server *as)
    {
    	ros::Rate r(1);
    	learning_communication::DoDishesFeedback feedback;
    	ROS_INFO("Dishwasher %d is working.", goal->dishwasher_id);
    	// 假设洗盘子的进度,并且按照1Hz的频率发布进度feedback 
    	for(int i = 1; i <= 10; i++)
    	{
    		feedback.percent_complete = i * 10;
    		as->publishFeedback(feedback);
    		r.sleep();
    	}	
    	// 当action完成后,向客户端返回结果
    	ROS_INFO("Dishwasher %d finish working.", goal->dishwasher_id);
    	as->setSucceeded();
    }
    int main(int argc, char **argv)
    {
    	ros::init(argc, argv, "do_dishes_server");
    	ros::NodeHandle hNode;
    	// 定义一个服务器
    	Server server(hNode, "do_dishes", boost::bind(&execute, _1, &server), false);
    	// 服务器开始运行
    	server.start();
    	ros::spin();
    	return 0;
    }
    
    

    DoDishes_client.cpp

    #include "ros/ros.h"
    #include "actionlib/client/simple_action_client.h"
    #include "learning_communication/DoDishesAction.h"
    typedef actionlib::SimpleActionClient<learning_communication::DoDishesAction> Client;
    // 当action完成后会调用该回调函数一次
    void doneCallback(const actionlib::SimpleClientGoalState &state
    	, const learning_communication::DoDishesResultConstPtr &result)
    {
    	ROS_INFO("Yay! The dishes are now clean");
    	ros::shutdown();
    }
    // 当action激活后会调用该回调函数一次
    void activeCallback()
    {
    	ROS_INFO("Goal just went active");
    }
    // 收到feedback后调用该回调函数
    void feedbackCallback(const learning_communication::DoDishesFeedbackConstPtr &feedback)
    {
    	ROS_INFO("percent_complete : %f", feedback->percent_complete);
    }
    int main(int argc, char **argv)
    {
    	ros::init(argc, argv, "do_dishes_client");
    	// 定义一个客户端
    	Client client("do_dishes", true);
    	// 等待服务器端
    	ROS_INFO("Waiting for action server to start.");
    	client.waitForServer();
    	ROS_INFO("Action server started, sending goal.");
    	// 创建一个 action 的 goal
    	learning_communication::DoDishesGoal goal;
    	goal.dishwasher_id = 1;
    	// 发送action的goal给服务端,并且设置回调函数
    	client.sendGoal(goal, &doneCallback, &activeCallback, &feedbackCallback);
    	ros::spin();
    	return 0;
    }
    
    

    在CMakeLists.txt添加新的编译项
    在这里插入图片描述
    编译完成,警告可忽略
    在这里插入图片描述
    运行代码命令

    roscore
    rosrun learn_communication DoDishes_server
    rosrun learn_communication DoDishes_client
    

    客户端执行结果
    在这里插入图片描述
    服务器端执行结果
    在这里插入图片描述

    参考文档
    无法查找功能包路径
    package not found原因
    参考文档

    展开全文
  • ROS通信架构

    2019-04-20 17:12:07
    ROS通信架构 1.图概念概述 Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。 Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。 topics:话题,节点可以发布消息到话题...
  • ROS通信机制
  • tello_ros 用C ++编写的DJI Ryze Tello ROS通信API
  • 4 ROS通信架构 4.1 启动master和node 4.1.1启动master : roscore 4.1.2 启动node : rosrun, roslaunch 4.1.3 rosnode命令 4.2 ROS的通信方式 4.2.1 Topic 4.2.2 Service 4.2.3 Parameter server 4.2.4 ...
  • ros通信机制整理

    2019-09-18 23:04:24
    ros通信机制分为话题,服务和参数三部分,本文把动作action也列入其中,主要介绍话题topic,服务server和动作action:
  • 自从window系统顺利安装ROS系统之后,小海龟顺利跑起来,就面临Ubuntu系统和windows系统上的ROS通信问题。这个问题卡了很久,就在今天上午,在实验室强哥的帮助下,这个问题终于解决。 查了很多博客,对这个问题,并...
  • ROS通信架构及其弊端

    2019-06-29 11:27:45
    ROS通信架构及其弊端 严格来讲ROS并非是一种操作系统,它只是一种通信框架,一种基于消息传递通信的分布式多进程框架。ROS的主要组成包括ROS Mastar 、 ROS Node、ROS Service等。不同的功能可以由不同的节点实现,...
  • ROS通信架构(下)

    2020-05-07 10:32:00
    ROS通信架构(下) 徐凯_xp 0.3832019.05.02 19:24:46字数 1,895阅读 261 将继续介绍ROS通信方式中的service、parameter server、actionlib。 Topic是ROS中的一种单向的异步通信方式。然而有些时候单向的通信满足...
  • ROS入门 第 3 章 ROS通信机制进阶 《ROS入门-理论与实践》视频教程镇楼 上一章内容,主要介绍了ROS通信的实现,内容偏向于粗粒度的通信框架的讲解,没有详细介绍涉及的API,也没有封装代码,鉴于此,本章主要内容...
  • 于是想先找点眼前马上能用的着东西来实验一下,串口无疑是最合适的,来个ROS串口通信,就简单的跟单片机通通信也是不错的,反正其他难的也还做不了;当然之前看的资料也没白看,系统安装、基本概念、基本操作都得...
  • ROS学习笔记(八): ROS通信架构 文章目录01 Node & Master1.1 Node1.2 Master1.3 启动master和node1.4 rosrun和rosnode命令02 launch文件2.1 简介2.2 写法与格式2.3 示例小结03 Topic(话题)3.1 简介3.2 ...
  • ROS通信架构(四) ROS的通信方式有以下四种: Topic 主题 Service 服务 Parameter Service 参数服务器 Actionlib 动作库 Actionlib actionlib是ROS中的一个库,也是请求响应机制的通信方式(类似service),主要...
  • ROS通信机制 ROS通信机制概述 ROS通信机制的概念 ROS的核心功能是提供一种软件点对点通信机制。ROS的运行架构是基于Socket网络连接的松耦合架构(后面讲的TCP和UDP包括Http协议还有XMLRPC协议最底层都是基于Socket...
  • 第 2 章 ROS通信机制

    2021-02-25 18:34:51
    ROS入门学习 第 2 章 ROS通信机制 机器人是一种高度复杂的系统性实现,在机器人上可能集成各种传感器(雷达、摄像头、GPS…)以及运动控制实现,为了解耦合,在ROS中每一个功能点都是一个单独的进程,每一个进程都是...
  • 目录一、实验准备二、创建工作空间三、ROS通信编程1.话题通信2.服务通信3.动作通信四、参考 一、实验准备 实验要求: 学习古月居ROS教学课件和相关视频,练习课件上的话题通信、服务通信编程代码示例 实验环境: ...
  • ROS通信编程(三)

    千次阅读 2018-08-14 13:35:11
    ROS通信编程 ros通信编程三大内容:话题编程(topic)、服务编程(service)、动作编程(action) ROS通信编程——话题编程 如何运行文件  rosrun learning_communication talker  ...
  • Part2 -- ROS通信框架

    2021-03-06 11:55:01
    ROS通信架构包括各种数据的处理,进程的运行,消息的传递等等,这是ROS正常运行的关键所在,也是ROS的灵魂。本文主要介绍通信架构的基础通信方式和相关概念,包括最小的进程单元节点Node,和节点管理器Node master,...
  • ROS通信架构(二) ROS的通信方式有以下四种: Topic 主题 Service 服务 Parameter Service 参数服务器 Actionlib 动作库 Topic: topic常用于传输实时性、周期性的消息,是一种点(node)对点的单向通信方式。 1....
  • 使用QT开发界面和ROS通信 环境:ubuntu18.04 +ROS Melodic,Qt使用qtcreator-ros-bionic-latest-offline-installer.run(集成了ROS插件,功能类似于Roboware,同时可以开发界面调用ROS),以下是项目地址,下载Qt安装包...
  • ROS通信架构(三) ROS的通信方式有以下四种: Topic 主题 Service 服务 Parameter Service 参数服务器 Actionlib 动作库 Service topic是单向异步通信方式,当一些节点只是临时而非周期性的需要某些数据,topic会...
  • 《一》ros通信的意义 在利用gazebo仿真时。我们可以利用gazebo的通信机制进行创建节点和发布消息。但是这只是在仿真平台实现。如果想要实际使用,就需要利用ros系统的通信机制对模型进行控制。这一节内容就是如果在...
  • ROS通信机制

    2020-10-31 23:59:38
    点对点的分布式通信机制是ROS的核心,使用了基于TCP/IP的通信方式,实现模块间点对点的松耦合连接,可以执行若干种类型的通信,包括基于话题(Topic)的异步数据流通信,基于服务(Service)的同步数据流通信,还有...
  • matlab ros 通信

    2019-11-19 22:32:23
    通信过程如果设置不当会出现,rosnode list下面可以看到matlab 的节点,但是从ros中发出的消息却不能读出data 如果rostopic echo topic名称 在ros下能输出,但是在matlab下面无法输出,则可以定位为通信问题,既然...
  • ROS通信解析

    2020-10-11 23:54:58
    ROS通信方式有以下四种: (1)Topic主题 (2)Service服务 (3)Parameter Service参数服务器 (4)Actionlib动作 主题Topic 发布publicer源码解析 //ROS头文件 #include <ros/ros.h> //自定义msg...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,405
精华内容 1,362
关键字:

ros通信