ROS UBUNTU LINUX

解决ubuntu中vi不能正常使用方向键与退格键的问题

方案一:

问题:

   ubuntu中vi在编辑状态下方向键不能用,还有回格键不能删除等我们平时习惯的一些键都不能使用。

解决办法:

   可以安装vim full版本,在full版本下键盘正常,安装好后同样使用vi命令。

安装vim:

 ubuntu预装的是vim tiny版本,而需要的是vim full版本。执行下面的语句安装vim full版本:

   $sudo apt-get remove vim-common

   $sudo apt-get install vim

这样就行了,vim是一款优秀的软件,可以在运用中体会到。

方案二:

在vi命令行使用命令“:set nocompatible”,就是设置vi不使用兼容模式。

ubuntu11.10下的VI命令:
vi 有三种模式,输入模式,编辑模式,“:”命令模式
vi 进入以后默认是编辑模式
vi 编辑模式默认的快捷键 上下左右分别是  J K H L
vi 在编辑模式使用 i 可以进入输入模式
vi 输入模式只能输入英文,默认不能使用上下左右箭头
vi 输入模式用Esc可以返回到编辑模式
vi 编辑模式 Shift + ; 可以进入命令模式
vi 命令模式w保存,q退出

1)对所有用户都有效,解决系统中所用用户的vi中文乱码问题

   sudo gedit /etc/vim/vimrc.tiny

加入如下内容:

#该文件的内容显示如下:

" Encoding related

set encoding=UTF-8

set langmenu=zh_CN.UTF-8

language message zh_CN.UTF-8

set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1

set fileencoding=utf-8

2)只对当前用户有效的解决方法

  ubuntu默认在当前用户的家目录下,没有.vimrc文件,这个时候可以自己touch一个.vimrc文件,且在其中加入

#该文件的内容显示如下:

" Encoding related

set encoding=UTF-8

set langmenu=zh_CN.UTF-8

language message zh_CN.UTF-8

set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1

set fileencoding=utf-8

 

树莓派SD卡克隆:

https://www.jianshu.com/p/b3ce0d945c7a

 

 

ubuntu的apt-get install的默认安装路径

  一、apt-get 安装

deb是debian linus的安装格式,跟red hat的rpm非常相似,最基本的安装命令是:dpkg -i file.deb或者直接双击此文件

dpkg 是Debian Package的简写,是为Debian 专门开发的套件管理系统,方便软件的安装、更新及移除。所有源自Debian的Linux发行版都使用dpkg,例如Ubuntu、Knoppix 等。
以下是一些 Dpkg 的普通用法:

1、dpkg -i
       安装一个 Debian 软件包,如你手动下载的文件。

2、dpkg -c
       列出 的内容。

3、dpkg -I
      从 中提取包裹信息。

4、dpkg -r
       移除一个已安装的包裹。

5、dpkg -P
     完全清除一个已安装的包裹。和 remove 不同的是,remove 只是删掉数据和可执行文件,purge 另外还删除所有的配制文件。

6、dpkg -L
     列出 安装的所有文件清单。同时请看 dpkg -c 来检查一个 .deb 文件的内容。

7、dpkg -s
     显示已安装包裹的信息。同时请看 apt-cache 显示 Debian 存档中的包裹信息,以及 dpkg -I 来显示从一个 .deb 文件中提取的包裹信息。

8、dpkg-reconfigure
     重新配制一个已经安装的包裹,如果它使用的是 debconf (debconf 为包裹安装提供了一个统一的配制界面)。


     二、软件安装后相关文件位置
     1.下载的软件存放位置
       /var/cache/apt/archives

     2.安装后软件默认位置
    /usr/share

     3.可执行文件位置 
    /usr/bin

     4.配置文件位置
     /etc

    5.lib文件位置
   /usr/lib

 

 

 

 

单行注释、多行注释

单行#,多行开始 :<<!             结束:! 

echo输出至文件

echo "">rosserviceinfo

while read line
do 
echo "------------------------------------------------------" >> rosserviceinfo
echo $line >> rostopicinfo
rostopic info $line >> rostopicinfo
done < rostopiclist

 

 

shell按行读取文件的3种方法

写法一:

 

复制代码代码如下:

#!/bin/bash
while read line
do
echo $line
done < filename(待读取的文件)

 


写法二:

 

 

