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为具体的消息类型。
例如:
16. 在自定义的msg或者srv文件时,需要在下述两个文件中添加下面的代码(红色字体部分)
这个是视频教程的截图,不过个人感觉应该把自定义的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两个文件。