ROS 学习笔记

ROS 学习笔记

http://blog.csdn.net/youngpan1101/article/details/61196300速查笔记

yuanpen 的博客http://blog.csdn.net/youngpan1101

http://blog.csdn.net/youngpan1101/article/details/60962760?locationNum=1&fps=1 

疑难杂症及解决办法

1、catkin:未找到命令

解决办法:http://blog.csdn.net/xiangxianghehe/article/details/78830477 


1   发现roscd beginner_tutorials   进不去目录 beginner_tutorials

在终端输入:

export ROS_PACKAGE_PATH=~/catkin_ws/src:$ROS_PACKAGE_PATH

即可

 

2创建 Package注意路径的设置

以下方法存在,每次编译将同一个文件夹下的所以pkg 都编译  的情况

一般的路径设置为  $ cd %YOUR_CATKIN_WORKSPACE_HOME%/src

我的路径为: cd ~/catkin_ws/src

然后,在这个路径下创建 pkg:设置依赖等

kls@kls-MS-7A15:~/catkin_ws/src$catkin_create_pkg learning_tf tf roscpp rospy turtlesim

编译pkg 注意编译所在的路径位置

kls@kls-MS-7A15:~/catkin_ws$catkin_make

 $ catkin_make

$ source./devel/setup.bash

 

解决

之前必须安装ros
参考之前写的博客:
http://blog.csdn.net/freewebsys/article/details/48056113

rosdep install rviz

#执行初始化

sudo rosdep init

#更新

rosdepupdate12345

然后启动会遇到一个问题:

libGL error: core dri or dri2extension not found

libGL error: failed to load driver:vboxvideo

[ INFO] [1441765508.993507731]:Stereo is NOT SUPPORTED

[ INFO] [1441765508.995292221]:OpenGl version: 2.1 (GLSL 1.2).

Segmentationfault (core dumped)12345

需要设置下环境变量

#设置变量

export LIBGL_ALWAYS_SOFTWARE=1

#启动即可

rosrunrviz rviz

 

 

 

3进程死掉如何查询问题

仅限于在 moveit 配置死掉时出现的问题。

kls@kls-MS-7A15:~$roslaunch urdf_tutorial display.launchmodel:=/opt/ros/indigo/share/pr2_description/robots/pr2.urdf.xacro

 

 

不难发现ros工具的名字都是在对应的UNIX命令的前面加上一个ros

rospack = ros + pack(age) 

roscd = ros + cd 

rosls = ros + ls 

 

4、创建一个catkin package 并且编译运行

 

首先去到你之前创建的工作空间目录:注意路径

 第一步:

$ cd ~/catkin_ws/src

 

catkin_create_pkg 脚本创建一个做'beginner_tutorials'package,依赖于std_msgsroscpp,和roscpy

命令:

catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

第二步:

现在需要在catkin工作空间编译package

$ cd ~/catkin_ws

$ catkin_make

第三步:

$ source ~/catkin_ws/devel/setup.bash

第四步:

使你的环境设置文件生效:

$ source /opt/ros/%YOUR_ROS_DISTRO%/setup.bash()

$ source /opt/ros/groovy/setup.bash     (For Groovy for instance) 

使用catkin_make

catkin_make命令行工具对与标准的catkin工作流程来说是一个非常方便的,你可以理解为它把调用cmake和编译结合起来了。

用法:

# In a catkin workspace

$ catkin_make [make_targets] [-DCMAKE_VARIABLES=...]

 

 

 

5.建立一个catkin工作空间并且启用setup 文件

现在需要在catkin工作空间编译package

$ cd ~/catkin_ws

$ catkin_make

执行该命令后会在devel文件夹下生成一个和在/opt/ros/$ROSDISTRO_NAME(ROS版本名这里是/opt/ros/indigo)下相似的结构。

为把工作空间添加到ROS环境变量你需要执行:

$ source ~/catkin_ws/devel/setup.bash

使setup文件生效

 

差询依赖

$ rospack depends1 rospy

定制你的package

 

编译ROS package  的几个步骤:

使你的环境设置文件生效:

$ source /opt/ros/groovy/setup.bash     (For Groovy for instance)

.1使用catkin_make

.2编译你的package

理解ROS Node

小型仿真器,请安装:

