这几天快疯了,ROS好多坑;提醒一下python的版本不要随意切换哈;我的python 从自带的python-2.7变成 python-3.6后出现很多的问题,其中一个就是 roscore问题; 问题如下:
Traceback (most recent call last):
File “/opt/ros/kinetic/bin/roscore”, line 36, in
from rosmaster.master_api import NUM_WORKERS
File “/opt/ros/kinetic/lib/python2.7/dist-packages/rosmaster/init.py”, line 35, in
from .main import rosmaster_main
File “/opt/ros/kinetic/lib/python2.7/dist-packages/rosmaster/main.py”, line 43, in
import rosmaster.master
File “/opt/ros/kinetic/lib/python2.7/dist-packages/rosmaster/master.py”, line 47, in
import rosmaster.master_api
File “/opt/ros/kinetic/lib/python2.7/dist-packages/rosmaster/master_api.py”, line 72, in
from rosmaster.util import xmlrpcapi
File “/opt/ros/kinetic/lib/python2.7/dist-packages/rosmaster/util.py”, line 48, in
from defusedxml.xmlrpc import monkey_patch
ImportError: No module named ‘defusedxml’
解决办法:切换到 python-2.7
方法一 、查看你PC python的版本号
1:输入
ls /usr/bin/py
2:修改默认Python
cd /usr/bin/
sudo rm/usr/ bin/python #删除原有的Python连接文件
sudo ln - s / usr / bin / python3.5 python #建立指向Python3.X的连接
3:还原2.7版本
cd / usr / bin /
sudo rm / usr / bin / python #删除原有的Python连接文件
sudo ln - s / usr / bin / python2.7 python #建立指向Python2.7的连接
4:验证是否修改成功
推荐的方法二
方法二、使用update-alternatives 来为整个系统更改Python默认版本
1、列出python版本号sudo update-alternatives --list python
当使用sudo update-alternatives --list python来列出所有可用的python版本时提示:
error: no alternatives for python,或者 错误:无python 的候选项
那说明Python 的替代版本尚未被 update-alternatives 命令识别.想解决这个问题,
我们需要更新一下替代列表,将python2.7和python3.4放入其中,使用如下命令将python2.7和python3.5加入到python列表中:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2
--install选项使用了多个参数用于创建符号链接,最后一个参数指定了此选项的优先级,
如果我们没有手动来设置替代选项,那么具有最高优先级的选项就会被选中.
2、配置默认解释器s udo update-alternatives --config python
下面我选择编号1,选择python2.7 验证在终端输入python即可:
结果说明我们的python 切换成功
我们运行 roscore
如果 报错 Unable to contact my own server at
解决方法一
输入以下两步即可:
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://localhost:11311
再次运行 roscore
hltt3838@hltt3838-G3-3579:~$ roscore
... logging to /home/hltt3838/.ros/log/0e3671d8-0aa2-11eb-ad42-a0a4c52fa62a/roslaunch-hltt3838-G3-3579-4084.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://localhost:44709/
ros_comm version 1.14.9
SUMMARY
========
PARAMETERS
* /rosdistro: melodic
* /rosversion: 1.14.9
NODES
auto-starting new master
process[master]: started with pid [4094]
ROS_MASTER_URI=http://localhost:11311/
setting /run_id to 0e3671d8-0aa2-11eb-ad42-a0a4c52fa62a
process[rosout-1]: started with pid [4105]
started core service [/rosout]
但所,我们打开一个终端,再次输入 roscore, 还是会出现这个问题:
解决方法二
终端输入 gedit ~/.bashrc
在bashrc文件中更改以下为
export ROS_HOSTNAME=终端电脑名称(即@与:之间部分)
export ROS_MASTER_URI=http://终端电脑名称 (即@与:之间部分:11311)
// hltt3838@hltt3838-G3-3579:~$ = @与:之间部分
重启电脑即可,输入roscore,出现警告,但所没有错误
解决方法三
sudo gedit ~/.bashrc
在文件末尾输入:
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://localhost:11311
最后,一样,source一下就可以了
source ~/.bashrc
我用这个方法解决的
解决方法四
1、ifconfig #查看本机IP地址
2、gedit ~/.bashrc #打开bashrc文件
3、在文件中讲ROS_HOSTNAME值改为自己的IP地址就OK。(192.168.20.×××是自己电脑查询的IP地址)
export ROS_MASTER_URI=http://192.168.20.×××:11311
export ROS_HOSTNAME=192.168.20.×××
4、source ~/.bashrc #老规矩,source一下环境变量