复制代码代码如下:

#!/bin/bash
cat filename(待读取的文件) | while read line
do
echo $line
done

 


写法三:

 

 

复制代码代码如下:

for line in `cat filename(待读取的文件)`
do
echo $line
done

 

ros package 安装 http://blog.sina.com.cn/s/blog_602f87700102wi89.html

 

ROS 攻略 http://blog.exbot.net/archives/1129

 

linux将命令输出到系统剪切板

运用管道| xsel -bi, ls | xsel -bi

安装ROS包

sudo apt-get install ros-indigo-rosbridge-server

sudo apt-get install ros-indigo-slam-gmapping

 

ROS  launch文件配置

<launch>    //launch文件

  <arg name="port" default="9090" />    //声明一个参数,并赋值,可以分配 default 属性或 value 属性

        //在命令行中可以roslaunch package-name launch-file-name arg-name:=arg-value 提供arg value

 

        //命令行可以覆盖default的值,但是不能覆盖 value ,会报错。
 

 

        //获取argument的值:$(arg arg-name) 

        //$() 这个符号出现的任何地方,roslaunch命令都将会把它替换成给定argument 的值(value)。

 

        //arg的继承:在argument的传递上有一个限制,就是argument不能传递给 include 元素里包含的子launch文件 使用。
            解决方法:  <include file="path-to-launch-file"> 
            <arg name="arg-name" value="arg-value"/> 
            . . . 
            </include> 

 

          <arg name="arg-name" value="$(arg arg-name)" /> 

 

 

  

 

  <node name="rosbridge_udp" pkg="rosbridge_server" type="rosbridge_udp" output="screen">

            //任何一个launch文件的重点都是:节点(node)元素的集合。启动的每一个节点(node)都要有自己独一无二的名字(name)。如果node(节点)元素有children,就需要显式标签来定义,children比如是:remap 元素或者 param 元素。 

        pkg 和 type 它们分别是:程序包名字和可执行文件的名字。 ros::init() 函数 提供的 name 信息将会全面的覆盖命名信息(launch文件中node标签里面的name 属性) ???init覆盖node?

        拓展配置:

 

  1. output = “screen”     将标准输出信息显示在终端(console)上? 
  2. respawn=”true” 启动完所有请求启动的节点之后,roslaunch 监测每一个节点,让它们保持正常的运行状态。对于每一个节点,当它终止时,我们可以要求 roslaunch 重新启动它.
  3. required=”true” 当一个必需的节点终止时,roslaunch会做出响应,终止其他所有的节点并退出它自己。 和respawn不能同时设置
  4. launch-prefix = “command-prefix”   大致相当于:xterm -e rosrun turtlesim turtle_teleop_key. 会开一个新的终端窗口。 用于需要独立输入的node。
  5. ns = “namespace” 在例子launch文件中,使用这个属性创建了两个无关的 turtlesim 模拟器。 turtlesim 话题名字(turtle1/cmd_vel、turtle1/color_sensor 和 turtle1/pose )被从全局命名空间移动 到 /sim1 和 /sim2 的单独命名空间里。
  6. args属性  传递参数到节点. 个人理解,arg参数只在launch文件中合法(相当于局部变量),不直接传给节点,所以需 要通过node中的args属性进行传递. 

    <param name="authenticate" value="$(arg authenticate)" />

       //在launch文件中设置parameter,使用param标签:    

        group标签中的param标签的作用等同于rosparam set命令. 

        node标签中的param标签设置为该节点的子元素.

      

        这里的file是.yaml类型.
  </node>    //关闭显式标签
  
<rosparam file="../config/costmap_common_params.yaml" command="load"  ns="global_costmap" />

 

        //  在launch文件中也支持等同与rosparam load 功能的rosparam标签 
用于一次性加载大量的参数<rosparam command="load" file="path-to-param-file" />

 

 

   <group if="$(arg ssl)">        

   <group unless="$(arg ssl)">
                 //group标签定义命名空间

                if 或unless 属性 
                组(groups)可以通过 判别条件 来启用或禁用节点(nodes): 
                <group if="0-or-1" /> 
                    . . . 
                </group> 
                如果 if 属性的值是 1 , 标签内封闭的元素(elements)会被包含。如果 if 属性 值是 0 ,则 标签内包含的元素会被忽略。                    unless 属性的工作方式类似 if 属性,但是含义颠倒: 

