在python版本混乱的Mac上安装最新的ROS2

置顶:终端启动ros2必要语句:

source ~/ros2_install/ros2-osx/setup.bash

source ~/ros2_install/ros2-osx/share/ros2cli/environment/ros2-argcomplete.bash

最新版本的ros2上个月刚刚放出来,我的mac已经饥渴难耐。

之前第一个正式版的ros2 ardent 安装失利,这次必须搞定。

首先官网下载Mac版本二进制安装包,按照官网的安装顺序来执行:

https://github.com/ros2/ros2/wiki/OSX-Install-Binary

前面都很顺利,就是在brew install的时候老是提示brew自动更新,于是取消了brew的自动更新。

安装完主要程序包后,别忘了添加PATH。

但是在启动ros2命令行工具的时候输出如下错误:

from pkg_resources import load_entry_point
ImportError: No module named pkg_resources

这是因为mac系统本身装了好几种python版本,系统默认执行的版本为anaconda包中的python2.7,而在启动ros2的时候要求使用系统自带的python3.6,但是python3.6没有安装pip和setuptools工具,这就导致ros2没有找到pkg_resources

本来想将ros2命令文件的默认python编译路径设置为anaconda的路径,但是改变了这个默认路径后会有一大堆python2和3的语法不兼容,所以改变解决思路在python3.6中安装依赖的工具。

在尝试了更新pip和distribute仍然不行后,继续尝试:

python3 -m pip install –upgrade –force pip

可以将pip强制升级到33.1.1版本。然后在系统启动的时候别忘了两个source命令。但是依然报错,原因为系统的权限问题。

尝试另一种安装方法:

curl https://bootstrap.pypa.io/ez_setup.py | python3

注意python3代表在系统默认的python3环境中安装,成功!

最后,注意官方安装教程上的安装python3依赖工具的语句再执行一遍,确保工具安装成功。talker和listener终于好用了!

仍然存在的问题:rclpy客户端模块无法导入,尝试将其安装到python3的site-packages里面未果。尝试在ros2环境里用ament编译包,但是下载ament编译包时间太长且为下载完全。

Thinkpad x1 carbon 安装 win10 ubuntu16.04 双系统

2014年的老x1,之前装了win8,然后装了ubuntu16.04,当时什么都不懂,只知道装了Ubuntu后回不到Windows。

后来x1被打入冷宫,用了一年多Mac,回来怀念Windows。开机时摁f12进入bios,然后了解到uefi和传统bios的区别,设置security boot为active,bios模式为uefi,Windows重回我的眼前。

Windows开启无耻模式要求我更新,更新后win10用的还不错,自己进行了一系列调整,下了labview、IAR来学习一个,但是Ubuntu找不到了。查看磁盘分区,ubuntu已经没有了,于是我暂时把x1作为win10主力机。后来了解到uefi boot和legacy boot是我不能实现双系统的原因。

最近学习ros,用工控板作为主力机,但移动起来不方便。我心心念双系统x1,必须要搞出来才舒服。现在回头看,当时第一次安装的Ubuntu应该是legacy boot模式的,后安装的win10是uefi boot,这就导致不用bios不能切换系统。

在win10下,用ultraiso进行Ubuntu系统u盘的制作,首先用网盘中存的Ubuntu镜像,清理出一个空闲u盘,但是制作好后,用bios选择usb hdd启动,屏幕显示syslinux v6 xxx no such file or directory。

然后从官网下载Ubuntu镜像,再次制作,还是不行,期间来回调整bios中的uefi boot和legacy boot,还有各种启动顺序,都不管用,一个细节就是legacy boot和uefi boot的Windows开机画面是不一样的。

后来问了一下朋友,说ultraiso不稳定,建议我用rufus来制作u盘,果然好用!从u盘启动成功了,进入了Ubuntu安装界面。rufus制作跟着默认设置就好。

之前了解到Ubuntu也是支持uefi启动的,安装Ubuntu时选择uefi启动可以实现双系统,所以在安装的时候选择自定义安装盘,然后依次设置启动uefi分区(500mb大小)、/boot、/、/home、/usr,过了10分钟左右成功安装。

实际上,现在大多数笔记本都支持uefi启动模式,所以之前/boot选择legacy boot的时候,启动并不能显示装好的grub2。bios改为uefi boot,然后安装ubuntu设置efi启动分区,再检查boot启动顺序,发现多了一个ubuntu启动项,这个就是安装好的grub2界面了,第一项是ubuntu,下面有Windows boot manager,终于,双系统大成功。

