0%

[toc]

Background

Recently, I updated my Ubuntu version from 16.04 to 18.04, and I'd like to share my experience on how to build a work or study environment for yourself.

This blog mainly introduces how to install Sogou pinyin in non-Chinese versions of Ubuntu.

How to install Sogou pinyin

Firstly, you should install fcitx, a lightweight input method framework aimed at providing environment independent language support for Linux.

1
2
sudo apt install fcitx-bin
sudo apt install fcitx-table

You can also uninstall ibus, an input-method framework for Unix-like computer operating-systems.

1
2
sudo apt purge ibus
sudo apt autoremove

BTW, you can read Understanding & setting up different input methods if you are interested in the difference between fcitx and ibus.

Recall that: > remove - remove is identical to install except that packages are removed instead of installed. Note that removing a package leaves its configuration files on the system. If a plus sign is appended to the package name (with no intervening space), the identified package will be installed instead of removed.

purge - purge is identical to remove except that packages are removed and purged (any configuration files are deleted too). This of course, does not apply to packages that hold configuration files inside the user's home folder.

what sudo apt autoremove actually does? Whenever you install an application (using apt-get), the system will also install the software that this application depends on. It is common in Ubuntu/Linux that applications share the same libraries. When you remove the appplication the dependency will stay on your system. So apt-get autoremove will remove those dependencies that were installed with applications and that are no longer used by anything else on the system.

You can subsequently open Language Suppor to double-check that Key board input method system has change from ibus to fcitx, and you can change it manuallyif not. You can ignore it and click the "Remind Me later" button if you are reminded that "The language support is not installed completely".

Importantly, you must reboot your system after that.

After that, you can download the deb package from the official website, 搜狗输入法 for Linux, or here (also official links) directly.

You can install it in Ubuntu Software by double-clicking, shown as below.

Importantly, you must reboot your system again.

You can open fcitx config tool after rebooting, as you can see below. You should also see Sogou Pinyin in the lists. Unfortunately, if not, you can add it by clicking the + mark, choose Sogou Pinyin and reboot the system again.

Now, you should input Chinese characters at the same time. In other words, you can use it as convenient in Windows system, like the Shuangpin input method. Yeah, you can learn more detail about Shuangpin in 双拼学习.

Just enjoy Ubuntu 18.04.

References

Ubuntu Chinese Setup
How to install Sogou input on Ubuntu 16.04

How to install rtags for vim in Ubuntu 18.04 / 如何在Ubuntu 18.04 vim上安装rtags插件

This blog introduces how to install the best cross-reference tool, rtags, that I have ever used in vim, step by step. I hope it helps.

What's rtags

Rtags is a client/server application that indexes C/C++ code and keeps a persistent file-based database of references, declarations, definitions, symbolnames etc. It allows you to find symbols by name (including nested class and namespace scope). Most importantly, it gives you proper follow-symbol and find-references support.

Rtags comes with emacs support but there are projects supporting other IDEs: vim-rtags and sublime-rtags.

In this blog, We would install vim-rtags later.

How to install rtags

First, you need clang, which is a compiler front end for the C, C++, Objective-C and so on. It uses the LLVM compiler infrastructure as its back end and has been part of the LLVM release cycle since LLVM 2.6.

1
2
3
4
// Commands in Ubuntu terminal
// sudo apt install clang-5.0 lld-5.0
// sudo apt install libclang-5.0-dev
sudo apt install llvm-7-dev libclang-7-dev

Secondly, make and install rtags as follows.

1
2
3
4
5
6
// Commands in Ubuntu terminal
git clone --recursive https://github.com/Andersbakken/rtags.git
cd rtags <-- in rtags directory
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 .
make
sudo make install

Thirdly, you should install vim-rtags in Vundle.vim. I think it's the easiest way to install rtags plugin in vim. You need to add the following line to .vimrc if you have installed Vundle, and then run :PluginInstall in vim.

1
Plugin 'lyuts/vim-rtags' <-- install in vim

Finally, the last but essential step is that forcing cmake to output compile_commands.json (like DCMAKE_EXPORT_COMPILE_COMMANDS) and link it with rtags according to your project.

1
2
3
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 [***] your_src_path
rc -J your_build_folder_path <-- use compile_commands.json in your build folder
rdm & <-- launch the rtags server

[toc]

前言

Website FAQ,实现了使用"卜算子"来统计网站访问人数,但是"卜算子"仅可以提供访问人数的统计,进一步的信息却无法提供。那么,如果想知道过往访客来自哪些国家和地区,显示网站访问实时动态的信息,应该怎么做呢?

多平台维护不易,本博客实时更新于 个人网站,请移步阅读最新内容。

clustermaps 是什么

clustrmaps.com 是美国的一家数据网站,能够汇总公共记录来分析美国城市的社会人口和商业环境。

Add the ClustrMaps hit tracker to your site or blog and see a real-time map of your visitors from around the world! Proudly show and grow your hidden community of interest.

网址提供了生成访问者地址分布图的代码,可以嵌入到网站或博客中,来显示来自世界各地访问者的实时地图,有助于发展您隐藏的兴趣社区。最重要的是,这个功能是免费的,能够满足个人网站的需求,如下图所示。

