服务与属性:
服务:
服务允许节点发送请求并接收回应(request、response)
1.主要指令:
rosservice list print information about active services
rosservice call call the service with the provided args
rosservice type print service type
rosservice find find services by service type
rosservice uri print service ROSRPC uri
2.命令介绍:
$ rosservice list
一般可以看到:
/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
查看clear服务的类型:
$ rosservice type clear
得到:
std_srvs/Empty
启用某个服务:
$ rosservice call /clear
就会发现之前乌龟的轨迹都消失了。
下面这条语句是综合语句:
$ rosservice type spawn| rossrv show
得到:
float32 x
float32 y
float32 theta
string name
---
string name
会发现有俩部分,上部分是请求数据格式,下部是回应数据格式。
下面这条语句会在界面中新创建一个乌龟
$ rosservice call spawn 2 2 0.2 ""
属性:
rosparam set set parameter
rosparam get get parameter
rosparam load load parameters from file
rosparam dump dump parameters to file
rosparam delete delete parameter
rosparam list list parameter names
1.查看列表:
$ rosparam list
获得:
/background_b
/background_g
/background_r
/roslaunch/uris/aqy:51932
/run_id
2.修改属性值:
rosparam set [param_name]
rosparam get [param_name]
举例:
$ rosparam set background_r 150
然后执行以下语句就可以改变背景颜色了:
$ rosservice call clear
当然,可以使用以下语句直接全部显示:
$ rosparam get /
得到:
background_b: 255
background_g: 86
background_r: 150
roslaunch:
uris: {'aqy:51932': 'http://aqy:51932/'}
run_id: e07ea71e-98df-11de-8875-001b21201aa8
3.保存
上述改变只是暂时的,如果你想保存的话可以使用:
rosparam dump [file_name] [namespace]
rosparam load [file_name] [namespace]
这里我们保存下:
$ rosparam dump params.yaml
当我们再次使用时:
$ rosparam load params.yaml copy
$ rosparam get copy/background_b
得到:
255
使用rqt_console和roslaunch
1.rqt_console:
以下是使用本节的主要源文件:
$ sudo apt-get install ros-<distro>-rqt ros-<distro>-rqt-common-plugins ros-<distro>-turtlesim
然后我们知道rqt_concle是显示控制台,rqt_logger_level是显示节点当前状态,学习之前先打开控制台:
$ rosrun rqt_console rqt_console
$ rosrun rqt_logger_level rqt_logger_level
接下来我们正式运行程序:
$ rosrun turtlesim turtlesim_node
我们将logger_level中rosout/的状态改为warn,这样在控制台就会显示warn信息
很简单,我们发布一个信息,让乌龟走出界,这样就会收到warn信息在console上,提示我们乌龟越界:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'
2.roslaunch:
我们知道程序是有很多步骤组成,这里节点也是,单一节点没有意义,我们将节点组合起来放入launch文件中,统一一次性全部启动:
$ roslaunch [package] [filename.launch]
这里我们举例说明:
切换目录:
$ roscd beginner_tutorials
如果发现无法成功,说明该路径未包含在搜寻路径中,我们执行:
$ cd ~/catkin_ws
$ source devel/setup.bash
$ roscd beginner_tutorials
创建launch文件夹并进入:
$ mkdir launch
$ cd launch
创建turtlemimic.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
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
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]'
会看到两只乌龟在绕圈。
此时我们查看节点关系图:
$ rqt 或者 $ rqt_graph
rosed编辑语句:
$ rosed [package_name] [filename]
比如可以直接:
$ rosed roscpp Logger.msg
创建消息和服务
1.msg消息文件只是保存消息样式的文件,而srv服务主要有两部分组成:request和response
msg文件保存于msg/,srv文件保存于srv/。
msg文件里的格式使用有:
int8, int16, int32, int64 (plus uint*)
float32, float64
string
time, duration
other msg files
variable-length array[] and fixed-length array[C]
并且我们会看到一个很常见的Header在msg文件头,这个header保存有时间戳和规格化坐标信息。
常见的msg如下:
Header header
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist
对比srv文件有两部分,上部分request下部分response:
int64 A
int64 B
---
int64 Sum
2.msg的使用:
首先让我们创建一个新的消息:
$ cd ~/catkin_ws/src/beginner_tutorials
$ mkdir msg
$ echo "int64 num" > msg/Num.msg
当然上式中我们只写了一条,你也可以自己加好多:
string first_name
string last_name
uint8 age
uint32 score
另外要保证你的消息能够被转换成代码,必须要把package.xml中如下代码开启:
<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>
必须保证CMakeLists.txt中:
[1]# Do not just add this to your CMakeLists.txt, modify the existing text to add message_generation before the closing parenthesis
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
[2]add_message_files(
FILES
Num.msg //自己修改的,因为我自己的msg是这个
)
[3]generate_messages(
DEPENDENCIES
std_msgs
)
通过以上步骤,保证在运用时能够找到你的msg文件。
接下来就是使用msg了:
[1]首先让我们看下msg里面的内容:
$ rosmsg show [message type]
$ rosmsg show beginner_tutorials/Num
显示结果:
int64 num
[2]当然,如果msg名称唯一,可以不用加包名:
$ rosmsg show Num
显示:
[beginner_tutorials/Num]:
int64 num
使用服务:
1.同样先创建对应文件夹:
$ roscd beginner_tutorials
$ mkdir srv
当然我们也可以复制别的包的文件过来:
$ roscp [package_name] [file_to_copy_path] [copy_path]
$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
同理,要使用服务变为代码,需要修改配置文件package.xml:
<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>
CMakeLists.txt文件修改:
[1]# Do not just add this line to your CMakeLists.txt, modify the existing line
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
[2]移除#号:
# add_service_files(
# FILES
# Service1.srv
# Service2.srv
# )
add_service_files(
FILES
AddTwoInts.srv
)
2.使用rossrv:
查看:
$ rossrv show <service type>
$ rossrv show beginner_tutorials/AddTwoInts
显示:
int64 a
int64 b
---
int64 sum
同理,最简洁形式查看所有信息:
$ rossrv show AddTwoInts
[beginner_tutorials/AddTwoInts]:
int64 a
int64 b
---
int64 sum
[rospy_tutorials/AddTwoInts]:
int64 a
int64 b
---
int64 sum
不论你使用消息或者服务,必须要做的是:
改变打开CMakeLists.txt:
# generate_messages(
# DEPENDENCIES
# # std_msgs # Or other packages containing msgs
# )
在上面中需要什么msg就填写即可。
重新编译系统文件:
# In your catkin workspace
$ cd ../..
$ catkin_make install
$ cd -
服务:
服务允许节点发送请求并接收回应(request、response)
1.主要指令:
rosservice list print information about active services
rosservice call call the service with the provided args
rosservice type print service type
rosservice find find services by service type
rosservice uri print service ROSRPC uri
2.命令介绍:
$ rosservice list
一般可以看到:
/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
查看clear服务的类型:
$ rosservice type clear
得到:
std_srvs/Empty
启用某个服务:
$ rosservice call /clear
就会发现之前乌龟的轨迹都消失了。
下面这条语句是综合语句:
$ rosservice type spawn| rossrv show
得到:
float32 x
float32 y
float32 theta
string name
---
string name
会发现有俩部分,上部分是请求数据格式,下部是回应数据格式。
下面这条语句会在界面中新创建一个乌龟
$ rosservice call spawn 2 2 0.2 ""
属性:
rosparam set set parameter
rosparam get get parameter
rosparam load load parameters from file
rosparam dump dump parameters to file
rosparam delete delete parameter
rosparam list list parameter names
1.查看列表:
$ rosparam list
获得:
/background_b
/background_g
/background_r
/roslaunch/uris/aqy:51932
/run_id
2.修改属性值:
rosparam set [param_name]
rosparam get [param_name]
举例:
$ rosparam set background_r 150
然后执行以下语句就可以改变背景颜色了:
$ rosservice call clear
当然,可以使用以下语句直接全部显示:
$ rosparam get /
得到:
background_b: 255
background_g: 86
background_r: 150
roslaunch:
uris: {'aqy:51932': 'http://aqy:51932/'}
run_id: e07ea71e-98df-11de-8875-001b21201aa8
3.保存
上述改变只是暂时的,如果你想保存的话可以使用:
rosparam dump [file_name] [namespace]
rosparam load [file_name] [namespace]
这里我们保存下:
$ rosparam dump params.yaml
当我们再次使用时:
$ rosparam load params.yaml copy
$ rosparam get copy/background_b
得到:
255
使用rqt_console和roslaunch
1.rqt_console:
以下是使用本节的主要源文件:
$ sudo apt-get install ros-<distro>-rqt ros-<distro>-rqt-common-plugins ros-<distro>-turtlesim
然后我们知道rqt_concle是显示控制台,rqt_logger_level是显示节点当前状态,学习之前先打开控制台:
$ rosrun rqt_console rqt_console
$ rosrun rqt_logger_level rqt_logger_level
接下来我们正式运行程序:
$ rosrun turtlesim turtlesim_node
我们将logger_level中rosout/的状态改为warn,这样在控制台就会显示warn信息
很简单,我们发布一个信息,让乌龟走出界,这样就会收到warn信息在console上,提示我们乌龟越界:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'
2.roslaunch:
我们知道程序是有很多步骤组成,这里节点也是,单一节点没有意义,我们将节点组合起来放入launch文件中,统一一次性全部启动:
$ roslaunch [package] [filename.launch]
这里我们举例说明:
切换目录:
$ roscd beginner_tutorials
如果发现无法成功,说明该路径未包含在搜寻路径中,我们执行:
$ cd ~/catkin_ws
$ source devel/setup.bash
$ roscd beginner_tutorials
创建launch文件夹并进入:
$ mkdir launch
$ cd launch
创建turtlemimic.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
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
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]'
会看到两只乌龟在绕圈。
此时我们查看节点关系图:
$ rqt 或者 $ rqt_graph
rosed编辑语句:
$ rosed [package_name] [filename]
比如可以直接:
$ rosed roscpp Logger.msg
创建消息和服务
1.msg消息文件只是保存消息样式的文件,而srv服务主要有两部分组成:request和response
msg文件保存于msg/,srv文件保存于srv/。
msg文件里的格式使用有:
int8, int16, int32, int64 (plus uint*)
float32, float64
string
time, duration
other msg files
variable-length array[] and fixed-length array[C]
并且我们会看到一个很常见的Header在msg文件头,这个header保存有时间戳和规格化坐标信息。
常见的msg如下:
Header header
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist
对比srv文件有两部分,上部分request下部分response:
int64 A
int64 B
---
int64 Sum
2.msg的使用:
首先让我们创建一个新的消息:
$ cd ~/catkin_ws/src/beginner_tutorials
$ mkdir msg
$ echo "int64 num" > msg/Num.msg
当然上式中我们只写了一条,你也可以自己加好多:
string first_name
string last_name
uint8 age
uint32 score
另外要保证你的消息能够被转换成代码,必须要把package.xml中如下代码开启:
<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>
必须保证CMakeLists.txt中:
[1]# Do not just add this to your CMakeLists.txt, modify the existing text to add message_generation before the closing parenthesis
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
[2]add_message_files(
FILES
Num.msg //自己修改的,因为我自己的msg是这个
)
[3]generate_messages(
DEPENDENCIES
std_msgs
)
通过以上步骤,保证在运用时能够找到你的msg文件。
接下来就是使用msg了:
[1]首先让我们看下msg里面的内容:
$ rosmsg show [message type]
$ rosmsg show beginner_tutorials/Num
显示结果:
int64 num
[2]当然,如果msg名称唯一,可以不用加包名:
$ rosmsg show Num
显示:
[beginner_tutorials/Num]:
int64 num
使用服务:
1.同样先创建对应文件夹:
$ roscd beginner_tutorials
$ mkdir srv
当然我们也可以复制别的包的文件过来:
$ roscp [package_name] [file_to_copy_path] [copy_path]
$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
同理,要使用服务变为代码,需要修改配置文件package.xml:
<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>
CMakeLists.txt文件修改:
[1]# Do not just add this line to your CMakeLists.txt, modify the existing line
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
[2]移除#号:
# add_service_files(
# FILES
# Service1.srv
# Service2.srv
# )
add_service_files(
FILES
AddTwoInts.srv
)
2.使用rossrv:
查看:
$ rossrv show <service type>
$ rossrv show beginner_tutorials/AddTwoInts
显示:
int64 a
int64 b
---
int64 sum
同理,最简洁形式查看所有信息:
$ rossrv show AddTwoInts
[beginner_tutorials/AddTwoInts]:
int64 a
int64 b
---
int64 sum
[rospy_tutorials/AddTwoInts]:
int64 a
int64 b
---
int64 sum
不论你使用消息或者服务,必须要做的是:
改变打开CMakeLists.txt:
# generate_messages(
# DEPENDENCIES
# # std_msgs # Or other packages containing msgs
# )
在上面中需要什么msg就填写即可。
重新编译系统文件:
# In your catkin workspace
$ cd ../..
$ catkin_make install
$ cd -