在配置ROS分布式/主从机过程中遇到的报错解决和命令需求

本文针对SSH连接中常见的问题进行了详细的故障排查与解决方法介绍,包括网络不可达、远程图形界面无法打开、主机名配置不一致等问题,并提供了实用的命令帮助读者进行SSH连接状态的检查与服务启动。

报错:ssh: connect to host *** port 22: Network is unreachable
原因:网断了
解决:重启虚拟机或手动连接或命令重启网络连接

sudo service network-manager restart

报错:Unit network.service not found.
原因:命令错了

报错:ROS错误:远程打开不了窗口 QXcbConnection:Could not connect to display
QXcbConnection:Could not connect to display
原因:远程调用图形化窗口,打开不了

报错:Ubuntu16.04下,终端输入 sudo…,出现sudo: unable to resolve host ubuntu: Connection timed out问题
原因:这种问题是由于:在系统盘 “etc “文件夹下面的hosts里面的主机名(localhost)和hostname里面的主机名不一致导致的。
解决:设置 hosts成一致

需求:查看linux的ssh连接
命令:

ps aux | grep sshd

需求:使用service命令启动SSH服务,命令执行如下。
命令:


                
### 关于ROS2主从配置ROS2中,由于其架构设计的变化,不再像ROS1那样依赖`roscore`作为中心节点管理器。相反,ROS2采用了去中心化的通信制,基于DDS(Data Distribution Service),这使得多个节点可以在不同的器之间直接通信而无需中央服务器。 以下是针对ROS2主从配置的相关说明: #### 1. 配置网络环境 为了实现不同计算之间的通信,必须确保两台或多台计算处于同一局域网下并能够互相访问。可以通过以下命令验证主与从是否可以相互ping通: ```bash ping <目标IP地址> ``` 如果无法正常通信,则需要检查路由器设置或防火墙规则[^3]。 #### 2. 修改`.bashrc`文件 类似于ROS1,在每台计算上都需要定义一些必要的环境变量来指定本的名称以及远程主的位置。对于ROS2来说,主要涉及以下几个关键参数: - `ROS_DOMAIN_ID`: 定义了一个逻辑上的隔离空间,默认值为0。当两个系统共享同一个物理网络却希望保持独立运行时非常有用。 - `ROS_LOCALHOST_ONLY`: 控制是否仅允许本地回环接口(`localhost`)参与数据交换,默认关闭(false),即不限定连接方式。 假设我们有两台设备——一台为主(Host Machine),另一台是从(Client Machine)。下面展示如何分别为它们设定相应的环境变量: ##### **主端** 编辑用户的shell初始化脚本(通常是~/.bashrc), 添加如下行: ```bash export ROS_DOMAIN_ID=42 # 可选:如果你不想与其他可能存在的ROS2实例冲突的话 unset ROS_LOCALHOST_ONLY # 确保未启用此选项以便跨网段工作 source /opt/ros/<distro>/setup.bash # 替换<distro>为你安装的具体版本名比如humble、foxy等 ``` ##### **从端** 同样地,在客户端也需要做类似的调整: ```bash export ROS_DOMAIN_ID=42 # 应该匹配主所使用的ID号 unset ROS_LOCALHOST_ONLY source /opt/ros/<distro>/setup.bash ``` 注意这里要保证两端采用相同的`ROS_DOMAIN_ID`, 否则即使其他条件满足也无法建立联系[^4]. #### 3. 测试通信功能 完成以上准备工作之后就可以尝试发起实际的数据交互过程了。一种简单的方法就是利用标准工具集里的消息广播/监听组件来进行初步检测: - 在主终端输入以下指令开启话题发布者角色: ```python ros2 run demo_nodes_cpp talker ``` - 而在另一个窗口或者完全分离出来的第二台电脑也就是所谓的‘从’那里执行接收者的角色: ```python ros2 run demo_nodes_cpp listener ``` 假如一切顺利的话,“listener”应该能实时接收到由“talker”发出的信息流;反之如果没有看到预期的结果,则可能是前面某个环节出了差错需要重新核查一遍整个流程直至找到根源所在为止[^5]. --- ### 提供一段简单的Python代码用于演示基本的消息传递服务 下面给出了一段简易版的服务端程序例子,它会等待来自任何地方的一个请求然后返回固定的字符串响应给调用方知道成功建立了双向链路关系即可视为达成目的. ```python import rclpy from rclpy.node import Node from example_interfaces.srv import AddTwoInts class MinimalService(Node): def __init__(self): super().__init__('minimal_service') self.srv = self.create_service( AddTwoInts, 'add_two_ints', self.add_two_ints_callback) def add_two_ints_callback(self, request, response): response.sum = request.a + request.b self.get_logger().info('Incoming request\na: %d b: %d' % (request.a, request.b)) return response def main(args=None): rclpy.init(args=args) minimal_service = MinimalService() rclpy.spin(minimal_service) rclpy.shutdown() if __name__ == '__main__': main() ``` 对应客户端部分略过不表因为篇幅原因但结构大致相同只是方向反过来而已[^6]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值