其他标签:

remap标签

 

在launch文件中重新命名:使用 remap 元素:

<remap from="original-name" to="new-name" />
  • 1

如果这个 remap 是 launch 元素的一个child(子类),与 node 元素同一层级, 并在 launch 元素内的最顶层。那么这个 remapping 将会作用于后续所有的节点。

include标签

file属性 
<include file="path-to-launch-file" /> 
包含其他文件.这个 file属性期望我们添加想要包含的文件的完整路径。但是大多数时候,include 元素使用一个 find 命令来搜索一个程序包,代替一个明确的完整路径: 
<include file="$(find package-name)/launch-file-name" /> 
这样做是正确的: 
<include file = "find learning_tutrols"/launch/start_demo.launch" / > 
这样做是错误的: 
<include file = "find learning_tutrols"/start_demo.launch" /> 
ns属性 
include 元素也支持 ns 属性,可以让这个文件里的内容r推送到一个命名空间里面: 
<include file=". . . " ns="namespace" />
一般我们都会给 include 元素设置一个 ns 属性。

使用 roslaunch 命令 和 使用 rosrun 命令 单独运行每个节点之间的重要区别 
默认情况下,roslaunch 命令 从启动节点开始,标准输出信息会重定向到一个日志文件中,而不会像 rosrun 命令那样,将 log 信息显示在终端(console)上. 
日志文件所在路径: ∼/.ros/log/run_id/node_name-number-stdout.log 
Q: 如何将标准输出信息显示在终端(console)上? 
A: 在 node 元素中使用 output 属性: 
output=”screen” 
带这个属性启动的节点会将标准输出信息显示在终端的窗口中,而不会保存在日志文件中。这也 解释 了为什么这个带有output=”screen”的节点(node) 的日志文件在上面日志文件列表中丢失的原因。 
扩展: node 元素的 output 属性只能影响这个节点自己。除了 output 属性,我们可以使用 roslaunch命令行工具的 –screen 命令行选项强制性的在终端的窗口中显示所有节点的输出信息。
$ roslaunch --screen package-name launch-file-name
重映射名字 
在启动一个节点的时候,有两种方法创建重映射: 
在终端命令行中启动一个节点时,要重新给这个节点命名:给出一个节点原来的名字和新的名字, 中间用:=分开。 original-name:=new-name 
例如,在运行turtlesim实例时,我们现在想把发布姿态数据的话题/turtle1/pose名称改 为:/tim,那么命令就 是这样的:$ rosrun turtlesim turtlesim_node turtle1/pose:=tim 
在launch文件中重新命名:使用 remap 元素: 
<remap from="original-name" to="new-name" /> 
如果这个 remap 是 launch 元素的一个child(子类),与 node 元素同一层级, 并在launch 元素内的最顶 层。 那么这个 remapping 将会作用于后续所有的节点。 
这个 remap 元素也可以作为 node 元素的一个child(子类)出现。下面这个就是使用模板: 
<node node-attributes > 
<remap from="original-name" to="new-name" /> 
. . . 
</node> 
例如:上面命令行命令如果在launch文件中,就是下面这个样子的: 
<node pkg="turtlesim" type="turtlesim_node" 
name="turtlesim" > 
<remap from="turtle1/pose" to="tim" /> 
</node> 
argument和parameter有区别 
尽管术语argument和parameter在许多计算机环境中稍微可以互换使用,它们的含义在ROS中有很大的不同。Parameters(参数)在一个运行的ROS系统中是变量(values),它被存储在parameter服务器中,活动(或者叫:运行)的节点通过ros::param::get()函数访问它,并且用户可以通过 rosparam 命令行工具使用它。相比之下,arguments只有在launch文件里合法,它们的值不是直接提供给节点。

以上出自博客:https://blog.csdn.net/qq_33444963/article/details/77893881

 

ROS RVIZ

install:    rosdep update

                rosdep install rviz

                rosmake rviz

run:     rosrun rviz rviz

 

 

 

ssh连接 远程复制文件

SSH下复制文件SCP。

scp是有Security的文件copy,基于ssh登录。操作起来比较方便,比如要把当前一个文件copy到远程另外一台主机上,可以如下命令。

scp /home/daisy/full.tar.gz root@172.19.2.75:/home/root

