ROS小乌龟案例 学习笔记(三)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/JDWell/article/details/82527723

启动roscare

$ roscore

获得节点信息:

获得参数跟详细解释:

$ rosnode <param> -h

获取正在运行的节点的相关信息:

$ rosnode list

启动新节点:

$ rosrun turtlesim turtlesim_node

查看节点信息,可以获得很多用于程序调试的信息:

$ rosnode info /turtlesim

输出

--------------------------------------------------------------------------------
Node [/turtlesim]
Publications:
 * /rosout [rosgraph_msgs/Log]
 * /turtle1/color_sensor [turtlesim/Color]
 * /turtle1/pose [turtlesim/Pose]

Subscriptions:
 * /turtle1/cmd_vel [unknown type]

Services:
 * /clear
 * /kill
 * /reset
 * /spawn
 * /turtle1/set_pen
 * /turtle1/teleport_absolute
 * /turtle1/teleport_relative
 * /turtlesim/get_loggers
 * /turtlesim/set_logger_level


contacting node http://ubuntu:33525/ ...
Pid: 3209
Connections:
 * topic: /rosout
    * to: /rosout
    * direction: outbound
    * transport: TCPROS

使用箭头控制海龟移动指令:

$ rosrun turtlesim turtle_teleop_key

查看节点teleop_turtle信息

ubuntu@ubuntu:~$ rosnode info /teleop_turtle
--------------------------------------------------------------------------------
Node [/teleop_turtle]
Publications:
 * /rosout [rosgraph_msgs/Log]
 * /turtle1/cmd_vel [geometry_msgs/Twist]

Subscriptions: None

Services:
 * /teleop_turtle/get_loggers
 * /teleop_turtle/set_logger_level


contacting node http://ubuntu:42629/ ...
Pid: 3349
Connections:
 * topic: /rosout
    * to: /rosout
    * direction: outbound
    * transport: TCPROS
 * topic: /turtle1/cmd_vel
    * to: /turtlesim
    * direction: outbound
    * transport: TCPROS

使用命令查看主清单:

运行一下命令行使用箭头键查看消息产生时发送的数据:

$ rostopic echo /turtle1/cmd_vel

查看主题发送的消息类型:

$ rostopic type /turtle1/cmd_vel

显示

geometry_msgs/Twist

查看消息字段:

$ rosmsg show geometry_msgs/Twist

已知上述信息,可通过rostopic pub [topic] [msg type] [args]命令直接发布主题:

rostopic pub -r 1 /turtle1/cmd_vel geometry_msgs/Twist '{linear: {x: 2.0, y: 0.0, z: 0.0},angular:{x: 0.0, y: 0.0,z: 2.0}}'
登录谷歌搜索rostopic可以查看详细信息

服务

使用rosservice工具与服务交互

rosservice args/service 输出服务参数
rosservice call/service 根据命令行参数调用服务
rosservice find msg-type 根据服务类型查询服务
rosservice info /service 输出服务信息
rosservice list 列出服务清单
rosservice type/service 输出服务类型
rosservice uri/service 输出ROSRPC URI服务

ubuntu@ubuntu:~$ rosservice list

输出:
/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/rostopic_4742_1536450656570/get_loggers
/rostopic_4742_1536450656570/set_logger_level
/rostopic_4766_1536450738742/get_loggers
/rostopic_4766_1536450738742/set_logger_level
/rostopic_4786_1536450768102/get_loggers
/rostopic_4786_1536450768102/set_logger_level
/rostopic_4803_1536450811800/get_loggers
/rostopic_4803_1536450811800/set_logger_level
/rostopic_4818_1536450851920/get_loggers
/rostopic_4818_1536450851920/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 type /clear

输出

std_srvs/Empty
调用服务,rosservice call [service] [args]命令:

$ rosservice call /clear

执行上边命令之后,turtlesim 窗口中,小海龟移动产生的线条消失

ubuntu@ubuntu:~$ rosservice type /spawn | rossrv show
float32 x
float32 y
float32 theta
string name
---
string name
 

ubuntu@ubuntu:~$ rosservice type /spawn
turtlesim/Spawn
输入下边命令

ubuntu@ubuntu:~$ rossrv show turtlesim/Spawn
float32 x
float32 y
float32 theta
string name
---
string name
通过这些字段,可以知道如何调用服务.

ubuntu@ubuntu:~$ rosservice call /spawn 3 3 0.2 "new_turtle"
name: "new_turtle"
结果图:

参数服务器使用:

参数服务器存储所有节点均可访问的共享数据,ROS中用来管理参数服务器的工具称为rosparam

rosparam set parameter value 设置参数值
rosparam get parameter 获取参数值
rosparam load file 从文件加载参数
rosparam dump file 将参数保存到一个文件
rosparam delete parameter 删除参数
rosparam list 列出了所有参数名

例如:
ubuntu@ubuntu:~$ rosparam list

输出:
/background_b
/background_g
/background_r
/rosdistro
/roslaunch/uris/host_ubuntu__40827
/rosversion
/run_id
上边的背景(backgrund)是turtlesim节点参数,这些参数可以改变窗口的颜色

读取某个,可使用get参数,

$ rosparam get /background_b

为了设定一个新值可以使用set参数:

ubuntu@ubuntu:~$ rosparam set /background_b 1000
使用rosparam dump [file_name]来保持参数服务器:

$ rosparam dump save.yaml

使用rosparm load [file_name] [namespace]向参数服务器加载新的数据文件:

$ rosparam load load.yaml namespace

猜你喜欢

转载自blog.csdn.net/JDWell/article/details/82527723