ROS学习---远程启动ROS节点

本文详细介绍如何在Ubuntu16.04环境下,通过配置两台机器(pc-master和pc-slave2)实现远程启动ROS节点的过程。文章覆盖了环境设置、需求分析、验证前提条件、配置步骤、启动流程及常见错误解决方法,特别针对'notfoundinknown_hosts'和'TypeError: 'NoneType' object is not callable'等问题提供了详细的解决方案。

远程启动ROS节点

#1 环境

Ubuntu 16.04 

机器配置 :

pc-master 192.168.3.230 本地
pc-slave2 192.168.3.232 远程

前提条件:

  1. 可以在两台机器上实现单机的ROS发布和订阅
  2. 两台机器可以免密登录

#2 需求

  • 在实际应用中, 不同的功能会放在不同的服务器上
  • 需要订阅不同服务器上的topic

#3 验证前提条件

#3.1 验证免密登录

在这里插入图片描述


在这里插入图片描述

两台服务器可以相互免密登录

具体免密登录教程 : https://blog.youkuaiyun.com/Coxhuang/article/details/106971890

#3.2 验证单机ros发布订阅

这里以pc-slave2服务器为例(因为后面要远程启动的也是pc-slave2上的节点)

talker :

在这里插入图片描述


listener :

在这里插入图片描述

#4 开始

**接下来, 我们要在pc-master服务区上启动远程服务器pc-slave2的talker节点 **

#4.1 配置

#4.1.1 pc-master

sudo vim /etc/hosts

在/etc/hosts文件中添加一下内容 :

192.168.3.230   pc-master
192.168.3.232   pc-slave2

sudo vim ~/.bashrc

在~/.bashrc中添加一下内容 :

export ROS_IP="192.168.3.230"
export ROS_HOSTNAME=pc-master
export ROS_MASTER_URI=http://pc-master:11311
export ROSLAUNCH_SSH_UNKNOWN=1
#4.1.2 pc-slave2

sudo vim /etc/hosts

在/etc/hosts文件中添加一下内容 :

192.168.3.230   pc-master
192.168.3.232   pc-slave2

sudo vim ~/.bashrc

在~/.bashrc中添加一下内容 :

export ROS_HOSTNAME=pc-slave2
export ROS_MASTER_URI=http://pc-master:11311
export ROSLAUNCH_SSH_UNKNOWN=1

sudo vim /opt/ros/kinetic/trunk_evn.sh

新增trunk_evn.sh文件

#!/bin/sh
export ROS_IP=192.168.3.232
export ROS_HOSTNAME=pc-slave2
. /home/trunk/work/test/testworkspace/devel/setup.sh
exec "$@"

sudo chmod 777 trunk_evn.sh

#4.2 本地主机脚本

在本地pc-master的package中编写launch脚本

vim /home/trunk/work/test/testworkspace/src/testpackage/launch/test.launch

<launch>
    <machine name="pc-slave2" address="192.168.3.232" user="trunk" env-loader="/opt/ros/kinetic/trunk_evn.sh"></machine>
    <node machine="pc-slave2" name="talker" pkg="testpackage" type="talker.py" output="screen" ></node>
</launch>

#4.3 启动

roslaunch testpackage test.launch

#5 报错

#5.1 not found in known_hosts

... logging to /home/trunk/.ros/log/84cf4482-b84f-11ea-9d63-000c297ff566/roslaunch-pc-master-3868.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://pc-master:32881/
remote[192.168.3.232-0] starting roslaunch
remote[192.168.3.232-0]: creating ssh connection to 192.168.3.232:22, user[trunk]
/usr/lib/python2.7/dist-packages/Crypto/Cipher/blockalgo.py:141: FutureWarning: CTR mode needs counter parameter, not IV
  self._cipher = factory.new(key, *args, **kwargs)
remote[192.168.3.232-0]: failed to launch on pc-slave2:

Unable to establish ssh connection to [trunk@192.168.3.232:22]: Server u'192.168.3.232' not found in known_hosts

