ROS学习篇第(六)篇:通信

2023-05-16

目录

  • 串口通信 ros-serial 包的使用
  • ROS分布式多机通信 ssh的使用
    • 1、目的
    • 2、关于SSR
    • 3、实现
    • 4、问题

串口通信 ros-serial 包的使用

  • 下载
	sudo apt-get install ros-melodic-serial  #ros为melodic版本

下载完查看以下 重启终端,输入以下命令可以检测到serial包的路径说明已经安装好:(路径为 opt/ros/indigo/share/serial)

	roscd serial
  • 程序
#include "ros/ros.h"  
#include <serial/serial.h>  
#include <std_msgs/String.h>  
#include "ros2stm32/data.h"           //自定义的数据类型头文件
#include <sstream>  

unsigned char speed_data[22]={0};   //要发给串口的数据
serial::Serial ros_ser;      //声明串口对象
// 接收到订阅的消息后,会进入消息回调函数
void chatterCallback(const ros2stm32::data::ConstPtr& msg)
{
   
   speed_data[0] = 0x55;
   ……
   speed_data[21]=0x55;
   
 	// 通过usb口写入
   ros_ser.flush ();
   ros_ser.write(speed_data,22);
   ROS_INFO_STREAM("\nSend date finished!\n");

   //通过usb口收到消息
   if(ros_ser.available()){ 
   	ROS_INFO_STREAM("Reading from serial port: "); 
   	std_msgs::String result; 
   	result.data = ros_ser.read(ros_ser.available()); 
   	ROS_INFO_STREAM("Read: " << result.data); 		
   }
}


int main (int argc, char** argv){

    ros::init(argc, argv, "data_listener");

    ros::NodeHandle n;

    try
    {
        ros_ser.setPort("/dev/ttyUSB0");//串口号可以修改
        ros_ser.setBaudrate(9600);
        serial::Timeout to = serial::Timeout::simpleTimeout(1000);
        ros_ser.setTimeout(to);
        ros_ser.open();
    }
    catch (serial::IOException& e)
    {
        ROS_ERROR_STREAM("Unable to open port ");
        return -1;
    }
    if(ros_ser.isOpen()){
        ROS_INFO_STREAM("Serial Port opened");
    }else{
        return -1;
    }
    ROS_INFO_STREAM("Init Finished!");

    // 创建一个Subscriber,订阅名为data_chatter的topic,注册回调函数chatterCallback 
    ros::Subscriber sub = n.subscribe("data_chatter", 1000, chatterCallback); 

    ros::spin();
}
  • 权限
    如果提示Unable to open port,是由于权限不够引起的,进行如下操作
  	sudo chmod 666 /dev/ttyUSB0

ROS分布式多机通信 ssh的使用

1、目的

实现一个:笔记本发送topic,树莓派(树莓派3B+)订阅topic,接收数据,控制机械臂,达成笔记本远程控制机械臂运动的效果。

2、关于SSR

SSH为Secure Shell的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。
SSH是目前可靠的,专为远程登录会话和其他网络服务提供安全性的协议。常用于远程登录,以及用户之间进行资料拷贝。利用SSH协议可以有效防止远程管理过程中的信息泄露问题
使用SSH服务,则两个机器都需要安装SSR

3、实现

  • 前提
    二者处于同一个局域网
  • 安装
    两台机子都需要安装openssh,直接
	sudo apt-get install openssh
  • 设置 ip 和 ~/.bashrc 文件
     1、先找两台机子的IP地址:
zyf@zyf-TM1707:~/chuankou$ ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (本地环回)
        RX packets 7252  bytes 789872 (789.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7252  bytes 789872 (789.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
wlp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.104  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::def0:b93b:962f:9b9c  prefixlen 64  scopeid 0x20<link>
        ether c0:b6:f9:8a:64:d9  txqueuelen 1000  (以太网)
        RX packets 32666  bytes 29085588 (29.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 23644  bytes 4418820 (4.4 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

无线网下的ip就是在wlp3s0下的inet
 2、分别了解了之后,需要在两台机子上的/etc/hosts文件加入对方的IP地址和对应的计算机名字
举例如下:

zyf@zyf-TM1707:~$ sudo gedit /etc/hosts

格式: 工控机的局域网地址 工控机的用户名
笔记本这里放工控机的地址和用户名192.168.1.105 ahong-desktop
工控机那边放笔记本的地址和用户名192.168.1.104 zyf.TM1707 
示例如下:(笔记本里)

127.0.0.1	localhost
127.0.1.1	zyf-TM1707
192.168.1.105   ahong-desktop

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

这时候可以 ping 一下看通信是否正常

zyf@zyf-TM1707:~$ ping 192.168.1.105
PING 192.168.1.105 (192.168.1.105) 56(84) bytes of data.
64 bytes from 192.168.1.105: icmp_seq=1 ttl=64 time=19.1 ms
64 bytes from 192.168.1.105: icmp_seq=2 ttl=64 time=7.32 ms
64 bytes from 192.168.1.105: icmp_seq=3 ttl=64 time=4.81 ms
64 bytes from 192.168.1.105: icmp_seq=4 ttl=64 time=4.28 ms
64 bytes from 192.168.1.105: icmp_seq=5 ttl=64 time=4.38 ms
64 bytes from 192.168.1.105: icmp_seq=6 ttl=64 time=4.23 ms
^C
--- 192.168.1.105 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5009ms
rtt min/avg/max/mdev = 4.237/7.357/19.103/5.362 ms

3、设置~/.bashrc 文件
从 机——笔记本

export ROS_HOSTNAME=zyf-TM1707					  #笔记本
export ROS_MASTER_URI=http://ahong-desktop:11311  #工控机

工控机——树莓派

export ROS_HOSTNAME=ahong-desktop          #工控机
export ROS_MASTER_URI=http://ahong-desktop:11311  #工控机 

这里就是把ROS_MASTER_URI设置为工控机那边,如果笔记本要使用roscore需要将那两句话注释掉,否则运行会出现以下问题:

NODES
WARNING: ROS_MASTER_URI [http://ahong-desktop:11311] host is not set to this machine

设置好IP后,最好 source ~/.bashrc 刷新一下,就可以通信了。

  • 通信
zyf@zyf-TM1707:~$ ssh ahong@192.168.1.105
The authenticity of host '192.168.1.105 (192.168.1.105)' cant be established.
ECDSA key fingerprint is SHA256:l5GPEMvAgqONnXRdXRk5fBCMefOlyc0+PQRANqkiGo0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.105' (ECDSA) to the list of known hosts.
ahong@192.168.1.105's password: 
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.9.80-v7+ armv7l)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

583 packages can be updated.
0 updates are security updates.

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.
  • OK

4、问题

(1)openssh没装好

zyf@zyf-TM1707:~$ ssh ahong@192.168.1.105
ssh: connect to host 192.168.1.105 port 22: Connection refused
  • 安装ssh服务:sudo apt-get install openssh
  • 启动ssh服务:service sshd start
  • 重新运行:ssh 用户名@ip 即可
    (2)启动失败
sudo service ssh start
报错
Failed to start ssh.service: Unit ssh.service not found.

解决

sudo systemctl enable ssh.service       #添加ssh.service
sudo systemctl start ssh.service
sudo systemctl status ssh.service
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS学习篇第(六)篇:通信 的相关文章

  • 【STM32】DMA原理,配置步骤超详细,一文搞懂DMA

    目录 DMA xff08 Direct Memory Access xff09 简介 DMA传输方式 DMA功能框图 DMA请求映像 DMA1控制器 DMA2控制器 通道 仲裁器 DMA主要特性 DMA处理 DMA数据配置 从哪里来到哪里去
  • [STM32学习]——一文搞懂I2C总线

    目录 I2C总线的概念 I2C最重要的功能包括 xff1a I2C的物理层 I2C主要特点 xff1a I2C的高阻态 I2C物理层总结 xff1a I2C的协议层 初始 xff08 空闲 xff09 状态 开始信号 xff1a 停止信号
  • STM32——ADC采集

    目录 ADC简介 ADC主要特征 ADC功能框图 ADC引脚 电压输入范围 通道选择 单次转换模式 连续转换模式 转换顺序 规则序列 注入序列 触发源 转换时间 中断 转换结束中断 模拟看门狗中断 DMA请求 代码讲解 宏定义 xff1a
  • STM32——MPU6050内部DMP固件移植,获取欧拉角

    MPU6050模块是什么东西 xff0c 我这里就不再赘述了 xff0c 围绕它可以做很多应用 xff0c 比如四翼飞行器 平衡车等等 当然要完全使用这块模块不是那么容易的 解释说明 其实我们主要是想通过MPU6050得到欧拉角和四元数 x
  • 树莓派---设置WIFI自动连接或者取消自动连接

    树莓派 设置WIFI自动连接或者取消自动连接 注意一 方案二 设置WIFI自动连接 2 1 远程连接 若树莓派本地操作则跳过 2 2 修改WIFI自动连接配置文件 三 取消WIFI自动连接 注意 系统 xff1a Ubuntu16 04 树
  • ROS——服务通信

    服务通信是ROS中一种及其常用的通信模式 xff0c 服务通信是基于请求响应模式的 xff0c 是一种应答机制 xff0c 也即一个节点A向另一个节点B发送请求 xff0c B接收处理请求并产生响应返回给A xff0c 比如如下场景 xff
  • ROS中的头文件和源文件

    目录 自定义头文件的调用 头文件 可执行文件 配置文件 自定义源文件的调用 头文件 源文件 可执行文件 配置文件 头文件与源文件相关配置 可执行文件配置 本文主要介绍ROS的C 43 43 实现 xff0c 如何使用头文件和源文件的方式封装
  • 一文搞懂——软件模拟SPI

    关于stm32通信协议 xff1a 软件模拟SPI 软件模拟I2C的总结 xff08 fishing 8 xff09 To be a fisher的博客 CSDN博客 stm32 软件spi 发现一篇写的软件模拟SPI的比较容易理解的博客
  • RT-Thread启动流程

    芯片启动到main函数之前的运行过程 不论是否有RTOS xff0c 芯片的启动过程是一致的 xff0c 均是要从复位向量处取得上电复位后要执行的第一个语句 xff0c 接下来进行系统时钟初始化等工作 xff0c 随后跳转到main处 寻找
  • FreeRTOS信号量

    前面介绍过 xff0c 队列 xff08 queue xff09 可以用于传输数据 xff1a 在任务之间 xff0c 任务和中断之间 消息队列用于传输多个数据 xff0c 但是有时候我们只需要传递一个状态 xff0c 这个状态值需要用一个
  • FreeRTOS优先级翻转

    优先级翻转 优先级翻转 xff1a 高优先级的任务反而慢执行 xff0c 低优先级的任务反而优先执行 优先级翻转在抢占式内核中是非常常见的 xff0c 但是在实时操作系统中是不允许出现优先级翻转的 xff0c 因为优先级翻转会破坏任务的预期
  • Git学习

    目录 初始化一个Git仓库 添加文件到Git仓库 xff0c 分为两步 小结 查看状态和文件的修改信息 小结 版本回退 git log查看修改和提交的日志信息 版本回退这里可以使用命令 小结 工作区和暂存区 小结 管理修改 小结 撤销修改
  • 数据的表示和存储——

    目录 浮点数的编码表示 浮点数类型 编辑 浮点数的表示 xff08 1 xff09 浮点数 xff08 Float Point xff09 的表示范围 xff08 2 xff09 规格化数形式 xff08 3 xff09 IEEE 754标
  • GDB Debug

    GDB调试教程 xff1a 1小时玩转Linux gdb命令 biancheng net 有一部分要付费 GDB使用详解 知乎 zhihu com GDB调试入门指南 知乎 zhihu com TUI Debugging with GDB
  • python字符串前加 f 的含义

    字符串前加 f 的含义 先看例子用法总结 副标题 xff1a f string 概述 官方文档 xff1a 点击这里 如果你今天将就而选择参考了我的文档 xff0c 总有一天你还是会去阅读官方文档 先看例子 list span class
  • px4的CMakelists.txt阅读

    Copyright c 2017 PX4 Development Team All rights reserved Redistribution and use in source and binary forms with or with
  • “sudo: aptitude:找不到命令”解决办法

    在Ubuntu上安装seagull先决条件 xff0c 输入如下代码 xff1a zk 64 zk virtual laptop sudo aptitude install build essential curl git libglib2
  • 图优化

    简介 图优化本质上是一个优化问题 xff0c 所以我们先来看优化问题是什么 优化问题有三个最重要的因素 xff1a 目标函数 优化变量 优化约束 一个简单的优化问题可以描述如下 其中x为优化变量 xff0c 而F x 为优化函数 此问题称为
  • Docker容器无法连接主机显示器

    当docker容器无法连接主机显示器时会报各种错误 xff0c 都会包含 couldn 39 t connect to display 34 unix 1 34 此时需要 xff0c 首先在主机终端输入 xhost 43 打开主机显示器连接
  • c++ setprecision用法详解

    c 43 43 setprecision用法详解 可以通过使用 setprecision 操作符来控制显示浮点数值的有效数字的数量 span class token macro property span class token direc

随机推荐

  • VScode+Remote-SSH 实现远程连接LINUX

    目录 VIM编辑器SSH 43 SFPT方法VScode 43 Remote SSH插件配置方法安装Remote SSH插件连接服务器免密登录效果展示 VIM编辑器 从VIM编辑器说起 xff0c 总所周知 xff0c vim编辑器是最难用
  • ubuntu docker配置cuda+anaconda+vscode+tensorflow环境的镜像

    ubuntu docker配置cuda 43 anaconda 43 vscode 43 tensorflow环境 docker 安装docker基本操作查看镜像删除镜像官方镜像 容器基本操作从镜像启动容器列出所有容器终止容器启动容器删除容
  • 查看linux节点gpu显存使用情况

    我们在使用公共节点时经常要看每个节点的使用情况 xff0c 本文可以解决逐个连接才能查看的问题 nvidia smi query gpu span class token operator 61 span memory free memor
  • vnc连接远程服务器中docker容器的桌面

    安装vnc 参考这个 通过VNC搭建Ubuntu 18 04和20 04图形界面 https help aliyun com document detail 59330 html 用下面这段话替换 vnc xstartup vim vnc
  • VNC连接远程主机中docker容器的桌面-转载

    启用新终端 xff0c 讲远程主机映射到本地主机 xff1a ssh L 5901 172 17 0 2 5901 zhl 64 192 168 2 104 进入容器 xff1a docker span class hljs built i
  • chatgpt-4生成代码,看这一篇就够了

    chatgpt 4生成代码 xff0c 看这一篇就够了 cursor示例pythondbscan 聚类voronoi 图像分割手写数字识别圆柱绕流 matlab表白程序常微分方程常微分方程组2048小游戏 C C 43 43 正则表达式匹配
  • 深度学习基础之归一化

    文章目录 一 归一化的含义二 归一化的作用三 归一化的类型1 线性归一化2 零 均值规范化 xff08 z score标准化3 小数定标规范化4 非线性归一化 四 归一化理解1 归一化能提高求解最优解速度2 3D 图解未归一化 五 局部响应
  • 文心一言 内测体验

    文心一言 申请内测弱智吧经典问题陨石为什么每次都能精准砸到陨石坑 xff1f 我想配个6000多的电脑 xff0c 大概要多少钱 xff1f 为什么我爸妈结婚的时候没邀请我参加婚礼 xff1f 我买了一斤藕 xff0c 为什么半斤都是空的
  • 基于chatgpt4生成修改OpenFOAM CFD参数的脚本

    基于chatgpt 4生成代码 xff0c 看这一篇就够了 保密需求部分程序数据脱敏处理 shell脚本 自动改参数 改进版 xff0c 可以自动搜索对应参数进行修改 代码主体由chatgpt 4 cursor软件生成 xff0c 本人稍作
  • OpenFOAM的vtk流场文件的Python后处理脚本-以统计轴向固含率为例

    实现了用python处理OpenFOAM生成的vtk流场文件的脚本 1 流场生成vtk文件 xff0c reconstructPar xff0c foamToVTK ascii 结果放在 VTK文件夹下 2 运行后处理脚本 xff0c 目前
  • Kalibr使用

    1 imu标定 xff08 这个没有具体做 xff09 xff08 我的理解是 将imu utils code utils和Kalibr放在一个kalibr ws下 xff09 imu utils下载地址为 xff1a https gith
  • ROS安装——rosdep init、rosdep update失败解决方案

    综述 按照ROS官方论坛的步骤 xff0c 安装ROS的最后几个步骤是 sudo rosdep init rosdep update 但是偶尔因为网络问题出现失败的问题 xff0c 本文记录本人在安装ROS过程中的解决方法 sudo ros
  • AC源码

    字符串算法 一级目录 一级目录 下面展示一些 内联代码片 关于aoti函数的实现 xff1a 1 xff1a 空白符 2 xff1a 正号和负号 3 xff1a 关于进制 xff1a 4 xff1a 溢出的问题 xff1b 用到库函数 xf
  • FreeRtos使用注意(基础知识)

    关于中断 NVIC PriorityGroupConfig NVIC PriorityGroup 4 中断优先级设置为0 15级抢占优先级 xff0c 0子优先级 这个也是官方强烈建议的 其中中断优先级0 15级 xff0c 0的优先级是最
  • 【点云数据集】

    点云数据集汇总整理 1 点云分类和分割 1 1 ModelNet40 xff08 点云分类 xff09 普林斯顿 ModelNet 项目的目标是为计算机视觉 计算机图形学 机器人学和认知科学领域的研究人员提供全面 干净的对象 3D CAD
  • ROS下UWB串口数据读取,并以话题的形式发布

    ROS串口读取UWB定位数据 xff0c 以话题的形式发布 include span class token operator lt span ros span class token operator span ros span clas
  • ubuntu环境下启动rosrun rqt_tf_treerqt_tf_tree出现错误的问题

    ubuntu下安装anconda3后启动rqt tf tree会报错 xff0c 信息为 xff1a 原因是安装rospy使用的是python2 但是anconda会把系统的python设置成python3 做法是在不改变anconda安装
  • 上层应用开发是否真的没有底层开发有前途?

    首先明确什么是底层开发 xff0c 这个界限很难划分 xff0c 有人说搞音视频底层编解码就是底层了 xff0c 但是我们看来不是这样 xff0c 下面还有rom中音视频模块 xff0c 再下面还有driver xff0c 最后到物理硬件
  • python http的请求和响应

    span class token triple quoted string string 34 34 34 http请求 请求行和空行是必须要有的 xff0c 请求体和请求头可以没有 请求格式 xff1a 请求行 xff0c 请求头 xff
  • ROS学习篇第(六)篇:通信

    目录 串口通信 ros serial 包的使用ROS分布式多机通信 ssh的使用 xff11 目的2 关于SSR3 实现4 问题 串口通信 ros serial 包的使用 下载 span class token function sudo