配置 clustrmaps

  • 选择自己喜欢的插件格式,现在 Hexo 的 Next 两种主题都是支持的,但是自己比较喜欢 Map widget 的主题。

  • 点击选择后,拷贝网站出现的脚本 javascript代码,粘贴到Next主题下某个位置。博主测试过如下两个位置,挑选一个配置即可以。推荐位置二,自定义程度高。
    • 位置一:将代码插入到 themes\_partials.swig 的最后。

      1
      2
      3
      4
      5
      6
      7
        {% endif %}
      </nav>

      <!-- Insert clustrmaps.com -->
      <script type='text/javascript' id='clustrmaps' src='//cdn.clustrmaps.com/map_v2.js?XXX'></script>

      {% include '../_custom/header.swig' %}

    • 位置二:将代码插入到 \_macro.swig 文件的

      图层。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      <aside class="sidebar">
      <div class="sidebar-inner">

      {%- set display_toc = page.toc.enable and display_toc %}

      <!-- Begin Insert clustrmaps.com -->
      <script type="text/javascript" id="clustrmaps" src="//clustrmaps.com/map_v2.js?d=iBmc9XXXXXX=a"></script>
      <!-- End Insert clustrmaps.com -->

      {%- if display_toc %}
      {%- set toc = toc(page.content, { class: "nav", list_number: page.toc.number, max_depth: page.toc.max_depth }) %}

  • 重新部署网站,就可以在首页看到实时访客来源图,如我的网站首页所示。另外,点击地图,可以看到更详细的信息,包括访客的地图、浏览设备以及 IP。

《莫斯科绅士》讲述的是在沙皇被推翻之后,一个沙皇伯爵回到俄国,被软禁在莫斯科大都会酒店度过一生的故事。作者通过伯爵的回忆,简单描述了沙皇时期贵族的一些生活场景,又以伯爵的视角,通过描绘大都会酒店的变化,侧面反映了俄国的政治、社会变化。

读完故事简介时,我以为这本书会很无趣,但是最后发现我自己陷入到里故事中去,一个月的时间就读完了此书。

我看书的时候一般不关注作者,但是在看这本书的过程中,我一直在不断地推测作者跟伯爵的关系。我想这会不会有点类似于传记的小说,作者就是伯爵本人或者他听过伯爵讲这些故事?毕竟他在对贵族场景和绅士遵守的规则时那么熟悉,毕竟他对伯爵心理活动的描述那么精确,我笔记中收藏了好几处他对伯爵心理活动的描写。退一步讲,如果他不是伯爵本人,那么至少他是一个地地道道的俄国人,一生中经历过沙皇倒台、十月革命、苏维埃政权建立以及斯大林时代结束。然而最终阅读完毕去查阅作者时,我才知到作者是一个美国人,不禁要感叹一声,此人何以如此厉害,居然可以如此了解那个时代的苏联,了解俄国人的特点和俄国的特色。

沙皇被推翻后,伯爵旧时的象征尊贵的身份此时却是一种罪。他被软禁在已经居住了许多年的大都会酒店中,只不过之前,他住的是能看到红场和大剧院的视野最好的大套房,如今却被安置到6楼的一个小房间。因为新房间过矮,身材高大的伯爵无法直起身子,而且因为房间变小,他的很多东西都只能舍弃。当时他从老家庄园搬到大都会酒店时就迫不得已丢弃了许多物品,此次剩下的便更少了。多么像人生的一辈子,就是在不断地舍弃,不断地舍弃。

伯爵被软禁之后,一直在竭力掌控自己的命运和生活,而不是被命运所掌控。一个人的命运是无法脱离社会的大环境而独立地发展的,就像伯爵自己,像伯爵在酒店中认识的第一个朋友小尼娜,像伯爵的朋友米什尔,没有一个人能够完全挣脱那个社会环境带给他们的命运。然而作为一个人仍然可以努力地掌控自己的生活,决定自己如何地生活。虽然伯爵不能摆脱被软禁在酒店半辈子的命运,但是他却可以始终选择做一名绅士,保持有规律的生活。他每天早晨7点起床,吃丰盛的有水果、茶和饼干的早餐,每天做几十个蹲起和伸展,每周二去理发,努力地不让生活变得一片荒芜。

人终究是群居动物,一个人总要与外界的生活有所羁绊,才能有勇气和动力坚持生活下去。伯爵被软禁之后,认识了第一个朋友小尼娜,我觉得小尼娜对于伯爵而言,是刚被软禁后的灰色生活中的一抹亮色,正如她爱穿的黄色一样。小尼娜有酒店的万能钥匙,带着伯爵访遍了酒店的各个角落,伯爵因此有机会再次进入他之前的大套间,透过那个视野最好的窗户看红场和大剧院,也有机会参观酒店的储物间。后来伯爵又与演员安娜有了一夜情缘,这一次他感觉受到了冷落。因为这次的冷落,伯爵突然觉得他已经被时代抛弃了,产生了轻生的想法,可是当他遗嘱等一切后事安排好,午夜12点站在酒店楼顶马上要纵身一跃的时候,被他之前认识的看房子的老人叫住了,热情地非得让他品尝蜂蜜,他在蜂蜜里尝到了他家乡苹果花的味道,然后也打消了轻生的念头。而本以为只是一夜情缘的伯爵与安娜,后来因为世事变幻,又保持了神秘亲密关系。随着时代的发展,他在酒店里成为了领班,认识了很多朋友,与饭店主厨和主管组成了“三巨头”。又过去了很久,长大结婚后的尼娜与他的丈夫因为被流放到边境,把小索菲亚托付给老伯爵照看一个月,但是尼娜再也没有来领小索菲亚,因此老伯爵便承担起抚养小索菲亚的责任,他又有了一个更深的羁绊。

人不愿意为自己去冒险,却会为了爱的人全心谋划甘冒巨大风险。我看书前一直以为伯爵会伺机逃离大都会,可我发现他在里面呆了大半辈子都没想过要逃离,可是最终为了索菲亚能有更好的未来,可以获得更自由的生活,他制定了周密的计划将索菲亚送到了新的世界,自己也离开了大都会。

我想一个人对自己的国家和故土会有深深的眷恋,尤其是老去以后。逃离酒店后,我本以为他会去与小索菲亚汇合,没想到他回到了自己的故乡,最后从结局可以看出来他与安娜在故乡汇合了,不知道他们是否会遭到搜查,是否可以一直安稳幸福,不过我相信至少他们会努力把每一天过的都不荒芜。

