ROS命令

一. 构建自己的工作目录:

之所以要创建一个自己的工作目录,是为了避免直接在自己的home目录,也就是目录下创建项目。简洁目录,是一种比较好的习惯。指令如下:

cd ~

mkdir workspace

cd workspace

后续所有的项目都存放 ~/workspace目录下。

二. 创建一个ros工作空间

  1. 创建一个工作空间顶层目录结构:

mkdir -p catkin_ws1/src
cd ..
catkin_make init_TAB // 初始化空间

  1. 分析工作空间目录结构:

下面我们通过tree命令,查看catkin_ws1目录结构,首先安装tree:

sudo apt install tree

安装之后,执行:

tree -L 2

  1. 两个比较重要的工作空间配置文件:

在一个ros工作空间有两个比较重要的配置文件,都是在创建工作空间时,即执行catkin_make命令时自动生成的,一个是src目录下的CMakeLists.txt,此文件是一个软链接文件,指向ros系统目录下的一个cmake文件,此文件的作用在编译ros程序时,自动编译src目录下的所有ros包,此文件也是一个ros工作空间的标志文件。

第二个重要配置文件是devel下的setup.bash,此文件激活当前ros工作空间。一个系统中,可以创建多个ros工作空间,但是同时只有一个处于有效状态,激活的方法是在目标ros工作空间下,执行以下指令:

source devel/setup.bash

可以通过打印ROS_PACKAGE_PATH变量,来确定当前哪一个ros工作空间有效,指令如下:

echo $ROS_PACKAGE_PATH


image.png

可以看到在执行前后,输出结果多了“~/workspace/catkin_ws1/src:”,其中:为分隔符,前面即是有效的ros工作空间,共有的那一项是ros系统目录。
三.切换ros工作空间:**

在一个系统中,经常会存在多个工作空间,下面演示如何切换工作空间。

1. 无ros有效工作空间:

首先新创建一个终端页,命令在“ROS 系统安装与体检”介绍了,就不再写了,如果忘记,再查下。然后检查当前有效的ros工作空间,如图:

image.png

发现目前还没有激活ros工作空间。使用source devel/setup.bash指令,只是在当前终端页中激活了ros工作空间,不会在新创建的终端页中生效。

2. 创建ros工作空间catkin_ws2:

cd ~/workspace

mkdir -p catkin_ws2/src

cd catkin_ws2

catkin_make

3. 切换ros工作空间:

首先检查当前有效的ros工作空间,执行:

echo $ROS_PACKAGE_PATH

运行结果如图:

image.png

此时虽然在catkin_ws2工作空间中,但是并没有激活,所以目前没有有效的ros工作空间。激活catkin_ws2工作空间,执行:

source devel/setup.bash

echo $ROS_PACKAGE_PATH

执行结果如图:

image

此时catkin_ws2为有效ros工作空间,切换catkin_ws1,在当前终端页中执行:

source ../catkin_ws1/devel/setup.bash

echo $ROS_PACKAGE_PATH

执行结果如图:

image.png

可见虽然当前处在catkin_ws2中,但是有效ros工作空间是catkin_ws1。

四. 小结:

1. ros工作空间是很多ros指令正常工作的前提,所以要确保自己使用的工作空间为有效工作空间,在创建工作空间之后,第一步要做的就是使能工作空间,否者后续操作可能会出问题。

2. 同一系统中,可存在多个工作空间,通过source指令可以轻松切换工作空间。

3. 通常,在一段时间,在做同一个项目,使用的都是同一个工作空间,这样,可以讲source指令添加到终端配置脚本中,这样就不用在每个新的终端页都要执行source指令,指令如下:

echo "source ~/workspace/catkin_ws2/devel/setup.bash" >> ~/.bashrc

source ~/.bashrc


image.png

可以看到配置生效,ros工作空间切换为catkin_ws2,也可以新开一个窗口,检测有效的ros工作空间。

/安装/
.安装ROS

1. 配置软件源:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

2. 设置密钥:

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

3. 更新软件源:

sudo apt-get update

4. 安装ros:

sudo apt-get install ros-kinetic-desktop-full

5. 初始化rosdep:

sudo rosdep init

rosdep update

6. 配置本机ros环境:

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc

source ~/.bashrc

7. 安装编译用户程序所需要的依赖:

sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential

8. 验证ros安装是否成功:

执行rosversion -d,如果安装成功,会输出:kinetic,至此完成安装。

一.rosnode命令:

rosnode相当于ros节点管理命令,通过此命令可以查看、操作以及监测已经运行的ros节点。

1. 查看当前系统运行的ros节点:

rosnode list

这个前面已经介绍了,可参考“ROS基本概念”。

2. 查看节点/turtlesim的信息:

rosnode info /turtlesim

运行结果如图

image

可以看到此节点主要信息有以下几项,节点名,订阅的话题,发布的话题,提供的服务。前面我们提到过,一个节点本质上也就是一个进程,所以在节点信息中也有进程Pid。

3. 测试节点/turtlesim是否正常:

rosnode ping /turtlesim

运行结果如图

image

ros系统被称为分布式系统,即可以将不同的节点运行不同的机器上面,如何实现这种分布式通信呢?通过网络,前面讲过,ros节点本质上是进程,其实不太准确,更确切地说,应该是网络进程。所以这里可以使用ping指令测试节点是否运行正常。

可以使用以下指令测试系统所有节点运行是否正常

rosnode ping --all

运行结果如图

image

可以看到,三个节点正常运行。

4. 关闭节点/turtlesim:

rosnode kill /turtlesim

运行结果如图

image

通过在关闭前后,执行rosnode list,可以看到节点/turtlesim已经退出了,在节点退出以后,即没有办法在操作这个节点,直至使用rosrun重新启动这个节点。

也可以使用以下指令,关闭所有节点:

rosnode kill --all

执行之后,使用rosnode list查看,发现还有还有一个节点在运行,/rosout,此节点是roscore启动的,上条指令是关闭roscore以外的节点,节点管理器并没有退出。

二. rostopic命令:

首先参考“ROS 系统安装与体验”,启动小乌龟实例,以方便后续使用。

1. 查看当前系统中存在的话题:

rostopic list

这个前面已经介绍了,可参考“ROS基本概念”。

2. 查看话题/turtle1/pose信息:

rostopic info /turtle1/pose

命令执行效果如图

image

这里的信息,相当于属性,即话题的属性。可以看到,一个话题的基本属性有三个,话题类型或者称为话题的消息类型,订阅者和发布者。发布者即是节点/turtlesim,没有订阅者。前面说过,话题是节点之间的消息通道,如何查看其内容呢?

3. 查看话题/turtle1/pose内容:

rostopic echo /turtle1/pose

命令执行效果如图

image.png

如果是刚启动小乌龟实例,还没有操作小乌龟移动,那么大家看到的数据应该是和图中一致,如果移动了小乌龟,数据是有实时更新。这个话题表示的是小乌龟的位置信息,用五个变量成员描述。分别是二维坐标,朝向,以及线速度和角速度。

这里简单介绍下这些值的来历,暂时看不明白,可以先跳过。左下角为原点(0,0),小乌龟水平向右为0弧度,坐标以厘米为单位,朝向以弧度为单位。刚启动时,小乌龟位于面板中心。

对于一个消息通道,除了内容之外,还需要知道其通信频率。

4. 查看话题/turtle1/pose通信频率:

rostopic hz /turtle1/pose

命令执行效果如图

image

average rate值即为平均频率值。与频率相关的是通信带宽:

rostopic bw /turtle1/pose

命令执行效果如图

image

5. 发布话题/turtle1/cmd_vel:

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:

x: 0.0

y: 0.0

z: 0.0

angular:

x: 0.0

y: 0.0

z: 1.0" -r 1

只需要输入rostopic pub /turtle1/cmd_vel,然后按两次Tab键,命令会自动补齐,然后加上后面的“-r 1”,表示发布频率为1Hz,修改z值,将0.0改为1.0,表示绕Z轴按照逆时针方向,角速度为1rad/s。

命令执行效果如图

image

执行此指令后,小乌龟会原地旋转。可以尝试修改下其他值,观察下小乌龟的运动,思考下为什么这么运动。

