一、构建软件包
首先要source一下:
source /opt/ros/kinetic/setup.bash
catkin_make 是一个命令行工具,它简化了标准catkin工作流程
在catkin工作空间下
$ catkin_make [make_targets] [-DCMAKE_VARIABLES=...]
如果你的源代码不在默认位置(catkin_ws/src),比如说存放在了my_src中,那可以这样来使用catkin_make:
# 在catkin工作空间下
$ catkin_make --source my_src
前文中利用catkin_create_pkg已经在~/catkin_ws/src中创建了一个beginner_tutorials的软件包,就可以用catkin_make进行编译。
二、ROS节点
计算图(Computation Graph)是一个由ROS进程组成的点对点网络,它们能够共同处理数据。ROS的基本计算图概念有节点(Nodes)、主节点(Master)、参数服务器(Parameter Server)、消息(Messages)、服务(Services)、话题(Topics)和袋(Bags),它们都以不同的方式向图(Graph)提供数据。
-
节点(Nodes):节点是一个可执行文件,它可以通过ROS来与其他节点进行通信。
-
消息(Messages):订阅或发布话题时所使用的ROS数据类型。
-
话题(Topics):节点可以将消息发布到话题,或通过订阅话题来接收消息。
-
主节点(Master):ROS的命名服务,例如帮助节点发现彼此。
-
rosout:在ROS中相当于stdout/stderr(标准输出/标准错误)。
roscore是你在运行所有ROS程序前首先要运行的命令(确保roscore正在运行)
roscore
然后会有如下信息:
... logging to ~/.ros/log/9cf88ce4-b14d-11df-8a75-00251148e8cf/roslaunch-machine_name-13039.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://machine_name:33919/
ros_comm version 1.4.7
SUMMARY
========
PARAMETERS
* /rosversion
* /rosdistro
NODES
auto-starting new master
process[master]: started with pid [13054]
ROS_MASTER_URI=http://machine_name:11311/
setting /run_id to 9cf88ce4-b14d-11df-8a75-00251148e8cf
process[rosout-1]: started with pid [13067]
started core service [/rosout]
rosnode显示当前正在运行的ROS节点信息。rosnode list命令会列出这些活动的节点:
rosnode list
输出:/rosout
rosnode info命令返回的是某个指定节点的信息:
rosnode info /rosout
rosrun可以让你用包名直接运行软件包内的节点(而不需要知道包的路径):
rosrun [package_name] [node_name]
所以现在我们试着运行turtlesim包中的turtlesim_node。
在一个新终端中:
rosrun turtlesim turtlesim_node
我们还需要通过键盘来控制turtle,打开一个新终端:
rosrun turtlesim turtle_teleop_key
三、ROS话题
turtlesim_node节点和turtle_teleop_key节点之间是通过一个ROS话题来相互通信的。turtle_teleop_key在话题上发布键盘按下的消息,turtlesim则订阅该话题以接收消息。
rqt_graph用动态的图显示了系统中正在发生的事情。rqt_graph是rqt程序包中的一部分。如果你发现没有安装,请:
sudo apt-get install ros-<distro>-rqt
sudo apt-get install ros-<distro>-rqt-common-plugins
rosrun rqt_graph rqt_graph
rostopic命令工具能让你获取ROS话题的信息:
rostopic echo可以显示在某个话题上发布的数据
rostopic echo [topic]
Eg:rostopic echo /turtle1/cmd_vel
rostopic list能够列出当前已被订阅和发布的所有话题
rostopic list -v
rostopic type命令用来查看所发布话题的消息类型
rostopic type [topic]
rostopic type /turtle1/cmd_vel
输出:geometry_msgs/Twist
rosmsg查看消息的详细信息:
rosmsg show geometry_msgs/Twist
rostopic pub -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]'
【以上命令会发送一条消息给turtlesim,告诉它以2.0大小的线速度和1.8大小的角速度移动】
用rostopic pub -r命令来发布源源不断的命令,以1 Hz的速度发布velocity指令到velocity话题上:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
四、ROS服务
服务(Services)是节点之间通讯的另一种方式。服务允许节点发送一个请求(request)并获得一个响应(response)。
rosservice list 输出活跃服务的信息 rosservice call 用给定的参数调用服务 rosservice type 输出服务的类型 rosservice find 按服务的类型查找服务 rosservice uri 输出服务的ROSRPC uri服务类型: /clear /kill /reset /rosout/get_loggers /rosout/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
rosparam能让我们在ROS参数服务器(Parameter Server)上存储和操作数据。参数服务器能够存储整型(integer)、浮点(float)、布尔(boolean)、字典(dictionaries)和列表(list)等数据类型。
rosparam set 设置参数 rosparam get 获取参数 rosparam load 从文件中加载参数 rosparam dump 向文件中转储参数 rosparam delete 删除参数 rosparam list 列出参数名/rosdistro /roslaunch/uris/host_nxt__43407 /rosversion /run_id /turtlesim/background_b /turtlesim/background_g /turtlesim/background_r
五、使用rqt_console和roslaunch
rqt_console连接到了ROS的日志框架,以显示节点的输出信息。
rqt_logger_level允许我们在节点运行时改变输出信息的详细级别,包括Debug、Info、Warn和Error`。
$ rosrun rqt_console rqt_console
$ rosrun rqt_logger_level rqt_logger_level
roslaunch可以用来启动定义在launch(启动)文件中的节点。
roslaunch [package] [filename.launch]
$ cd ~/catkin_ws
$ source devel/setup.bash
$ roscd beginner_tutorials
然后创建一个launch目录:
$ mkdir launch
$ cd launch
现在一起创建一个名为turtlemimic.launch的launch文件并复制粘贴以下内容进去:
1 <launch> 2 3 <group ns="turtlesim1"> 4 <node pkg="turtlesim" name="sim" type="turtlesim_node"/> 5 </group> 6 7 <group ns="turtlesim2"> 8 <node pkg="turtlesim" name="sim" type="turtlesim_node"/> 9 </group> 10 【此处我们创建了两个分组,并以命名空间(namespace)标签来区分,其中一个名为turtulesim1,另一个名为turtlesim2,两个分组中都有相同的名为sim的turtlesim节点。这样可以让我们同时启动两个turtlesim模拟器,而不会产生命名冲突。】 11 <node pkg="turtlesim" name="mimic" type="mimic"> 12 <remap from="input" to="turtlesim1/turtle1"/> 13 <remap from="output" to="turtlesim2/turtle1"/> 14 </node> 15 【在这里我们启动模仿节点,话题的输入和输出分别重命名为turtlesim1和turtlesim2,这样就可以让turtlesim2模仿turtlesim1了。】 16 </launch>
启动
roslaunch beginner_tutorials turtlemimic.launch
发送数据
$ rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
rosed是rosbash套件的一部分。利用它可以直接通过软件包名编辑包中的文件,而无需键入完整路径。
rosed是rosbash套件的一部分。利用它可以直接通过软件包名编辑包中的文件,而无需键入完整路径。