初始化空间信息:
1.首先需要创建工作空间,比如catkin_ws,我们一般将package包放在src文件夹下面,一般创建空间以后是没有其余子目录的,src自己创建,并在src下进行初始化:
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace
其余的类似devel等文件夹通过编译make指令进行自动创建:
$ cd ~/catkin_ws
$ catkin_make
2.每次编写新的package包之后都需要将其路径放入ros中以便快速查找到,source一下:
$ source ~/catkin_ws/devel/setup.bash
$ rospack profile
$ echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
3.当你要删除自己创建的包时不要去直接删除src目录,二十去执行:
$ cd ~/catkin_ws
$ \rm -rf devel build install
做完上述步骤之后就可以重新编译:
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash
当然,如果你只需要重新编译其中的一个包的话也可以直接:
$ cd ~/catkin_ws
$ catkin_make --pkg package_name
4.当你使用之前版本rosbuild的时候可能需要以下命令:
$ rosws init ~/ros_workspace ~/catkin_ws/devel
当出现这种情况说明你没有安装相应软件:
rosws: command not found
你可以使用以下语句安装并再执行:
$ sudo apt-get install python-rosinstall
常用命令(以下操作的实现需要你将包路径存放在你的ROS_PACKAGE_PATH文件中才可以被访问到):
#路径列表:
$ echo $ROS_PACKAGE_PATH
#包的查找:
$ rospack find [package_name]
$ rospack find roscpp
#切换目录:
$ roscd [locationname[/subdir]]
$ roscd roscpp
#日志路径:
$ roscd log
#详细列表:
$ rosls [locationname[/subdir]]
$ rosls roscpp_tutorials
创建和执行最简单的应用:
1.首先认识一下包的结构:
my_package/
CMakeLists.txt
package.xml
再认识一下含有工作空间的结构:
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
2.现在开始创建一个包package:
$ cd ~/catkin_ws/src
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
这里使用了catkin_create_pkg命令创建包的结构,中括号里填写包的依赖包名:
# catkin_create_pkg [depend1] [depend2] [depend3]
3.编译并添加包路径:
$ cd ~/catkin_ws
$ catkin_make
$ . ~/catkin_ws/devel/setup.bash
catkin_make能够在devel产生变化,第三步能够将工作空间添加到ROS环境中去。
4.关于包的依赖(可以创建时直接指定也可以后续在package.xml中添加):
查询某个包的一级依赖:
$ rospack depends1 beginner_tutorials
也可以直接进入package.xml文件直接看:
$ cat package.xml
其内部结构如下:
...
catkin
roscpp
rospy
std_msgs
...
当然,也有可能包的依赖包还依赖有自己的包(rospy为beginner_tutorials的依赖包):
$ rospack depends1 rospy
自然我们也有直接查看所有包的指令:
$ rospack depends beginner_tutorials
5.自然我们先在可以查看创建的包的信息了package.xml,其他信息自由操作,但是这里有个凭证license需要填写,一般可写:
BSD
自此完整package.xml如下:
1
2
3 beginner_tutorials
4 0.1.0
5 The beginner_tutorials package
6
7 Your Name
8 BSD
9 http://wiki.ros.org/beginner_tutorials
10 Jane Doe
11
12 catkin
13
14 roscpp
15 rospy
16 std_msgs
17
18 roscpp
19 rospy
20 std_msgs
21
22
6.编译新建的包:
首先要将环境搭建好:
$ source /opt/ros/%YOUR_ROS_DISTRO%/setup.bash
$ source /opt/ros/kinetic/setup.bash (For Kinetic for instance)
编译(其实就是之前的操作,这里详细看看):
# In a catkin workspace
$ catkin_make [make_targets] [-DCMAKE_VARIABLES=...]
上句其实就是原来版本的好多句集成语句:
# In a CMake project
$ mkdir build
$ cd build
$ cmake ..
$ make
$ make install # (optionally)
所以本版本直接一条:
# In a catkin workspace
$ catkin_make
$ catkin_make install # (optionally)
在src下编译:
$ catkin_make
节点的详细介绍:
1.准备工作:
$ sudo apt-get install ros-indigo-ros-tutorials
2.启动ros系统:
$ roscore
3.此时系统启动节点rosout,可以用以下命令查看当前开启节点:
$ rosnode list
将会看到:/rosout
当然也可以查看某个节点详细信息:
$ rosnode info /rosout
4.启动选定节点:
$ rosrun [package_name] [node_name]
$ rosrun turtlesim turtlesim_node
也可以给自己启动的节点改名字:
$ rosrun turtlesim turtlesim_node __name:=my_turtle
当你查看自己的节点通不通时:
$ rosnode ping my_turtle
主题的详细介绍:
1.启动ROS:
$ roscore
2.对于上一个里的turtlesim包,启动它的一个节点,用来显示乌龟:
$ rosrun turtlesim turtlesim_node
启动这个节点就是接收键盘方向信息并移动乌龟:
$ rosrun turtlesim turtle_teleop_key
3.上述2步骤中,turtle_teleop_key是发布者,他会发布坐标信息变化主题,turtlesim作为接收者去接到信息改变乌龟的位置
这里我们使用rqt_graph包来进行topic的说明演示,先下载安装:
$ sudo apt-get install ros-
-rqt
$ sudo apt-get install ros--rqt-common-plugins
然后我们就可以用rqt_graph来显示目前我们节点间的通信方式了:
$ rosrun rqt_graph rqt_graph
(一般都是几个圈加链接圈与圈之间的箭头,箭头上显示的是传送的消息格式)
3.介绍有关topic命令:
[1]:
rostopic echo [topic]
$ rostopic echo /turtle1/cmd_vel
这样便会显示发布在topic上的数据信息,这里我们查看了/turtle1/cmd_vel
linear:
x: 2.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0
---
linear:
x: 2.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0
---
[2]:
$ rostopic list -h/-v
4.ROS消息机制:
查看主题的消息类型:
rostopic type [topic]
当我们执行:
$ rostopic type /turtle1/cmd_vel
得到:
geometry_msgs/Twist
同时可以使用rosmsg查看消息的详细信息:
$ rosmsg show geometry_msgs/Twist
得到:
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
5.主题和消息的使用:
[1]:
rostopic pub [topic] [msg_type] [args]
我们举例:
$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
-1表示就发一遍停止,/turtle1/cmd_vel是要发表到这个主题上, geometry_msgs/Twist表示要发送的消息类型,后续是具体消息内容
这样之后会发现乌龟绕圆滑动了一部分。
再举例:
$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
[2]:
rostopic hz [topic]
表示显示数据发布的频率。
举例看turtlesim_node发布/turtle1/pose的频率:
$ rostopic hz /turtle1/pose
显示得到:
subscribed to [/turtle1/pose]
average rate: 59.354
min: 0.005s max: 0.027s std dev: 0.00284s window: 58
average rate: 59.459
min: 0.005s max: 0.027s std dev: 0.00271s window: 118
average rate: 59.539
min: 0.004s max: 0.030s std dev: 0.00339s window: 177
average rate: 59.492
min: 0.004s max: 0.030s std dev: 0.00380s window: 237
average rate: 59.463
min: 0.004s max: 0.030s std dev: 0.00380s window: 290
可以使用综合语句:
$ rostopic type /turtle1/cmd_vel | rosmsg show
6.画图工具介绍:
启动工具:
$ rosrun rqt_plot rqt_plot