ROS教程学习及Linux学习

1.Linux中如何使用vim编辑器?
使用vim filename进行编辑,例如要对package.xml文件进行编辑,那么在终端cd到指定的文件目录下,vim package.xml即可。刚开始其为命令模式,无法对文件进行编辑,需要输入i进入到编辑模式,当编辑好后,需要按esc键退出编辑模式,进入命令模式。然后输入:进入末行模式,按wq保存退出,按q!不保存退出。

2.ROS基础教程(创建ROS消息和ROS服务)
ROS教程中在这一节让在package.xml文件中添加下面两行代码:

  message_generation
  message_runtime

在我实验时发现,应该把上述代码改为:

  message_generation
  message_runtime

3.ROS教程在catkin_ws/src目录下新建beginner_tutorials,但是

:~$ roscd beginner_tutorials
roscd: No such package/stack 'beginner_tutorials'

解决办法:

第一步:在终端输入

cd ~

第二步: 在终端输入

gedit .bashrc

第三步:在打开的文件的最后一行添加以下代码,以后就都OK了

source /home/user/catkin_ws/devel/setup.bash

其中,user为自己设置的用户名。

这个问题在ROS基础教程创建ROS程序包也出现了,解决办法同样是上述方法,主要原因就是在新建的工作空间中没有配置好环境变量,需要我们每次source一下,或者直接在.bashrc文件中添加第三步的代码。

4.如何使终端不显示用户名和主机名?

首先,在主文件夹下,按ctrl+H将隐藏文件显示出来,找到.bashrc文件,如下图所示:

打开该文件,找到下面这句话,

将\u@\h去掉即可,其中,\u表示 当前登录用户名    \h 表示当前计算机名称。

改好后如下图:

 5.在Linux系统上如何截图?

在终端输入gnome-screenshot  -a即可,输入后即可出现一个十字截取的标志,拖动鼠标截取任意位置。

这里是gnome-screenshot命令的一些基本用法.

选项
-w          抓取当前活动窗口
-a          抓取自定义的区域
-b          包含窗口的边框
-B          去除边框
-d N        等待N秒后截图
-e          附加效果(shadow,border,none)
-i          交互式运行

一些常用的命令:

gnome-screeshot    就是默认的语句没有附加选项就是截取全屏.

gnome-screenshot -wb   截取当前活动窗口(要边框)

gnome-screenshot -a     截取自定义区域  (上面的那张图片就是通过这个命令截取的)

gnome-screenshot -wBe shadow -d 5     5秒后截取当前窗口去除边框,附加阴影效果

6.Linux目录相关问题

 / 表示根目录
./ 表示当前目录
../ 表示当前目录的上一级目录
以此类推
../../  表示当前目录的上一级的上一级的目录

7.在每次打开终端时你都需要先运行下面这条命令后才能运行ros相关的命令。

$ source /opt/ros/kinetic/setup.bash

为了避免这一繁琐过程,你可以事先在.bashrc文件(初学者请注意:该文件是在当前系统用户的home目录下。)中添加这条命令,这样当你每次登录后系统已经帮你执行这些命令配置好环境。

8.ROS中可以输入下列命令查看配置的脚本环境:

zpp@ThinkPad:~$ export | grep ROS
declare -x ROSLISP_PACKAGE_DIRECTORIES=""
declare -x ROS_DISTRO="kinetic"
declare -x ROS_ETC_DIR="/opt/ros/kinetic/etc/ros"
declare -x ROS_MASTER_URI="http://localhost:11311"
declare -x ROS_PACKAGE_PATH="/opt/ros/kinetic/share"
declare -x ROS_ROOT="/opt/ros/kinetic/share/ros"
declare -x ROS_VERSION="1"

在'devel'文件夹里面你可以看到几个setup.*sh文件。source这些文件中的任何一个都可以将当前工作空间设置在ROS工作环境的最顶层

例如:

zpp@ThinkPad:~/catkin_ws$ source devel/setup.bash

接下来,在查看配置的脚本环境,发现ROS_PACKAGE_PATH环境变量有所变化,比之前多了/home/zpp/catkin_ws/src:

zpp@ThinkPad:~/catkin_ws$ export | grep ROS
declare -x ROSLISP_PACKAGE_DIRECTORIES="/home/zpp/catkin_ws/devel/share/common-lisp"
declare -x ROS_DISTRO="kinetic"
declare -x ROS_ETC_DIR="/opt/ros/kinetic/etc/ros"
declare -x ROS_MASTER_URI="http://localhost:11311"
declare -x ROS_PACKAGE_PATH="/home/zpp/catkin_ws/src:/opt/ros/kinetic/share"
declare -x ROS_ROOT="/opt/ros/kinetic/share/ros"
declare -x ROS_VERSION="1"

