其他分享
首页 > 其他分享> > 【ROS】ROS使用

【ROS】ROS使用

作者:互联网

一、构建软件包

首先要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)提供数据。

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套件的一部分。利用它可以直接通过软件包名编辑包中的文件,而无需键入完整路径。

 

 

 

 

 

 

 

标签:rqt,0.0,rostopic,使用,turtlesim,ROS,节点
来源: https://blog.csdn.net/weixin_41977337/article/details/112275638