-r 复制文件夹

 

liunx 下scp出现 Permission denied, please try again 的解决办法

修改root的ssh权限,即修改 /etc/ssh/sshd_config文件中 PermitRootLogin no / without-password  改为 PermitRootLogin yes
然后重启ssh服务

 

启动脚本

 

/etc/rc.local 开机启动调用,不能有错误

/etc/profile 用户登录调用,
~/.bashrc 打开终端调用

 

PC连接小车树莓派

小车树莓派设置环境变量
source ROS的setup.sh添加环境变量
小车树莓派
export ROS_MASTER_URI=http://小车树莓派ip:11311
export ROS_IP=小车树莓派ip
PC
export ROS_MASTER_URI=http://树莓派ip:11311
export ROS_IP=PCip

 

 

Ubuntu设置静态IP,DNS,NetworkManager

 

1、ifconfig查看网卡名,当前IP,子网掩码

2、vi /etc/network/interfaces

添加或更改内容:

auto 网卡名
iface 网卡名 inet static
address 192.168.1.130  
netmask 255.255.255.0
gateway 192.168.1.1

 

3、vim /etc/resolvconf/resolv.conf.d/base

添加DNS:

nameserver 192.168.1.1    #DNS

search Home    #搜索域

4、ubuntu 16.04使用NetworkManager网络管理软件

命令为nmcli。 nmcli dev show查看网络设备信息

在设置为静态IP后,需取消NetworkManager默认的DNS设置:

vim /etc/NetworkManager/NetworkManager.conf

dns=dnsmasq注释或删掉

dnsmasq会启动一个服务,由此服务提供DNS地址,设置静态IP时,由于DHCP服务器不会提供DNS地址,此服务就没有有效的DNS,在手动设置DNS时,需在NetworkManager里取消此设置使手动DNS生效。

dnsmasq启动时,在/etc/resolv.conf里的nameserver = 127.0.1.1本机。

 

两台电脑ROS网络通信配置,转自http://www.cnblogs.com/liu-fa/p/5773822.html        #未验证

这里假设我们有两个电脑:电脑 A 为主机端,电脑 B 为控制端。最终要实现在 A 电脑上运行roscore,并且运行 Turtlesim 程序,然后在 B 电脑上运行键盘控制程序,控制 Turtlesim 小乌龟移动。

1. 查看电脑A和电脑B的 IP 和 Hostname

查看IP,在控制台输入:

$ ifconfig

如果电脑连接的时有线网,则显示结果中,etho 部分的 inet addr 后面就是该电脑的 IP 地址;

如果电脑连接的是无线,则 wlp3s0 部分的 inet addr 后就是 IP 地址。

查看 Hostname,在控制台输入:

$ hostname

2. 修改hosts文件内容

使用如下指令,分别在电脑A和电脑B的打开 hosts 文件:

$ sudo gedit /etc/hosts

在电脑A端的 hosts文件 中添加如下加粗指令:

复制代码

127.0.0.1       localhost
127.0.1.1         [ hostname_A ]

[IP_A]            [ hostname_A ]
[IP_B]            [ hostname_B ]

***

复制代码

同理,在电脑B端的 hosts 文件中,加入如下加粗指令:

复制代码

127.0.0.1       localhost
127.0.1.1         [ hostname_B ]

[IP_B]            [ hostname_B ]
[IP_A]            [ hostname_A ]

***

复制代码

3. 修改 .bashrc 文件

使用如下指令,分别在电脑A和电脑B的打开 .bashrc 文件

$ sudo gedit ~/.bashrc

在电脑A端和电脑B端打开的 .bashrc 文件的最后一行,加入如下代码:

export ROS_MASTER_URI=http://[hostname_A]:11311

[注意] 此处假设电脑A为主机,如果改成电脑B为主机,则只需要将此步中的 [hostname_A] 改成 [hostname_B] 即可。

4. 运行小乌龟程序

电脑A端:

首先启动 ROS:
$ roscore

然后 Ctrl + T 打开新的控制台,运行:
$ rosrun turtlesim turtlesim_node

电脑B端:

$ rosrun turtlesim turtle_teleop_key

 现在,你就可以用电脑 B 控制电脑 A 中的小乌龟尽情遨游啦! ~\(≧▽≦)/~啦啦啦

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值