ps:有一天输入roscore突然停滞在<1GB的地方不动了,并且roslaunch也不好用了。后来突然想到自己换了计算机名,改回原来的计算机名果然就成了。

 

岗位数据统计词频制作词云

昨天爬到了数据,今天主要进行python程序包jieba和wordcloud的使用。

由于编码问题依然存在,在pycharm的输出窗口依然显示类似/xe5/xe9…的字符,实际上,只要保证原数据的编码方式已知,在ide窗口中这样显示对于数据的处理没有影响。后续jieba和wordcloud导入数据均可以正常显示中文。

运用python panda模块可以轻松统计岗位数据中岗位名称的词频:

segment = jieba.lcut(content)
words_df = pd.DataFrame({'segment': segment})
words_stat = words_df.groupby(by=['segment'])['segment'].agg({"计数": numpy.size})
words_stat = words_stat.reset_index().sort_values(by=["计数"], ascending=False)

使用stopwords.txt可以进行一些汉语无意义词的剔除:

stopwords = pd.read_csv("stopwords.txt", index_col=False, quoting=3, sep=" ", names=['stopword'], encoding='utf-8')

统计好词频后,可以用词云模块wordcloud来编辑词云图片。对于wordcloud模块可以搜索github查看详细说明。编辑生成词云的函数:

def word_cloud(picture, words)

其中picture是所导入的背景图片,用做生成词云的颜色和形状参考。words可以是纯文本形式,也可以是字典类型的数据,每个词汇对应一个词频。前面我们通过生成一个词汇对应词频的字典型数据,这里直接导入即可:

word_frequence = {x[0]: x[1] for x in words.head(800).values}

800表示取词频前800的词汇来进行词云编辑。

昨天爬取生成了一个csv文件,这里取csv文件里的岗位描述一列:

with open(path, 'r') as f:
    reader = csv.reader(f)
    return [row[column] for row in reader]

然后这一列的所有文字合起来生成txt文件,作为统计词频的输入,输出则为一个字典型数据,然后导入词云函数,生成词云图片。导入图片如下:

生成的词云效果如下:

如果拿形状更有特点,颜色更鲜明的图片肯定效果更好。

 

Mac+PyCharm+bs4爬取工作岗位信息

最近在暑期实习中需要用python爬虫爬取某地区的所有工作岗位信息,最开始准备用mysql搭建本地数据库,后因为主要做数据可视化所以直接导出csv文件,数据库后续再做。

以智联招聘为目标,爬取有筛选条件的岗位数据,涉及html文件元素查看、编码调整、正则表达式、requests确定某网址的筛选条件、bs4进行数据筛选、数据可视化。

遇到的问题:

1、python环境无法输入中文,最开始的一行输入:

#-*- coding: utf-8 -*-

2、python2与python3有数个不一样的地方需要注意。导入urllib库时,python2和python3有区别,具体来讲是urllib下属包的层级和格式转换(与urlencode()有关)。

3、对于open(),python2比python3少两个可定义参数encoding=, newline=

4、正则表达式解析注意网页源代码的位置。

5、获取网站html时,有一步由于信息不全返回了None值,导致bs4无法运作,因此对于缺失信息的数据项直接使用try-except法略过。当时寻找返回None值的位置找了半天,实际上可以一步略过,对于后续处理没有影响,注意经验。

6、tqdm是个好东西,可以帮助观察爬数据的进度:

from tqdm import tqdm

然后直接在main函数里使用大循环:

for i in tqdm(range(pages))

7、在数据表中,工资头一项是salary,并不是具体数据,因此后期数据处理时注意计数的调整。

8、bs4是比正则表达式更好用的html数据筛选方法,后续详细学习。当时在正则表达式筛选数据的操作上花了很大功夫,实际上当时网页的html最后被证明是错的。

9、配置mysql时注意本地数据库的账号和密码不要忘记,注意修改方法。

10、运行时仍会报编码相关的错,与ascii和unicode有关,注意在程序最前面加上:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

以将系统默认编码方式改为‘utf-8’。

 

wordpress菜单与文章的小问题

点击了自己的顶部菜单,发现链接无效,即使之前已经让自己的文章归类到特定的分类目录中还是无法显示。