$ sudo apt-get install ros-<distro>-ros-tutorials

<distro>是你的版本名字    14.04

 

1.2图概念的概论

Nodes:node是使用ROS去和其它node通信的可执行文件。

Messages:ROS中订阅或者发布给topic的一种数据形式。

Topics:Nodes可以发布messages给一个topic,也可以订阅一个topic去接受它的messages

Master:ROS提供名称服务(比如帮助nodes找到彼此)。

rosout:相当于ROS中的stdout/stderr

roscore:Master+rosout+parameter server(参数服务之后会介绍)

 

1.4用户库

用户库允许用不同语言编写的nodes之间进行通信:

rospy = python client library 

roscpp = c++ client library 

 

1.5roscore

roscore是使用ROS时第一个要使用的工具。

$ roscore

 

可以用一下命令递归改变文件夹的所有者

$ sudo chown -R <your_username> ~/.ros

使用rosnode

打开一个新的终端(前面那个roscore不要关闭)

roscore = ros +core:master(提供ros的命名服务)+rosoutstdout/stderr+ parameter server (参数服务之后会介绍);

rosnode = ros +node ;ros用来获取关于node信息的工具;

rosrun = ros + run;从一个给定的package运行一个node.

1.1写一个发布者Node

“Node”是连接在ROS网络中一个可执行单元的术语.这里我们创建一个会不断广播messages的发布者(“talker”node.

改变目录到你之前创建的工作空间的beginner_tutorials package中:

cd ~/catkin_ws/src/beginner_tutorials

 

创建ROS packages

必须包含的两个文件 catkin compliant(编译) package.xml文件(提供关于package的元信息)

包含一个使用catkinCMakeLists.txt文件

一个文件夹中不允许有超过两个的package

工作空间的构成:

workspace_folder/        -- WORKSPACE  

  src/                   -- SOURCE SPACE

    CMakeLists.txt       -- 'Toplevel' CMake file, provided by catkin

    package_1/

      CMakeLists.txt     -- CMakeLists.txt file for package_1

      package.xml        -- Package manifest for package_1

    ...

    package_n/

      CMakeLists.txt     -- CMakeLists.txt file for package_n

      package.xml        -- Package manifest for package_n

        

创建新的package

catkin_create_pkg 脚本创建一个做'beginner_tutorials'package,它依赖于std_msgsroscpp,和roscpy

命令:

catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

 

启用setup 文件

现在需要在catkin工作空间编译package

$ cd ~/catkin_ws

$ catkin_make

执行该命令后会在devel文件夹下生成一个和在/opt/ros/$ROSDISTRO_NAME(ROS版本名这里是/opt/ros/indigo)下相似的结构。

为把工作空间添加到ROS环境变量你需要执行:

$ source ~/catkin_ws/devel/setup.bash

使setup文件生效

 

使你的环境设置文件生效

source /opt/ros/%YOUR_ROS_DISTRO%/setup.bash()

$ source /opt/ros/groovy/setup.bash     (For Groovy for instance)   indigo

 

SRC 中的代码编译

# In a catkin workspace

$ catkin_make

$ catkin_make install  # (optionally)

以上代码可以编译在src文件夹中的任何catkin 工程

如果你的源代码不在src中,可以用my_src代替编译(如果出错,说明my_src不存在):

# In a catkin workspace

$ catkin_make --source my_src

$ catkin_make install --source my_src  # (optionally)

 

 

小型仿真器安装

$ sudo apt-get install ros-<distro>-ros-tutorials

<distro>是你的版本名字   indigo 

 

用一下命令递归改变文件夹的所有者

$ sudo chown -R <your_username> ~/.ros

 

rosnode list列出活动的node.

$ rosnode list

rosnode info命令可以返回特定node的信息

$ rosnode info /rosout

 

使用rosrun

rosrun允许你在一个package中去用package的名字直接运行一个node(不需要知道package的路径)。

用法:      $ rosrun [package_name] [node_name]

因此我们可以利用rosrun去运行在turtlesimpackage中的turtlesim_node

在一个新的终端中运行:

$ rosrun turtlesim turtlesim_node

 

turtle_teleop_key 在这个topic上发布按键敲击,而turtlesim订阅同样的topic接受按键敲击.让我们用rqt_graph显示现在正在运行的topicnodes.

 

rqt_grah

rqt_grah创建了一个动态的图形显示系统上正在进行什么,rqt_grahqpt package的一部分.运行:

$ sudo apt-get install ros-<distro>-rqt

$ sudo apt-get install ros-<distro>-rqt-common-plugins

<distro>用你的ros版本名替代

再在新终端输入:

$ rosrun rqt_graph rqt_graph

 

 

rostopic工具允许你从rostopic中获得信息.

通过:

$ rostopic -h

可以获得等多命令选项

 

对于ROS Hydro和之后的版本:

$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

这会给turtle发布一个message告诉它线速度2.0,角速度1.8.

 

这个命令十分复杂,所以我们仔细看看它的每个参数

对于ROS Hydro和之后的版本:

这个命令会发送messages给给定的topic:

rostopic pub

这个选项使得rostopic只发布一条message然后退出:

 -1 

这是要发布给它信息的那个topic:

/turtle1/cmd_vel

这是发布topic时的message类型:

geometry_msgs/Twist

双虚线告诉选项剖析器接下来的参数都不是选择,以免把负号后面的参数当成参数选项。

--

一个geometry_msgs/Twist 有两组由三个浮点元素组成得的向量:线性的和角度的.这样的话,'[2.0, 0.0, 0.0]'就是线性值x=2.0,y=0.0,z=0.0,'[0.0, 0.0, 1.8]'就是角度的值x=0.0,y=0.0,z=1.8.这些参数遵从YAML 语法规则。更多信息查看YAML command line documentation

'[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]' 

你也许注意到小乌龟已经停止了;这是因为小乌龟需要稳定的1HZ的命令流去保持运动。我们可以用rostopic pub -r命令发布一个稳定的命令流。

对于ROS Hydro和之后的版本:

$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

这将以1HZ的速度去发布速度命令给速度topic.

 

使用rosservice 

rosservice可以轻易的附着在ROS的客户或者服务框上,rosservice 可以有许多命令可以在topic上使用,如下所示:

用法:

rosservice list         print information about active services

rosservice call         call the service with the provided args

rosservice type         print service type

rosservice find         find services by service type

rosservice uri          print service ROSRPC uri

 

使用rosparam

rosparam允许你储存和操作在ROS parameter server上的数据,parameter server可以储存整形,浮点型,布尔型,字典型和链表型的数据.rosparam 使用YAML 审定语言以符合语法.简单的例子:YAML看起来十分自然,1是整形,1.0是浮点型,one是字符串,true是布尔型,[1,2,3]是一列的整形,{a:b,c:d}是字典型,rosparam有许多命令可以运行用在parameters上,如下所示:

 

rosparam set            set parameter

rosparam get            get parameter

rosparam load           load parameters from file

rosparam dump           dump parameters to file

rosparam delete         delete parameter

rosparam list           list parameter names

 

rosparam setrosparam get

用法:

rosparam set [param_name]

rosparam get [param_name]

改变背景颜色中的红色比例:

$ rosparam set background_r 150

然后调用clear service使这个参数改变生效:

 

使用roslaunch

roslaunch按照launch文件中的定义去启动nodes

用法:

$ roslaunch [package] [filename.launch]

首先进入我们之前创建和编译的beginner_tutorials package

$ roscd beginner_tutorials

 

创建一个叫做turtlemimic.launchlaunch文件  创建文件 .cpp

gedit turtlemimic.launch 

ubuntu默认的编辑器gedit创建一个launch文件。

 

现在我们用roslaunch 启动launch文件

$ roslaunch beginner_tutorials turtlemimic.launch

 

rosed.

rosedrosbash套件的一部分.它可以使你通过package的名字直接编辑一个package中的文件而不用输入package的整个路径.

用法:

$ rosed [package_name] [filename]

例子:

$rosed roscpp Logger.msg

 

创建一个msg   echo 写入

让我们在之前的教程创建的package中创建一个新的msg.

$ cd ~/catkin_ws/src/beginner_tutorials

$ mkdir msg

echo "int64 num" > msg/Num.msg

上面例子的.msg文件只有一行.当然你也可以通过添加其它元素创建一个更加复杂的文件,每行一个元素,像这样:

string first_name

string last_name

uint8 age

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值