9.文件manifest.xml(功能包清单)必须在功能包中,用来说明此功能包相关的各类信息。如果你发现一个文件夹内包含此文件,那么这个文件夹很可能是一个功能包。

10.功能包集必需的三个文件是CMakeList.txt、Makefile和stack.xml。如果你在一个文件夹下见到stack.xml,那么可以确定这是一个功能包集。

11.话题之间的通信是通过在节点之间发送ROS消息实现的。对于发布器(turtle_teleop_key)和订阅器(turtulesim_node)之间的通信,发布器和订阅器之间必须发送和接收相同类型的消息。这意味着话题的类型是由发布在它上面的消息类型决定的。使用rostopic type命令可以查看发布在某个话题上的消息类型

12.在我们的功能包中可以看到launch文件夹下有很多的.launch文件,这些文件​写入了我们想要同时运行的节点,当我们需要有很多节点同时启动时,一个个启动它们会费时费力,这时我们可以写一个.launch文件把这些节点都包括进去,这样可以通过roslaunch命令来把这些节点都启动了。

13.关于ROS Kinetic版本无法使用Hokuyo激光传感器的问题,主要是ROS没有为Kinetic版本发布hokuyo_node功能包,但是我们仍然可以使用ROS为indigo版本发布的hokuyo_node功能包,但是需要一些额外的操作。以下为具体的操作步骤:

首先,在终端输入:

git clone https://github.com/ros-drivers/driver_common.git

该语句会下载driver_common功能包,将该功能包拷贝到工作空间的src文件夹,并返回工作空间目录,catkin_make一下,成功之后进行下一步。

到下面的网站下载hokuyo_node功能包,选择indigo版本的。

https://github.com/ros-drivers/hokuyo_node

下载好后,发现该功能包名为hokuyo_node-indigo-devel,同样将其拷贝到工作空间的src文件夹,并返回工作空间目录,再次catkin_make一下即可。

14.sublime使用package control下载插件遇到下列问题的解决办法:

问题:

Unable to download BracketHighlighter. Please view the console for more details.

其中,BracketHighlighter为我们想要安装的插件。

解决办法:

在sublime的Preferences工具栏的settings里面输入下列语句即可:

{
	"bootstrapped": true,
	"debug": true,
	"installed_packages":
	[
		"Package Control"
	],
	"downloader_precedence":
	{
		"linux": [ "curl", "urllib",    "wget" ],
		"osx": [ "curl", "urllib" ],
		"windows": [ "wininet" ]
	},
}

15.在ros中如何查看某一话题上消息的详细信息:

首先在终端输入:

rostopic type topicname

其中,topicname为具体的话题名。这时屏幕会输出话题上消息的具体类型。

接下来在终端输入:

rosmsg show messagetype

其中,messagetype为具体的消息类型。

例如:

ROS教程学习及Linux学习_第1张图片

16. 在自定义的msg或者srv文件时,需要在下述两个文件中添加下面的代码(红色字体部分)

ROS教程学习及Linux学习_第2张图片

这个是视频教程的截图,不过个人感觉应该把自定义的srv文件放在add_service_files{}里面。

17.ubuntu系统格式化u盘:假设磁盘名为/dev/sda

sudo mkfs -t vfat -I /dev/sda

18.ROS中remap标签的作用,以一个具体例子来说明:假设有一个节点,它订阅了话题名为“chatter”的话题,但是系统只发布了“hello”话题的节点,“chatter”话题与“hello”话题上的消息类型是一样的。如果你想把“hello”话题添加到订阅了“chatter”话题的这个节点,则需要remap一下:

其中:

from="original-name":你重映射的名字

to="new-name":目标名字

19.ROS通过gmapping建图,建好图后保存,假设存放在home目录下的map文件夹,注意以下两者的区别:

rosrun map_server map_saver -f ~/map/

上述命令会在map文件夹下生成两个文件,分文为.pgm和.yaml文件,这是隐藏文件,原因在于我们未对其进行命名。

rosrun map_server map_saver -f ~/map

上述命令会生成两个文件在home目录,分别为map.pgm和map.yaml两个文件。因为map后没有/,所以文件是保存在home目录的,而后面的map是文件名。

所以正确的命令是:

rosrun map_server map_saver -f ~/map/map

该命令会在map文件夹下生成名为map.pgm和map.yaml两个文件。

你可能感兴趣的:(ROS教程学习及Linux学习)