我不清楚这本书本意想要带给读者什么,只聊聊自己读完之后的一些感想。看完之后我会觉得人一生中一些大的运数可能真的是由天或环境决定的,但是也不要因为那样,就任由命运摆布,完全放弃主动权。既然有很多事情不是自己能够决定的,那就做好自己可以决定的事情,不是非要做出什么伟大的事情,但是至少可以掌控自己的每一天的细小生活,把每一天过的不荒芜。此外我觉得虽然人生有那么多苦,但是在苦与苦的缝隙之间,还是隐藏了一些糖果和温暖,找到这些糖果和温暖,带着它们上路,我们就可以坚持走过下一段苦。

转载自 《余苗》

流水不逝,维护不易,最新文章更新于个人网站,欢迎访问!

You cannot teach an old dog new tricks.

在新的一年,保持学习的状态,每个月学习一项新技能,持续输入。

2019年2月,新的技能选择学习小众的「双拼」输入法

什么是双拼

双拼是一种建立在拼音输入法基础上的输入方法,是汉语拼音输入法的一种编码方案,可视为全拼的一种改进。它通过将汉语拼音中每个含多个字母的声母或韵母各自映射到某个按键上,使得每个音都可以用两个按键打出,一个代表声母的字母,一个代表韵母的字母,极大地提高了拼音输入法的输入速度。

目前 Windows、Android、macOS、iOS 平台 上都有输入法支持双拼,包括iOS系统自带输入法、 QQ输入法、百度输入法、搜狗输入法、谷歌输入法和微软必应输入法等。

小鹤双拼

放弃全拼,学习双拼的理由

目前,市面上最为主流的拼音输入法方案是「全拼」,它确实有着简单、易上手化、兼容性高的优势。事实上,「全拼」有着一个非常明显的缺点:多击键次数,即在键盘打字,大部分文字需要点击多个按键。也许你会反驳称「全拼」有智能联想、模糊音等快捷输入,但是「双拼」也有着类似的快捷输入。 对比「全拼」,「双拼」主要有以下优势:

「双拼」按键效率高

汉语拼音多由「声母」+「韵母」组成,除了「啊 - a」「哦 - o」「额 - e」这类极少的单韵母,每个拼音的全拼输入至少需要两次,而对于所有拼音,双拼输入只需要两次。这样看来,双拼的按键效率远远高于全拼。

声母和韵母

以“双拼”为例,全拼方案需要输入「shuangpin」;若用小鹤双拼方案(上图),只需要输入「ulpb」: - 点击按键「u」「l」,就能输入sh、uang. - 点击按键「p」「b」,就能输入p、in.

你可以发现,即使是2个字,双拼比全拼减少了5次按键。这对文字工作者而言,长篇的文章写下来,可节省了许多功夫啊。

「双拼」符合人的拼音思维

虽然目前没有研究数据支持,但是可以肯定「双拼」其实很符合人的拼音思维。 还是以“双拼”为例,你第一时间想到的一定是「sh、uang、p、in」这样的声母和韵母搭配,而不是散落、毫无逻辑的「s、h、u、a、n、g、p、i」。

酷酷的感觉

双拼的优势除了 “击键次数少、更符合拼音思维、文字输入效率高”外,「双拼」方案对拼音的打乱,会给外行人神秘的感觉,甚至可以用于简单加密。

总而言之,作为更出色的拼音输入方案,刚接触「双拼」时,我们难免需要花费一定的时间去学习、去了解,但绝对不能站在接触「全拼」多年的角度去全盘否定它。

如何学习双拼

目前,「双拼」输入法有着多种方案,比如常见的小鹤双拼、搜狗双拼、微软拼音2003、智能ABC等等,甚至还允许用户自定义方案。

哪个双拼方案更好用

现在的双拼方案层出不穷,常见的双拼方案有自然码方案以及相近的微软和搜狗,以及自然码方案基础上改动键位的小鹤。其中,微软双拼的方案非常普及,小鹤双拼则主打畅快高效,强调节奏感,尤其是加了鹤形之后,基本可以消除重码,实现「非智能输入」。各方案之间并无明显的优劣之分,需要根据不同人的需求,根据自己的喜好自由选择。

我个人 推荐「小鹤双拼」,相比其他方案,小鹤的键位布置比较合理,左右手能够比较均衡的负担输入任务,边角位置的减少使用也能让小拇指轻松一点。而关键是,小鹤双拼中鹤形的加入能极大地消除重码,轻松实现候选字直接上屏,大大的加快输入。当然,如果懒得记鹤形,仅用双拼也已经比全拼方便很多了,毕竟现在都是词组整句的智能输入了。

目前,各个主流输入法均支持「小鹤双拼」方案,甚至ios自带输入法也提供支持。所以,「小鹤双拼」方案可以满足跨平台、跨输入法的需求。

小鹤双拼学习

目前 Windows、Android、macOS、iOS 平台 上都有输入法支持双拼,建议学习双拼时采用“赶鸭子上架”式学习法: 1. 读规则,仔细读两遍; - 附上小鹤双拼官网学习教程:让您的输入更舒适 。 2. 按照规则试着打几句话几个字; 3. 背诵口诀;
小鹤双拼口诀 4. 把需要记忆和背诵的键位打印出来,放显示器旁边,然后关掉输入法的双拼同时使用全拼,开心去聊吧; - 生命短暂,时间宝贵,强烈建议直接上手,不要把时间浪费在「双拼」练字上。

为了快速学习和方便记忆,附上小鹤双拼键盘映射和口诀表,可以直接打印。

小鹤双拼键盘映射和口诀(图片可下载打印)