为什么不以话题/turtle1/pose,使用话题/turtle1/pose,会发现不管发布的是什么值,小乌龟都是不运动的,因为这个位置值只是反应小乌龟的位置,不是决定小乌龟的位置的,这也是这个话题没有订阅者的原因。

rostopic pub命令比较重要,是调试程序的重要手段。

6. 话题的消息类型:

在介绍rostopic info /turtle1/pose指令时,有说过话题的消息类型,即turtlesim/Pose,可视为一种复合的数据类型,通过以下指令,查看其内部基本类型。

rosmsg info turtlesim/Pose

命令执行效果如图

image.png

可以看到,其包含了五个基本类型,都是32位float型。rosmsg是消息指令,可以查看消息信息,因为后续不常使用,暂不做介绍。

三.节点与话题的关联rqt_graph:

我们知道了节点是基本处理单元,话题是节点之间的通信渠道,那如何知道某个话题是些节点使用,或者一个节点使用的那些话题呢,这可以通过rosnode info和rostopic info实现,但是这也能看到一个话题

和一个节点的情况,如果想知道当前所有节点和话题的情况,该怎么办呢?

rqt_graph

命令执行效果如图

image

椭圆代表节点,矩形代表话题,连线代表关系,连线可以以节点为参考,输入的为该节点订阅话题,输出的为该节点发布的话题。可以看到有四个节点,六个话题,其中有两个调试相关的节点/rosout和/rqt_gui_py_node_15846,

可以选择debug选项,查看主要应用节点,如图

image

这样节点与话题关系一目了然。

四、node
节点是ros中执行单元,其本质上就是一个位于包下面的可执行程序,但是不能直接执行,因为ros节点的运行,依赖ros本身的特殊环境,可以使用ros指令,即rosrun启动ros节点,本篇介绍ros节点的创建,编译,运行与安装。

一 创建源文件:
ros节点必须在ros包下面创建。
cd ~/workspace/catkin_ws/src/beginner_tutorials/src
mkdir hello_world
cd hello_world
新建文件hello_world.cpp,将一下代码复制进去。

include "ros/ros.h" //ros.h 包含ros程序常用的头文件,必须。

int main(int argc, char **argv)
{
ros::init(argc, argv, "hello_world"); //初始化ros,并命令节点名,必须。
ros::NodeHandle n; //初始化节点,调用ros api接口句柄,这里非必须。
ROS_INFO("hello world."); //打印语句
ros::spin(); //处理所有回调函数,这里非必须。
return 0; //返回值。
}

二 编译配置:
修改包的CMakeLists.txt文件,执行 cd ..
在CMakeLists.txt文件153行添加如下内容:

add_executable(hello_world src/hello_world/hello_world.cpp)
target_link_libraries(hello_world {catkin_LIBRARIES}) add_dependencies(hello_world{{PROJECT_NAME}_EXPORTED_TARGETS}{catkin_EXPORTED_TARGETS})

ros编译系统是基于cmake改造,基本语法类似cmake,除了指定节点名hello_world和源程序src/hello_world.cpp,其他都是套路。

在199行,添加如下内容:

install(TARGETS hello_world RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})

用于生成可发行的ros包。

至此,完成节点hello_world的编写。
三 编译:
回到工作空间:

cd ../../../
catkin_make
这里编译整个空间下的节点。

四 运行:
在一个终端页中执行:

roscore
在另一个终端页中执行:

rosrun beginner_tutorials hello_world
执行效果如图


image.png

五 安装:
安装即是生成可发行的ros包,指令如下:

catkin_make install
命令之后即生成install目录,使用tree查看install目录,如图

image.png

在lib和share各有一个beginner_tutorials目录,lib下存放可执行程序,share下存放可执行程序的运行环境。

五.如果提示找不到pcap.h头文件。这是因为velodyne依赖pcap库,有两种方法可以解决:

方法一:

rosdep install --from-paths src -i -y
这是安装src下面所有源码编译的依赖项,推荐使用这种方式。

方法二:

sudo apt install libpcap0.8-dev
这种方式是手动安装pcap库,在安装ros系统时,有可能遇到

sudo rosdep init
rosdep update
这两条指令执行不成功的情况,这种情况下,不能使用rosdep,此时只能手动安装。

安装完pcap库之后,重新编译即可。

2.树状结构3级
tree -L 3

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容