该文是古月居老师课程的学习笔记!!!
ROS文件用途
ROS被默认安装在计算机下:/opt
/opt下有5个文件夹
1./opt/ros/kinetic/bin – 被放置一些具体的可执行程序,一些功能包提供的可在终端里直接可执行的命令(如roscore、rosnode);故之前应该设置环境变量,让系统知道bin文件夹在什么路径里面;
2./opt/ros/kinetic/etc – ROS的一些配置文件;
3./opt/ros/kinetic/include – 这里包含所有通过命令行或通过终端安装的这些功能包的代码的头文件;(.h文件)
4./opt/ros/kinetic/lib – 包含可执行的python文件;保存的是我们所有通过终端安装的这些功能包的可执行程序(节点node),通过运行这些节点也就可以启动这些相应功能包里的功能
5./opt/ros/kinetic/share – 我们安装的这些功能包的接口(话题、服务、action)的功能信息
/opt下有5个文件
启动ROS Master
tangshp@tangshp-OptiPlex-7060:~$ roscore#启动Ros Master
... logging to /home/tangshp/.ros/log/0c4eb382-ee23-11e8-8b29-8cec4b8e96d3/roslaunch-tangshp-OptiPlex-7060-3437.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://tangshp-OptiPlex-7060:44195/
ros_comm version 1.12.14#ROS最核心的部分(通讯机制部分) 版本(通讯版本)
SUMMARY
========
PARAMETERS
* /rosdistro: kinetic
* /rosversion: 1.12.14
NODES
auto-starting new master
process[master]: started with pid [3448]
ROS_MASTER_URI=http://tangshp-OptiPlex-7060:11311/#运行Ros Master的主机资源地址;显示当前Ros Master所在位置(大网管所在位置),ROS是分布式框架,ROS在整个系统当中只能存在一个,其它的主机必须知道ROS Master所在位置
setting /run_id to 0c4eb382-ee23-11e8-8b29-8cec4b8e96d3
process[rosout-1]: started with pid [3461]
started core service [/rosout]
^C[rosout-1] killing on exit #通过Ctrl+C来退出Ros Master
[master] killing on exit
shutting down processing monitor...
... shutting down processing monitor complete
done
ROS 常用命令
命令 | 作用 |
---|---|
catkin_creat_pkg | 创建功能包 |
rospack | 获取功能包信息 |
catkin_make | 编译工作空间中的功能包 |
rosedep | 自动安装功能包依赖的其它包 |
roscd | 功能包目录跳转 |
roscp | 拷贝功能包中的文件 |
rosed | 编辑功能包中的文件 |
rosrun | 运行功能包中的可执行文件 |
roslaunch | 运行启动文件 |
➜ ~ rosnode --help #空格+--help查看使用方法
rosnode is a command-line tool for printing information about ROS Nodes.
Commands:
rosnode ping test connectivity to node
rosnode list list active nodes
rosnode info print information about node
rosnode machine list nodes running on a particular machine or list machines
rosnode kill kill a running node
rosnode cleanup purge registration information of unreachable nodes
Type rosnode <command> -h for more detailed usage, e.g. 'rosnode ping -h'
第一个ROS例程
1.打开第一个终端
roscore #启动Ros Master node
tangshp@tangshp-OptiPlex-7060:~$ roscore
... logging to /home/tangshp/.ros/log/f355cfea-ee37-11e8-8b29-8cec4b8e96d3/roslaunch-tangshp-OptiPlex-7060-6625.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://tangshp-OptiPlex-7060:35009/
ros_comm version 1.12.14
SUMMARY
========
PARAMETERS
* /rosdistro: kinetic #显示当前ROS的版本号是kinetic
* /rosversion: 1.12.14
NODES
auto-starting new master
process[master]: started with pid [6635]
ROS_MASTER_URI=http://tangshp-OptiPlex-7060:11311/
setting /run_id to f355cfea-ee37-11e8-8b29-8cec4b8e96d3
process[rosout-1]: started with pid [6648]
started core service [/rosout]
2.打开另一个终端
tangshp@tangshp-OptiPlex-7060:~$ rosrun turtlesim turtlesim_node #启动小海龟仿真器;该指令被执行后,会弹出小海龟仿真器界面;
#指令rosrun(运行功能包张的可执行文件)turtlesim(节点turtlesim_node这个节点所在功能包的名字)turtlesim_node(隶属于功能包turtlesim下面的一个节点)
#rosrun 的语法结构:rosrun [功能包名] [功能包下的节点名]
[ INFO] [1542878530.088091263]: Starting turtlesim with node name /turtlesim
[ INFO] [1542878530.092054992]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
效果如下
改变节点名字
➜ ~ rosrun turtlesim turtlesim_node __name:=Leo_Turtle#注意这是两个下划线
[ INFO] [1543984792.902628837]: Starting turtlesim with node name /Leo_Turtle
[ INFO] [1543984792.907337564]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
再打开新的终端查看节点列表
➜ ~ rosnode list
/Leo_Turtle
/rosout
3.再重新打开另一个终端
tangshp@tangshp-OptiPlex-7060:~$ rosrun turtlesim turtle_teleop_key #启动海龟控制节点;功能就是通过键盘来实现对小海龟控制这样一个功能
#turtle_teleop_key同turtlesim_node一样也是隶属于功能包turtlesim下的一个节点
Reading from keyboard
---------------------------
Use arrow keys to move the turtle.
对小海龟例程剖析
1.计算图(它可以展示整个系统的整体架构,显示系统中的所有节点及其之间的关系)
在上一步的基础上重新础上再打开一个终端;
tangshp@tangshp-OptiPlex-7060:~$ rqt_graph
/turtlesim --即蓝色仿真界面,turtlesim_node节点
/teleop_turtle --即turtle_teleop_key节点
/teleop_turtle 订阅 /turtlesim的话题
/rosout --订阅所有节点的话题信息,相当于日志的集中管理的节点
/rqt_gui_py_node_4238 --是当前rqt_graph节点
在Node Graph中使用debug勾选框,只显示关键节点;(过滤/rqt_gui_py_node_4238节点和/rosout 节点)
2.也可以使用rosnode list命令来查看当前系统存在多少节点
tangshp@tangshp-OptiPlex-7060:~$ rosnode list
➜ ~ rosnode list #显示系统当前节点列表
/rosout
/rqt_gui_py_node_4527
/teleop_turtle
/turtlesim
➜ ~ rosnode info /turtlesim #查看turtlesim_node节点的信息
--------------------------------------------------------------------------------
Node [/turtlesim] #节点的名字
Publications: #该节点发布的话题
* /rosout [rosgraph_msgs/Log]
* /turtle1/color_sensor [turtlesim/Color]
* /turtle1/pose [turtlesim/Pose]
Subscriptions: #该节点订阅的话题
* /turtle1/cmd_vel [geometry_msgs/Twist] #订阅了运动控制的话题;括号中的是话题名
Services: #该节点所提供的服务,可以通过其他工具来调用这些服务
* /clear
* /kill
* /reset
* /spawn
* /turtle1/set_pen
* /turtle1/teleport_absolute
* /turtle1/teleport_relative
* /turtlesim/get_loggers
* /turtlesim/set_logger_level
contacting node http://tangshp-OptiPlex-7060:37531/ ...
Pid: 3799 #该节点的id号
Connections:
* topic: /rosout
* to: /rosout
* direction: outbound (发布)
* transport: TCPROS #话题的通讯协议
* topic: /turtle1/cmd_vel
* to: /teleop_turtle (http://tangshp-OptiPlex-7060:40799/)
* direction: inbound (订阅)#inbound a.到达的,入境的 inbound flights/passengers 入境航班/乘客
* transport: TCPROS #话题的通讯协议
3.如何查看当前系统当中有哪些话题在发布/在订阅;某个话题具体信息
➜ ~ rostopic list #正在被发布的话题
/rosout
/rosout_agg
/statistics
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
➜ ~ rostopic info /turtle1/cmd_vel #rostopic info [话题]:查看该话题具体信息
Type: geometry_msgs/Twist
Publishers: #表面了该话题由哪个节点发布
* /teleop_turtle (http://tangshp-OptiPlex-7060:40799/)
Subscribers: #表面了该话题由哪个节点订阅
* /turtlesim (http://tangshp-OptiPlex-7060:37531/)
4.监听某个话题的具体内容
➜ ~ rostopic echo /turtle1/cmd_vel #监听话题/turtle1/cmd_vel实时发布的信息
linear:
x: 2.0 #线速度单位 m/s 只有x方向存在速度,前进为正,后退为负
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0
---
linear:
x: 0.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 2.0 #角速度单位 rad/s (逆时针为正)
---
---
^C% #通过Ctrl+c来关闭该节点
使用rostopic list
1.查看有哪些话题
➜ ~ rostopic list
/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
2.查看话题详细消息
➜ ~ rostopic list -h#查看rostopic list 的option介绍
Usage: rostopic list [/namespace]
Options:
-h, --help show this help message and exit
-b BAGFILE, --bag=BAGFILE
list topics in .bag file
-v, --verbose list full details about each topic
-p list only publishers
-s list only subscribers
--host group by host name
➜ ~ rostopic list -v #查看详细消息
Published topics:
* /turtle1/color_sensor [turtlesim/Color] 1 publisher
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
* /rosout [rosgraph_msgs/Log] 2 publishers
* /rosout_agg [rosgraph_msgs/Log] 1 publisher
* /turtle1/pose [turtlesim/Pose] 1 publisher
Subscribed topics:
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 subscriber
* /rosout [rosgraph_msgs/Log] 1 subscriber
查看消息类型及具体信息
➜ ~ rostopic type /turtle1/cmd_vel #查看消息类型
geometry_msgs/Twist
➜ ~ 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.终端里控制小海龟的运动
➜ ~ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear: #发布话题信息,在下面表中定义变量
x: 2.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0"
publishing and latching message. Press ctrl-C to terminate
^C%
➜ ~ rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:#发布话题信息,在下面表中定义变量;以频率(r)为10 1/s 发布话题
x: 2.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0"
^C%
5.查看可使用的服务机/查看某个服务的具体信息/如何使用服务
➜ ~ rosservice list #查看所有服务
/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/rqt_gui_py_node_4527/get_loggers
/rqt_gui_py_node_4527/set_logger_level
/spawn
/teleop_turtle/get_loggers
/teleop_turtle/set_logger_level
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level
➜ ~ rosservice info /spawn #查看服务/spawn的具体信息(该服务是调用一只海龟)
Node: /turtlesim #服务/spawn由节点/turtlesim提供
URI: rosrpc://tangshp-OptiPlex-7060:47067
Type: turtlesim/Spawn
Args: x y theta name #参数
➜ ~ rosservice call /spawn "x: 5.0 #再调用另外一只小海龟;设定起出现位置和姿势,还有他的名字
y: 5.0
theta: 0.0
name: 'Jack'"
name: "Jack"
6.rqt_plot可视化工具(某个话题信息绘制在图像中)
➜ ~ rqt_plot
/usr/lib/python2.7/dist-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')
PlotWidget.add_topic(): topic already subscribed: /turtle1/pose/x
PlotWidget.add_topic(): topic already subscribed: /turtle1/pose/y
#在图像界面的Topic中选中/turtle1/pose并添加/y,如图,就会出现y随时间的函数关系
效果如下
小知识
查看当前使用的shell
➜ ~ cat /etc/shells #查看当前使用的shell
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/bin/zsh
/usr/bin/zsh
ubuntu中快速显示桌面快捷键:Ctrl+win+d
ubuntu中如何使用zsh
ubuntu16.04下安装zsh和oh-my-zsh
安装后需要重新进行ROS环境配置
echo "source /opt/ros/kinetic/setup.zsh" >> ~/.zshrc
让该终端知道ros指令所在位置