小鹤双拼键盘映射和口诀

友情链接

作业部落-双拼输入法学习经验


  • 2019年02月19日创建,陆续增添补充链接;
  • 2019年02月24日文章基本成型,陆续发表到各平台;

[toc]

多平台维护不易,本博客实时更新于 个人网站,请移步阅读最新内容。

Hexo 配置

  • Q: 如何修改 hexo d 命令的端口
  • A: 如果服务器/VPS的SSH端口不是默认的22,那么需要对本地 _config.yml 文件的 deploy 字段,做如下修改:
1
2
3
4
5
deploy: 
type: git
message: update
repo: ssh://username@ip:<your-port>/path_to_remote_git
branch: master
  • Q: Next主题busuanzi_count访客统计失效
  • A: 卜算子官网 提示,"因七牛强制过期『dn-lbstatics.qbox.me』域名,与客服沟通无果,只能更换域名到『busuanzi.ibruce.info』",所以需要修改卜算子在next主题插件里面的域名。
    其中,hexo-theme-next主题中使用了dn-lbstatics.qbox.me域名的文件位置为:hexo\_third-party-counter.swig.
1
2
3
4
5
# 把以下代码
<script async src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>

# 替换成
<script async src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>

然后重新生成和部署博客,即可看到卜算子功能修复,可以参考本人网站下方统计数据,如下图所示。

NextCloud 配置

  • Q: 浏览器只能上传到 nextcloud 服务器 1M 小容量文件
  • A: 上传文件大小限制,主要由 nginx 配置文件中的client_max_body_size的值决定,其默认值为 1M,我们根据需求调整其大小。
  1. 修改 nginx 配置文件目录下的 nginx.conf 文件 (一般路径是/etc/nginx/nginx.conf),增加如下图所示红色内容。

1
2
3
4
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8000m;
  1. 重启 nginx
    1
    systemctl restart nginx
  2. 检查 nginx 配置状态
    1
    nginx -t

邮件服务器配置

  • Q: 免费邮件服务器配置
  • A: Yandex,一家来自俄罗斯的域名邮箱提供商,可以搭建免费的域名邮局,免费账户支持POP、SMTP,还支持API。唯一的缺点是海外商家,官网速度比较慢,科学上网。
1
2
3
POP3:pop.yandex.com 开启SSL 端口 995  
SMTP:smtp.yandex.com 开启SSL 端口 465
IMAP:imap.yandex.com 开启SSL 端口 993

网易邮箱大师为例,配置图示如下:


更新 letsencrypt 证书

  • Q: letsencrypt的https证书期限是3个月,到期后如何重新更新证书呢?
  • A: certbot renew
    // 上面的指令不成功,换成下面的指令,重新申请证书,不需要改配置
    // sudo certbot --force-renew
  • Q: 在 Centos 7 上如何更新 letsencrypt ?

  • A: /root/certbot-auto renew
    // 上面的指令不成功,换成下面的指令,重新申请证书,不需要改配置
    // sudo /root/certbot-auto --force-renew

    You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=your.site

  • Q: Renew 失败,报错信息如下: > Attempting to renew cert (www.xx.net) from /etc/letsencrypt/renewal/www.xx.net.conf produced an unexpected error: 'ascii' codec can't decode byte 0xe8 in position 57: ordinal not in range(128). Skipping.

    All renewal attempts failed.

  • A: 解决方法:可能 nginx 配置文件中有中文注释,删掉之后即可 renew 成功。可参考 UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 2: ordinal not in range(128)


