我是靠谱客的博主 阔达山水,最近开发中收集的这篇文章主要介绍ros下分布式的调试和节点,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

背景是有两台电脑,一个名为A,另一个为B。两台均安装了ubuntu14.04及ROS indigo。目标是通过远程的方式在A上启动B上的节点,并在A上显示B上的运行结果。A是台式机,B是机器人,通过台式机远程控制机器人,并在台式机的rviz上显示出机器人上面的实时运行结果。

首先,按照白巧克力亦唯心的两篇博客进行调试:

http://blog.csdn.net/heyijia0327/article/details/42080641

http://blog.csdn.net/heyijia0327/article/details/42065293

一、两台电脑通信前的准备工作:

     1.首先查看两台电脑各自的ip信息和主机名hostname:

      查看ip:在终端中输入下面的命令

  2.修改/etc文件夹下的hosts文件:

        修改hosts文件的目的是将两电脑的ip和主机名绑定,两台电脑之间通过hostname就能找到对方。没有这一步的时候,你直接去ping 对方主机名时,结果是无法解析对方主机名。

        这里以修改台式机上的hosts文件为例,笔记本上也要相同操作。由于电脑上的 hosts文件是只读文件,直接修改后是保存不了的。因此先用root方式对该文件属性进行修改。

sudo chmod a+w /etc/hosts 
sudo gedit  /etc/hosts 

sudo /etc/init.d/networking restart 

二、实现两台电脑间通信:

        1.在两台电脑上装上chrony包,用于实现同步:

[python] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. sudo apt-get install chrony  

        2. 在两台电脑上都进行ssh服务器的安装

        关于SSH命令可以参考下Ubuntu环境下SSH的安装及使用,这里只管使用,不细谈SSH本身。

        首先在终端中输入下面的命令,安装SSH服务器,SSH的客服端Ubuntu自带已经安装好了:

[python] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. sudo apt-get install openssh-server  

安装完以后,确认服务器是否已经启动:

[python] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. ps -e|grep ssh  
如果只有ssh-agent,那ssh-server还没有启动,需要/etc/init.d/ssh start,如果看到sshd那说明ssh-server已经启动了。         3.正式开始通信

        首先进行基本的ping操作,下面用desktop_hostname代表台式机的主机名,用laptop_hostname代表笔记本上的主机名:

第一步先检查台式机去ping 笔记本,看通信是否正常,输入: 

[python] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. ssh desktop_hostname  
  2. ping laptop_hostname 

三、修改.bashrc开机启动文件

在两台电脑上都使用下面的命令来编辑.bashrc文件: gedit ~/.bashrc  

在台式机这边在bashrc文件的最后添加:

  1. export ROS_HOSTNAME=desktop_hostname  
  2. export ROS_MASTER_URI=http://laptop_hostname:11311  
在笔记本那边,最后添加:
  1. export ROS_HOSTNAME=laptop_hostname  
  2. export ROS_MASTER_URI=http://laptop_hostname:11311 

完成之后在发现了问题,在台式机上无法通过密码登录机器人,查询后需要修改以下文件:

http://jingyan.baidu.com/article/e6c8503c724ebae54f1a18cd.html

sudo gedit /etc/ssh/sshd_config文件,

将PermitRootLogin 的值改为yes

将PermitEmptyPasswords为 no

保存关闭,重启server

sudo /etc/init.d/networking restart  


在台式机处打开一个terminal,输入ssh robot@robot回车

会提示输入密码,输入机器人的开机登录密码即可

发现terminal处字体变为robot@robot说明已经登录robot的电脑了。

还要主要以下几点:

1、利用roslaunch启动机器人的节点时候,launch文件中不能包含x -term的窗口,否则节点无法运行。

2、rviz需要在台式机的权限下进行,即terminal中显示为A@A,而不是robot@robot 。

最后

以上就是阔达山水为你收集整理的ros下分布式的调试和节点的全部内容,希望文章能够帮你解决ros下分布式的调试和节点所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部