解决思路 :

  • 看日志

在这里插入图片描述

在这里插入图片描述

根据日志报错的提示来修改python底层源码,没有效果,日志显示, ros依然是运行在python2.7上,试着将ros运行在Python3上

  1. 把系统默认Python替换成Python3
sudo rm -rf /usr/bin/python
sudo ln -s /usr/bin/python3 /usr/bin/python
  1. 安装ros的编译基础软件包
sudo apt-get install python3-rosdep python3-rosinstall-generator python3-wstool python3-rosinstall build-essential
sudo pip3 install catkin_pkg
  1. 安装软件包依赖
rosdep install --from-paths src --ignore-src --rosdistro kinetic -y
sudo apt-get install libtbb-dev python3-pyqt5
sudo pip3 install empy numpy defusedxml netifaces
# 修复 16.04 libboost_python3找不到的问题
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_python-py35.so /usr/lib/x86_64-linux-gnu/libboost_python3.so
  1. 完美解决

在这里插入图片描述

#5.2 TypeError: ‘NoneType’ object is not callable

修改Python底层代码

在这里插入图片描述

### 安装 ROS 2 Humble Hawksbill 在 Ubuntu 上的步骤 为了在 Ubuntu 系统上安装 ROS 2 Humble Hawksbill,需要确保操作系统版本与 ROS 2 的版本兼容。ROS 2 Humble 适用于 Ubuntu 22.04 LTS(代号 Jammy)[^4]。 --- #### 设置系统区域语言(Locale) 首先,确保系统支持 UTF-8 编码,这是 ROS 2 正常运行的前提之一。 ```bash sudo apt update && sudo apt install locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 export LANG=en_US.UTF-8 ``` --- #### 添加 ROS 2 软件源 接下来,添加 ROS 2 的官方软件仓库,以便通过 `apt` 安装 ROS 2 包。 ```bash sudo apt install software-properties-common sudo add-apt-repository universe sudo apt update sudo apt install curl gnupg lsb-release curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null ``` --- #### 安装 ROS 2 Humble 更新 `apt` 并安装 ROS 2 Humble 的桌面版本,它包含了基本的开发工具和 GUI 工具(如 RViz)。 ```bash sudo apt update sudo apt upgrade sudo apt install ros-humble-desktop ``` --- #### 配置环境变量 安装完成后,需要将 ROS 2 的环境变量添加到当前终端会话中。 ```bash source /opt/ros/ros2_humble/install/setup.bash ``` 为了每次打开终端时自动加载 ROS 2 环境,可以将上面的命令添加到 `~/.bashrc` 文件中。 ```bash echo "source /opt/ros/ros2_humble/install/setup.bash" >> ~/.bashrc source ~/.bashrc ``` --- #### 测试安装 安装完成后,可以运行 ROS 2 自带的示例节点来验证是否安装成功。 在一个终端运行以下命令启动 C++ 编写的发布者节点: ```bash ros2 run demo_nodes_cpp talker ``` 在另一个终端运行以下命令启动 Python 编写的订阅者节点: ```bash ros2 run demo_nodes_py listener ``` 还可以启动 RViz 可视化工具查看 ROS 2 系统中的数据流: ```bash rviz2 ``` 此外,也可以运行 `rqt` 工具查看节点图和话题信息: ```bash rqt ``` --- #### 安装额外依赖(可选) 如果计划进行更复杂的开发,建议安装一些额外的依赖包,例如构建工具和编译依赖: ```bash sudo apt install python3-colcon-common-extensions ``` --- #### 注意事项 - ROS 2 Humble 的官方支持仅限于 **Ubuntu 22.04**,如果使用其他版本的 Ubuntu 或 Debian 系统,需要参考 ROS 2 的官方文档进行源码编译或调整安装步骤[^3]。 - 确保网络连接正常,因为安装过程需要从远程仓库下载大量依赖包。 - 如果使用的是 Raspberry Pi 或其他嵌入式设备,应参考特定平台的安装指南,以确保系统兼容性和性能优化[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值