Hexo 提示 “TypeError[ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string ” 解决办法

  • Q:在网站部署过程中,Mac 系统中 “hexo d” 会提示 TypeError[ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string。

  • A:这是因为安装的 node 版本过高导致的。Hexo 官网对 node 的版本要求是不低于10.13,推荐12.0 或更高版本。

    Node.js (Should be at least Node.js 10.13, recommends 12.0 or higher)

    截止在 2021 年 9 月,实践发现 LTS 14.17 版本并不适配最新版的 hexo,所以对 hexo 升级是解决不了这个报错问题。变通的方法是对 node 版本降低,安装 12.0 版本可以解决问题。

    在 mac 上如何降级 node 版本,如下。详细可参见 homebrew 安装指定版本node

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 如果之前使用`brew install node`安装过 node,需要先执行'解绑'node
    brew unlink node (不一定需要运行)
    # 查找可用的node版本
    brew search node
    # 安装你需要的版本,建议 node@12
    brew install node@12
    # 绑定,node@12 需要和你的安装版本一致
    brew link node@12
    # 上一步如果报错, 按照提示执行命令,比如
    brew link --overwrite --force node@12
    # 检查安装版本
    node -v

[toc]

文献下载地址

本文运用星球跳跃漫游者 (hopping rover) 的移动特性(可以跳过而不是绕过障碍物),提出了一种新的路径规划和导航方法,并且讨论了因为跳跃行为和测量误差带来的不确定性。

In this paper, a navigation method for a small size hopping rover with advantages on its mobility is discussed by considering with some uncertainties caused by jumping behavior and measurement error.

和通常的路径规划一样,本文首先从环境数据中提取障碍物,构建三角形 (triangular polygons) 的环境网格,然后使用 A star 算法来规划安全的路径。其中,算法着重考虑了和障碍物的碰撞风险,复杂地形 (roughness of terrain) 和失败的跳跃行为 (failures of hopping action)。

By extracting obstacles from environmental data and constructing triangular polygons it is possible to form paths. The algorithm considers with safety of collision with obstacles, roughness of terrain and failures of hopping action, and then could generate safer path based on A* algorithm.

多平台维护不易,内容实时更新于 个人网站,请移步阅读最新内容。

INTRODUCTION

目前,月球等星球的表面探索主要是使用一个笨重的履带机器人 (heavy wheel rovers),但是履带机器人开发周期长,发射时极少,对安全的需求要求更多的资源来保障,甚至进入了恶性循环。

作者提出一种新的方法,使用多个轻量紧凑的探索机器智能体 (light and compact exploration robot agent) 来共同工作,构成一个大的智能体。

One possibility is the introduction of a light and compact exploration robot agent, and it is possible that multiple types of agents work together in one system. Various roles (functions) can be played on various kinds of equipment, and all of them can constitute one exploration system.

一个创意:通过将同样的功能分散到若干个智能体上,可以忽略一定程度的智能体功能失效,那么风险被分散到整个大系统上,有可能获得较高的效率。

By allocating the same function (equipment) to some or many of them, it is possible to ignore some percentage of the agent's loss rate, so that risk can be distributed to the system and the mission and there is a high possibility of obtaining higher efficiency.

Multi Exploration

虽然小机器人 (A small size rover) 因为大小 (size) 和重量 (weight) 有很多优势,但是其移动性 (traversability) 和测量能力 (measurement) 却受到局限。

However, its size causes problems on its traversability and measurement ability.

所以,可以引入跳跃行为 (hopping mobility) 来获得更高的移动性能 (higher traversability) 和更广的测量范围 (wider measurement range)。

We have introduced hopping mobility to obtain higher traversability and wider measurement range.

通过固定区域的地面机器人 (land-based agent) 和跳跃机器人互相配合,来构成探测系统 (exploration system)。

Introduction of two types of rovers is being considered in the exploration system. One is a land-based agent and a stochastic existence region is given in the search region, contributing to the search of the ground surface. The other is hopping rover. the rover that makes path planning taking advantage of sensing from high places while moving the exploration area together with the ground moving rover plays an important role.

  • 相比轮式机器人,在低重力环境下 (low gravitational environment),可以通过跳跃的方式跳过障碍物,从而抄近路 (adopt a short-cut path)。

Especially under low gravitational environment such as other planet or satellite, it indicates higher performance, e.g.Thus, it can jump over a long distance upon terrains and obstacles, adopt a short-cut path without a detour of a wheeled type, and also measure an environment from higher position in the air of jumping trajectory.

Advantage of hopping mobility Jump

ISSUE AND OBJECTIVES

  • 为什么导航问题需要研究:现有的导航研究,没有利用跳跃机器人的运动特性 (文章发表于2017),所以需要进一步利用跳和远距离的优势来导航。

For a hopping rover, though a lot of jumping hardware designs have been studied, its software e.g. navigation algorithms have been discussed hardly. So, the navigation method hasn't been established by taking advantage of hopping mobility such as jumping over obstacles or a long distance yet.

本文利用跳跃机器人的运动特性,基于对移动性和测量数据的风险考虑,提出一种导航方法(主要是如何规划路径)。

In this paper, a navigation method for a small size hopping rover with advantages on its mobility is discussed with some risk considerations on its mobility and measured data.

PATH PLANNING FOR HOPPING MOBILITY

Selection of Jumping Target Position

移动机器人跳跃行为 (jumping motion) 的不确定性包括初始速度变化 (initial speed change),跳跃距离 (jump distance),跳跃方向 (jumping direction),落地后的束缚 (bound after landing) 以及跳跃失败 (failure of leap)。

The uncertainty factor of hopping rover's jumping motion is the initial speed change, jump distance, jumping direction, bound after landing, failure of leap.

因为跳跃行为的不确定性,所以需要选取目标落地点 (landing point)。

如何环境建模

  1. 连接被识别到的障碍物,构成不规则三角形的环境模型。

Each obstacle captured by sensing is connected and the observation area is divided into triangles

  1. 在观测到的障碍物上使用狄洛尼三角剖分 (Delaunay triangulation),可以获得每三个点的外心(outside heart),即可能的落地点。

By using Delaunay triangulation on the observed obstacles, we can set the landing point.

> Delaunay三角剖分定义:平面上的点集P是一种三角剖分,使得P中没有点严格处于剖分后中任意一个三角形**外接圆**的**内部**(可以是圆上)。
Delaunay triangulation demo

外心安全设定:假设外心是落脚点,那么它到三个端点的距离是一致的,只要有一定的距离保障,就可以确保安全。

Since the outer heart is equally distant from each vertex, it can be said that it is safe if a certain margin can be secured.

Safety distance is secured by creating a circumscribed circle (其实是 delaunay triangulation) so as not to include other obstacles in the circle

Candidate Path Network

  1. 通过连接外心,可以得到一个维诺图 (Voronoi diagram)。

The Voronoi diagram is a method of dividing the region by joining the outer centers formed by Delaunay triangulation.

MC: 什么是 Voronoi diagram? Voronoi diagram

> 泰森多边形是对空间平面的一种剖分,其特点是多边形内的任何位置离该多边形的样点(如居民点)的距离最近,离相邻多边形内样点的距离远,且每个多边形内含且仅包含一个样点。

维诺图安全设定:维诺图包含障碍物,那么可以生成安全的节点 (safe nodes)。

It can be confirmed that there are no obstacles on the sides of the Voronoi diagram enclosing the obstacles and safe nodes can be generated.

Add Uncertainty

作者设定跳跃运动有一定的不确定度,误差通常是正态分布(不清楚是否有理论依据),取决于初始速度,跳的角度,方向角。

The error is generally given in the form of a normal distribution, which rides on the initial speed, the jumping angle, and the direction angle, respectively.

基于上述假设,rover在未来的位置误差会累加 (accumulated),可以使用一个误差椭圆 (error ellipse) 来表示。

The position of the rover can be indicated as the existence probability, and generally takes a shape called an error ellipse.

Rover Position and Error Ellipse 4

MC: 通过椭圆来表示误差和不确定性,算是一个新奇的做法。

SIMULATION OF PATH PLANNING

作者在一个很理想的环境下仿真,认为对于非质点的、大块的障碍物仍然可以规划出路径,但是没有讲清楚,如何实现?假设障碍物很高,那么跳跃机器人是否就无法跳跃过去呢?

Even if the obstacle is the size of the black part of the figure.

在虚拟的月球环境下仿真,比简单的理论仿真,更具有说服力。

Simulation was also carried out in the virtual lunar environment created based on the rock distribution collected by “Surveyor 7” of NASA.

当在椭圆内的障碍物到达一定比例后,进行位置的自校正(self-position estimation)。

When the occupancy rate of the obstacle in the error ellipse exceeds the threshold value, the rover performs self-position estimation.

CONCLUSION

The results of this research

  • In consideration of the uncertainty of the hopping rover, we were able to determine a safe landing point.
  • By performing self-position estimation in the virtual lunar environment, it was possible to induce Rover while suppressing position error.

Works to do

  • 路径规划限于2维,缺乏对障碍物和跳跃高度的考虑。
  • 如何切分大的障碍物,而不仅仅是把障碍物作为质点考虑。
  • 跳跃机器人的设计,物理构建,环境识别,以及规划好路径后,如何对跳跃行为进行控制,准确抵达目标点。

[toc]

本文研究了一个垂直跳跃机器人 (a 1D mass-spring system with an actuated mass) 的动力特性,该机器人主要是由驱动马达、质心弹簧组成。文章通过改变驱动力(马达)的频率、幅值来寻找跳跃的最优表现。通过分析离地跳跃模型,发现最有跳跃不是发生在机器人的共振频率 (resonant frequency) \(f_{0}\)。其中,类似于蹲下来起跳 (squat maneuver) 的行为,最优跳跃的频率高于 \(f_{0}\);类似于反向运动(counter-movement),最优跳跃的频率低于\(f_{0}\)

Systematic variation of forcing parameters reveals complex dynamics which are sensitive to amplitude, phase and frequency.

文献地址

多平台维护不易,内容实时更新于 个人网站,请移步阅读最新内容。

Introduction

  • 本文分析简单运动模型的意义:为复杂设备的简单控制提供指导,揭露生物运动的原理。

Simple models have the ability to be fully analyzed and can thus provide guidance for simplifying control of more complex devices, and even reveal principles of biological locomotion.

  • 研究背景:在越过复杂地形时,生物启发的跳跃机器人是轮式机器人的一个替代。目前,跳跃的最优策略往往是基于经验来调试,瞬间行为(如离地跳跃)的动态系统分析(dynamics of transient behaviors)是相对少的。

In robotics, biologically inspired legged jumping robots have been constructed as an alternative to wheeled robots to better traverse rough terrain.

The initial movement strategies for optimal jumping are typically chosen by empirical tuning for steady state hopping or squat jumps. Systematic studies of the dynamics of transient behaviors, critical to issues of lift-off, are relatively scarce.

Experiment and model

  • 硬件设计:线性马达+弹簧+推力棒+空气轴承(摩擦小)

The robot consisted of a linear motor actuator with a series spring rigidly attached to the bottom end of the actuator’s lightweight thrust rod. The actuator was mounted to an air bearing which allowed for 1D, and nearly frictionless, motion.

  • 马达(actuator)相对轴承(bearing)的力量有限,所以通过倾斜来减少重力,但我不太理解这番话蕴含的物理意思,无法想象轴承和马达的位置关系是什么。

Due to power limitations in the actuator, the bearing was inclined at 15 degree relative to the horizontal, reducing gravitational acceleration to 0.276g.

  • 马达相对于驱动棒(thrust rod)底部的位置关系表达式,如下所示。

  • 设计巧妙处,利用电路(open circuit)做传感器,统计跳跃时间和高度,简单且精度高。

To detect lift-off, a continuity sensor attached to the bottom of the metal spring measured an open circuit when the spring left the ground.

结合理论和实验,作者提出一个机器人的动态模型,原理及推导过程,如下所示。

公式推导

以及,和地面碰撞后的恢复系数。

A constant coefficient of restitution of 0.8 (measured from experiment) modeled the collision of the spring with the ground.

Lift off and jump height

  • 只研究马达运行一次的跳跃表现。

Since we were interested in rapid jumps from rest, actuator forcing was then restricted to only one cycle (N = 1). We systematically examined jumping height for N = 1.

两种跳跃模式

本节主要研究频率(frequency) \(f\) 和初始相位(initial phase offset) \(\phi\) 对跳跃高度的影响。从跳跃高度图发现,局部两个最大值,对应两种跳跃行为模式(two distinct modes of jumping)。

  • 单次跳(single jump)

In the single jump mode, the robot compressed the spring and was propelled into the air.

  • 突突跳(stutter jump)

In the stutter jump mode, the robot performed a small initial jump followed by a larger second jump.

两种跳跃模式示意图

重要结论:For large \(\phi\) single jumps predominate while stutter jumps occurred at lower \(f\) and \(\phi\).

Single jump vs Stutter jump

  • 起跳时间:The time to lift-off was smaller for single jumps than stutter jumps.

Theory of transient mixing

  • 看似简单的等式一,因为参数 \(\alpha\) 的线性,更像是一个分段线性动态系统 (piecewise linear dynamical systems),包含一系列复杂的行为。

  • 基于等式一,理论分析为什么最佳跳跃不是发生在谐振频率。

We are particularly interested in why optimal jumps occur only off resonance.

Single jump

基于对等式一的变形,从模型中发现理论依据。

理论分析

Moving off resonance, the prefactor favors higher f over lower, so the optimum f lies somewhat above \(f_{0}\) (resonance). This argument holds regardless of A.

Stutter jump

基于物理公式瞬时动能(instantaneous power) P = 外界力 F(external force) 乘以 质心速度 V(the center-of-mass robot velocity)。

Single jump vs Stutter jump

  • 最佳突突跳(stutter jump)的频率带宽(narrow frequency bandwidth)比较窄。 > This sensitivity to proper timing explains the narrow frequency bandwidth required to achieve optimal jump heights using the stutter jump mode.
  • 最佳突突跳的频率强依赖幅值,单次跳则没有明显依赖。 > A further consequence is a strong dependence of optimal f with respect to A.
  • 和单次跳跃相比,突突跳达到相同高度的消耗能量要少一个数量级。 > Thus the stutter jump is energetically advantageous since it has a lower optimal f than the single jump. In fact, the stutter jump uses nearly an order of magnitude less power to achieve comparable jump height to the single jump.

Conclusion

Works have done

  • 发现突突跳,使用的能量少,但是跳跃高度高,性价比高。 > The system becomes hybrid for certain parameters as a stutter jump emerges. This mode achieves comparable jump height but uses less power.
  • 研究成果和已有结论相符 > Biologically, our model is in accord with a previous model of bipedal jumping which predicted that counter-movement achieves greater jump height than the squat jump. A quick single jump that resembles a squat jump is beneficial when a fast escape is essential, while a slower stutter jump similar to a counter-movement can achieve comparable jump height.

Works to do

  • 研究其他影响因素,如系统固有性质和环境的影响 > how other factors, intrinsic and environmental, affect optimal performance
  • A non-sinusoidal actuation could improve jump height, take off time, or efficiency.
  • Animals jump off compliant surfaces (like tree branches) and from deformable substrates (like sand).
  • 如何结合 Single jump 和 Stutter jump,取得更优的表现。

[toc]

背景

异常的轮胎气压可能会破坏汽车的稳定性并影响汽车的驾驶和制动,增加安全隐患,特别是在高速行驶过程中,由于轮胎气压、温度异常导致的轮胎故障是引起突发性交通事故的主要因素之一,胎压监测系统 (TPMS) 作为非常重要的主动安全部件,已经拥有越来越广阔的市场。

胎压监测系统由位于驾驶室的接收器和安装于各个轮胎端的发射器组成。胎压监测系统示意图如下,发射器对汽车各个轮胎的气压、温度适时地进行监测,并将监测数据传送给接收器。接收器接收并处理数据,当发现轮胎气压或温度异常时,告警以提醒驾驶员及时进行处理,可以有效地预防轮胎故障的发生。

当汽车轮胎损坏需要更换时,可以选择其他厂商性价比较高的替代件。由于目前国内外对 TPMS 的通信协议暂时没有统一规定,所以生产销售其它厂商替代件时需要破解其 TPMS 模块的通信协议。我实习所在的技术研发部主要使用频谱仪对 TPMS 模块的射频 RF 信息解调后进行人工分析。由于频谱仪显示屏幕较小,人工分析射频信息所需时间长并且对数据分析处理不方便,容易造成视觉疲劳。

目标和方法

在本科校外实习期间,我曾在 PC 端利用 Matlab 对频谱仪导出的 I/Q 数据进行分析,然后绘制出频谱信息,方便人工进行分析和研究。其中,ASK、FSK 解调流程如下:

  1. 从频谱仪中导出频谱仪 I/Q 数据;
  2. 在 matlab 上编程实现基于 I/Q 数据的多帧 ASK 和 FSK 解调;
  3. Matlab 解调结果和频谱仪基本吻合,并实现解调自动化。

导入 I/Q 数据

以某型号频谱仪为例,利用设备提供的I/Q解调功能采集数据,保存在后缀名为“.mat”的文件中进行脱机分析处理。

用 MATLAB 代码“LOAD EXAMPLE.MAT”将数据导入。下图是利用 RSA3303A 采集数据后存储为“.mat”文件的内容。

通过对频谱仪用户手册和文献资料的查阅,我了解到频谱仪导出数据的含义基本如下:

  • Y 是一个复变量,包含了采样数据点的同相 I 分量和正交 Q 分量。
  • InputCenter 显示了采样时的中心频率,据此可计算出实际频率分量。
  • InputZoom 值为1,表示采集数据已下变频到基带。
  • XDelta 为采样周期,由此可以计算出采样率 (fs=1/XDelta)。

ASK、FSK 解调

IQ 数据简介

极坐标参量与 I/Q 直角坐标参量间的转换示意如下图。

极坐标图表示的矢量的参数是幅值和瞬时相位,一般表示为 \(A\angle \theta\) ,因为所有调制形式针对载波的改变都是幅值、相位以及可以由相位推导的频率,极坐标图是分析调制技术矢量参数的主要描述方式。

I/Q 直角坐标图表示矢量的参数不是直接的幅值和瞬时相位,而是把它们投影在 I/Q 直角坐标轴上,采用 I 轴和 Q 轴的投影分量来确定矢量。

数据分析

根据“.mat”文件中的每个采样时刻的 I/Q 采样数据 Y,可得到相应的 I 分量和 Q 分量,用 MATLAB 代码表示为:I=real(Y),Q=imag(Y)。采集到的数据可用幅度分析、频率分析、相位分析以及小波分析等方法进行处理。

  • 输入信号的幅度 \(Am\) 分析: \(Am=\sqrt{I^{2}+Q^{2}}\) 。根据 I/Q 信号的每一个采样值,可以计算出对应采样时刻的幅度值。在测量时间内的所有幅度数值构成 I/Q 幅度数组,对应于“射频功率-时间曲线”。

  • 输入信号的相对相位 \(\Phi m\) 分析: \(\Phi m=arctan(Q/I)\) 。根据 I/Q 信号的每一个采样值,可以计算出对应采样时刻的相对相位值。在测量时间内的所有 \(\Phi m\) 数值构成 I/Q 相对相位数组 \(\Phi m\)

  • 输入信号的频率 \(F m\) 计算:\(F m = \frac{d(\Phi m)}{dt}\) 。在测量时间内的所有 \(F m\) 数值构成 I/Q 频率数组 \(F m\),对应于频率曲线。

  • 频谱计算:Spectrum = FFT(Y)。对 I/Q 数据 Y 进行傅里叶变换,即可计算出其频谱值。其中,Spectrum 为输入信号中频带宽内的频谱。

解调实例分析

FSK 解调实现

FSK就是用数字信号去调制载波的频率,FSK解调一般采用两种方式:非相干解调和相干解调。

相干解调需要同步信号,适用于窄带调频信号解调;

非相干解调不需要同步信号,对于窄频带调频(NBFM)信号和宽频带调频(WBFM)信号均适用。

非相干解调,即不需提取载波信息(或不需恢复出相干载波)的一种解调方法,优点是可以较少的考虑信道估计甚至略去,处理复杂度降低,实现较为简单,但相比相干解调方法性能下降,从定量角度来看,普遍的结果是非相干解调性能上比相干解调差 3dB。

我选用非相干解调方法进行解调,主要应用上述计算频率 \(F m\) 的公式,将频谱仪导入的 I/Q 数据先计算瞬时相角,再微分计算出频率。

Matlab代码为:

1
diff(unwrap(angle(Y)))
其中,unwrap()是解卷绕,经观察解调效果良好。

Matlab解调结果
局部放大对比图

ASK 解调实现

ASK 是振幅键控方式,这种调制方式是根据信号的不同,调节正弦波的幅度。这里参考上述计算幅值 \(Am\) 的公式,将频谱仪导入的 I/Q数据计算瞬时幅值。

Matlab 代码为:

1
magY=10*log10(real(Y).^2+imag(Y).^2)+GainOffset
其中,GainOffset与仪器硬件相关,经观察解调效果良好。

Matlab解调结果
局部放大对比图

综上,Matlab 解调结果与频谱仪图形对比可以看出,Matlab 解调结果和频谱仪所示基本吻合,并且可以随意放大和缩小,方便人工查看和分析,并实现解调自动化,可以方便人工分析。

源代码

ASK 解调源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
%文件askshow.m
%用途:ASK解调并matlab显示
%用法:输入导入数据向量、幅度截止和增益,元素之间用逗号分开
function data=askshow(Y,cutoff,GainOffset)
datalength=length(Y);%获取数据长度
magY=10*log10(real(Y).^2+imag(Y).^2)+GainOffset;%对Y中每一个数据求绝对值,然后以10为底求对数
%magY=20*log10(abs(Y))+GainOffset;
y=zeros(datalength,1);%生成length(Y)行1列的零矩阵y,用于存储处理的数据
for i=1:datalength
if magY(i)<cutoff %如果低于cutoff,则强制截止等于cutoff
y(i)=cutoff;
else y(i)=magY(i);
end
end
n=0:1:datalength-1;%初值:增量:终值
xspan=n;%生成x轴坐标值
plot(xspan,y);%做出以数据(xspan(i),y(i))为结点的折线图
title('ASK显示');%图形标题说明
ylabel('10dBm');%坐标轴y轴说明
axis([0,datalength-1,cutoff-0.1,-1]);%定制2维坐标轴范围
grid on;%显示格栅

FSK解调源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
%文件 fskdemo().m
%用途:频谱仪导入I/Q数据进行FSK非相干解调,输出解调图像,可解调多峰值
%用法:输入导入数据向量,幅值截止值
function fskdemoshow=fskdemo(Y,cutoff)
close all;%关闭所有的图片窗口
DataLength=length(Y);%获取.mat格式的数据长度
magY=abs(Y);%求I/Q数据的幅值
m=1:DataLength;
figure(1);
plot(m,magY);
title('幅度显示');%图形标题说明
%获取高峰值数目PeakNumber
TestEnd =1;%峰值检验初始起始点
PeakNumber=0;
for time=1:100%预计极限峰值数
for i=TestEnd:DataLength %检测峰值开始值
if magY(i)>cutoff
TestBegin=i;
PeakNumber=PeakNumber+1;
break;
end
end
for i= TestBegin: DataLength %检测峰值结束值
if magY(i)<cutoff
TestEnd=i;break;
end
end
end
TestEnd =1;%峰值检验初始起始点
%峰值数目大于等于100提示
if(PeakNumber>=100)
disp('峰值数超过100次,处理可能出错!');
end
%峰值fsk解码处理显示
for time=1:PeakNumber%峰值数
for i= TestEnd: DataLength %检测峰值开始值
if magY(i)>cutoff
TestBegin=i;break;
end
end
for i= TestBegin: DataLength %检测峰值结束值
if magY(i)<cutoff
TestEnd=i;break;
end
end
ValueNumber= TestEnd- TestBegin;%计算当前峰值总数
y=Y.';%矩阵倒置
ValueData=y(1,TestBegin:TestEnd-1);
PhaseDiff=diff(unwrap(angle(ValueData)));%核心算法
m=1:ValueNumber-1;
figure(time+1);%图片递增打开
plot(m, PhaseDiff);
axis([1,ValueNumber-1,-2.5,2.5]);%X,Y轴尺度要变化
title('FSK解调显示');%图形标题说明
grid on%显示格栅
end

References

  • 关玉莲. 正交解调在无线电信号分析中的应用. 中国无线电. 2010年第11期
  • 《RSA3408B 8 GHz Real-Time Spectrum Analyzer User Manual》