因经常需要在 Ubuntu 和 Mac OS 端进行转换,编辑器中快捷键不对应,甚至说一些快捷键找不到好的替代,故编辑器界面改用 Vim,以两端使用同一快捷键。此文整理常用 Vim 命令,不定时更新。

光标操作

移动光标键

h j k l

命令模式下

当前行移动光标

命令 解释
0 移动到行头
$ 移动到行尾
^ 移动到本行第一个不是 black 的字符位置
g_ 移动到本行最后一个不是 black 的字符位置
w 移动到下一个单词的开头
e 移动到下一个单词的结尾
fa 移动到本行下一个为 a 的字符处,a可以为任意字符
nfa 移动到本行下 n(1,2,3,4) 个字符为 a 的地方
Fa fa 一样,反向相反
nFa nfa一样,反向相反
ta 移动到本行下一个光标为 a 字符的前一个位置
nta 移动到本行下 n(1,2,34)个字符为 a 的前一个位置
Ta ta 一样,反向相反
nTa nta一样,反向相反
阅读全文

消息(msg)和服务(srv)总览

  • 消息(msg)就是一个描述 ROS 中所使用的消息类型的简单文本,后缀以.msg命名。
  • 服务(srv)就是一个描述 ROS 服务数据的文本,后缀以.srv 命名。它包含两个部分:requestresponse

msg文件存放在 package 目录的 msg 目录下,srv 文件存放在 package 目录的 srv 目录下。

阅读全文

修改自 ros 官方 wiki

http://wiki.ros.org/catkin/CMakeLists.txt

CMakeLists.txtCMake 构建系统的输入,用于构建软件包。catkinCMakeLists.txt 带有一些其它的约束

总体结构

  1. 所需的 CMake 版本。( cmake_minimum_required

  2. 包名称。( project

  3. 查找构建所需的 CMake或 Catkin 软件包。( find_package

  4. 启动 Python 模块支持。( catkin_python_setup

  5. 消息、服务、动作生成器。( add_message_filesadd_service_filesadd_action_files

  6. 调用消息、服务、动作生成。( generate_messages

  7. 指定包构建信息导出。( catkin_package

  8. 添加要构建的库或可执行文件。( add_libraryadd_executabletarget_link_libraries

  9. 测试构建。( catkin_add_gtest

  10. 安装规则。( install

阅读全文

修改自 ros 官方 wiki

http://wiki.ros.org/catkin/package.xml

package.xml文件定义了包的属性,包括软件名称,版本号,作者,维护者,以及依赖关系。

基本结构

每个package.xml文件都以<package>标记作为根标记

1
2
3
4
<?xml version="1.0"?>
<package format="2">

</package>

必备标签

No 标签 描述
1 <name> 包名
2 <version> 版本号(必须为 3 个点分隔的整数)
3 <description> 包内容的描述
4 <maintainer> 负责维护包裹的人员名称
5 <license> 许可,例如 GPL,BSD,ASL
阅读全文

环境说明

ROS版本:ROS Kinetic Kame

Ubuntu版本:Ubuntu 16.04.6 LTS,(lsb_release -a

Python版本:Python 2.7.12

CMake 版本:3.5.1

工作空间(workspace)

1. 创建工作空间

1
mkdir -p cakin_ws/src

cakin_ws为工作空间名。src为固定目录,不可更改。

2. 编译工作空间

1
2
cd cakin_ws
catkin_make

来到之前创建好的工作空间目录下,使用catkin_make命令,将编译工作空间。

此时,我们的工作空间就创建完毕

阅读全文

导入Matplotlib

约定俗成的以 plt 为 Matplotlib 简称的导入方式

1
import matplotlib.pyplot as plt

魔法配置,让表格显示在 jupyter 里面

1
%matplotlib notebook

中文字体支持配置

第一种方法

  1. 打印所有系统字体
1
2
for i in sorted([f.name for f in mpl.font_manager.fontManager.ttflist]):
print(i)
  1. 找到一个可以显示中文的字体
1
2
3
# 比如我使用的 Songti SC
# 将其设置为当前字体
plt.rcParams['font.family']=['Songti SC']
阅读全文

SymPy是一个符号计算的Python库。它的目标是成为一个全功能的计算机代数系统,同时保持代码简洁、易于理解和扩展。它完全由Python写成,不依赖于外部库。

以下使用导入并开启漂亮的打印

import sympy

sympy.init_printing(pretty_print=True)

有理数 Rationals

1
sympy.Rational(1, 3)

out: $\frac{1}{3}$

特殊的无理数

1
sympy.pi, sympy.E, sympy.oo

out:$\displaystyle \left( \pi, \ e, \ \infty\right)$

阅读全文

导入 numpy

约定俗成的以 np为numpy简称的导入方式

import numpy as np

numpy.array

创建一个数组

  • 参数:
    1. object:类数组
    2. dtype:数据类型(data-type),默认为 None
    3. copy:是否拷贝,默认为 True
    4. order:内存布局(’K’,’A’,’C’,’F’),默认为 ‘K’
    5. subok:传递子类还是基类,默认为 False,即传递基类
    6. ndmin:最小维度,默认为 0
  • 返回值:
    • out:ndarray
阅读全文

randint(随机整数)

Return random integers from low (inclusive) to high (exclusive).

从区间 [low, high) 中返回随机的整数数组

  • 参数
    1. low:最小值
    2. high:最大值,默认为 None
    3. size:个数,默认为None
    4. dtype:数据类型,默认为’l’
  • 返回值
    • out:整型或者整型数组

一些简单的🌰

  1. 0 到 50 中随机一个数
1
2
np.random.randint(50)
# 26
  1. 10 到 50 中随机一个数
1
2
np.random.randint(10, 50)
# 36
  1. 0 到 50 中随机 10 个数
1
2
np.random.randint(50, size=10)
# array([10, 25, 37, 34, 13, 15, 16, 12, 44, 4])
  1. 10 到 50 中随机 10 个数
1
2
np.random.randint(10, 50, 10)
# array([40, 46, 27, 44, 30, 46, 15, 41, 18, 23])
阅读全文