前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ROS学习---远程启动ROS节点

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

作者头像
Autooooooo
发布2020-11-07 20:14:33
2K0
发布2020-11-07 20:14:33
举报
文章被收录于专栏:Coxhuang

文章目录

  • 远程启动ROS节点
    • #1 环境
    • #2 需求
    • #3 验证前提条件
      • #3.1 验证免密登录
      • #3.2 验证单机ros发布订阅
    • #4 开始
      • #4.1 配置
        • #4.1.1 pc-master
        • #4.1.2 pc-slave2
      • #4.2 本地主机脚本
      • #4.3 启动
    • #5 报错
      • #5.1 not found in known_hosts
      • #5.2 TypeError: 'NoneType' object is not callable

远程启动ROS节点

#1 环境

代码语言:javascript
复制
Ubuntu 16.04 

机器配置 :

代码语言:javascript
复制
pc-master 192.168.3.230 本地
pc-slave2 192.168.3.232 远程

前提条件:

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

#2 需求

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

#3 验证前提条件

#3.1 验证免密登录


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

具体免密登录教程 : https://cloud.tencent.com/developer/article/1744580

#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文件中添加一下内容 :

代码语言:javascript
复制
192.168.3.230   pc-master
192.168.3.232   pc-slave2

sudo vim ~/.bashrc

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

代码语言:javascript
复制
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文件中添加一下内容 :

代码语言:javascript
复制
192.168.3.230   pc-master
192.168.3.232   pc-slave2

sudo vim ~/.bashrc

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

代码语言:javascript
复制
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文件

代码语言:javascript
复制
#!/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

代码语言:javascript
复制
<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

代码语言:javascript
复制
... 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
代码语言:javascript
复制
sudo rm -rf /usr/bin/python
sudo ln -s /usr/bin/python3 /usr/bin/python
  1. 安装ros的编译基础软件包
代码语言:javascript
复制
sudo apt-get install python3-rosdep python3-rosinstall-generator python3-wstool python3-rosinstall build-essential
sudo pip3 install catkin_pkg
  1. 安装软件包依赖
代码语言:javascript
复制
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底层代码

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/06/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 远程启动ROS节点
    • #1 环境
      • #2 需求
        • #3 验证前提条件
          • #3.1 验证免密登录
          • #3.2 验证单机ros发布订阅
        • #4 开始
          • #4.1 配置
          • #4.2 本地主机脚本
          • #4.3 启动
        • #5 报错
          • #5.1 not found in known_hosts
          • #5.2 TypeError: ‘NoneType’ object is not callable
      相关产品与服务
      云服务器
      云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档