后来查了一下了解到,在设置分类目录别名的时候实际上就是设置url的目录名称,所以不能用中文,尽量用小写字母。

改后成功显示所有文章~

同时,撰写新文章界面的“固定连接”设置也要改为英文,否则索引会失效,文章还是点不进来。

2018.6.26

在工控一体机中安装ros并加载ur机械臂程序包

今天到货一个大件,比10个macbook pro 还沉的15寸工控一体机一台,2000左右入手。

为什么要买这个大板砖?一是因为mac开虚拟机装好的ros总是出现问题,应该是api的问题,玩ros虚拟机是指望不上了;二是因为工控一体机接口多,皮实,24小时工作完全hold住,配置也不赖。

发货的时候特意跟店家说要预装ubuntu,结果搞过来是个xubuntu,不过无伤大雅,反正对于ros来说够用了。

然后就开始配置ros环境,还是选择kinetic。首先配置ubuntu软件库,在桌面点击“Ubuntu Software”,选择“software & update”,选中 “restricted,” “universe,” and “multiverse”。“download from”选择国内源,可以自行检测看看国内源哪个比较快,然后点击关闭,出现reload的对话框,选择reload。

然后添加apt的软件源,使得apt命令可以下载来自packages.ros.org的软件包:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

进一步设置key:

sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 0xB01FA116

成功添加软件源,确保软件为最新版本:

sudo apt-get update

安装完整版ros-kinetic:

sudo apt-get install ros-kinetic-desktop-full

等待较长的时间(工控一体机20分钟左右),未跳出bug,检查已安装的软件包:

apt-cache search ros-kinetic

初始化rosdep:

sudo rosdep init
rosdep update

执行第二条命令时出现indigo版本后系统提示超出时间,目前为止未出现问题,后续有待观察。

初始化环境变量:

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

为了以后快捷安装各种机器人的ros程序包,安装下面这个工具:

sudo apt-get install python-rosinstall

至此ros安装完毕。重启机器打开终端输入:

roscore

出现一条错误:

… logging to /[address]/roslaunch-ubuntu-11487.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.

Unable to contact my own server at [http://1:54385/].

This usually means that the network is not configured properly.

A common cause is that the machine cannot ping itself.

Please check for errors by running: ping 1

For more tips, please see http://www.ros.org/wiki/ROS/NetworkSetup

为了修复错误,将.bashrc文件最后source行下加入下面两行:

export ROS_HOSTNAME=localhost 
export ROS_MASTER_URI=http://localhost:11311

再运行roscore,终于成功运行~

然后安装ur机器人的ros程序包:

sudo apt-get install ros-kinetic-universal-robot

大概10分钟,之后另开终端启动gazebo加载ur10模型:

roslaunch ur_gazebo ur10.launch

首次加载稍等2分钟左右,gazebo界面加载成功。另开终端运行MoveIt运动规划的节点:

roslaunch ur10_moveit_config ur10_moveit_planning_execution.launch sim:=true

另开终端启动rviz:

roslaunch ur10_moveit_config moveit_rviz.launch config:=true

用鼠标拖动rviz中的机械臂末端可以模拟笛卡尔坐标系的末端运动。拖到新的位置后点击planning标签页中的plan and execute可以让机器人规划路径并且到达目标位置,同时gazebo中的机械臂位置也会相应变化。

后续会继续学习ur10机械臂的相关ros仿真。

这个铺子里有什么?

包子铺里当然是卖包子了!

2011年8月,NASA发射了由Atlas V火箭搭载的“朱诺”号木星探测器。四年零十一个月后,探测器调整至木星轨道。

人类首次近距离拍摄高清的木星照片,观察这颗质量是317.89个地球的巨大气体行星,给了科学家们最直观的震撼和无尽的艺术想象。网站的首页就是其中一张。

当我们关注国际时事,关注柴米油盐时,头顶的木星正裹挟着数个比地球还要大的气体风暴,放肆地滚卷着。

地球有三圈大气环流,复杂的作用形成了无数的飓风与台风,而木星有100多圈。

而这只是一颗普通的太阳系行星,仅此而已。

于是铺子里有的,是一个个木星上翻滚的气旋。

它们无足轻重,却足够在更广阔的角度,把更受人关注的事情比下去。

所以这个铺子里到底有什么?

当然是卖包子了!

包子

2018.6.21