ROS学习记录(九):生成乌龟以及改变背景色
ROS学习记录(九):生成乌龟以及改变背景色
生成乌龟以及改变背景色
一、生成乌龟
需求描述 :编码实现向 turtlesim 发送请求,在乌龟显示节点的窗体指定位置生成一乌龟,这是一个服务请求操作。
结果演示 :
实现分析 :
- 首先,需要启动乌龟显示节点。
- 要通过ROS命令,来获取乌龟生成服务的服务名称以及服务消息类型。
- 编写服务请求节点,生成新的乌龟。
实现流程 :
- 通过ros命令获取服务与服务消息信息。
- 编码实现服务请求节点。
- 启动 roscore、turtlesim_node 、乌龟生成节点,生成新的乌龟。
1.服务名称与服务消息获取
获取话题:/spawn
1
rosservice list
获取消息类型:turtlesim/Spawn
1
rosservice type /spawn
获取消息格式: 如果使用
1
rosservice info /spawn
虽然可以得到参数个数和名字,但无法得到参数的类型,所以要使用下面这个命令
1
rossrv info turtlesim/Spawn
响应结果:
1
2
3
4
5
6
float32 x
float32 y
float32 theta
string name
---
string name
2.服务客户端实现
创建功能包需要依赖的功能包: roscpp rospy std_msgs turtlesim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include"ros/ros.h"
#include"turtlesim/Spawn.h"
/*
生成一只小乌龟
准备工作:
1.服务话题 /spawn
2.服务消息类型 turtlesim/Spawn
3.运行前先启动 turtlesim_node 节点
实现流程:
1.包含头文件
*/
int main(int argc, char *argv[])
{
setlocale(LC_ALL, "");
if(argc != 5)
{
ROS_INFO("参数错误,请重新输入");
return 0;
}
// 2.初始化 ros 节点
ros::init(argc, argv, "test_turtle_spawn");
// 3.创建 ros 句柄
ros::NodeHandle nh;
// 4.创建 service 客户端
ros::ServiceClient client = nh.serviceClient<turtlesim::Spawn>("/spawn");
turtlesim::Spawn turtle_data;
turtle_data.request.x = atof(argv[1]);
turtle_data.request.y = atof(argv[2]);
turtle_data.request.theta = atof(argv[3]);
turtle_data.request.name = argv[4];
// 5.等待服务启动
ros::service::waitForService("spawn");//需要传递话题参数
// 6.发送请求
bool spawn_flag = client.call(turtle_data);
// 7.处理响应
if (spawn_flag)
{
ROS_INFO("响应成功");
}
}
二、改变背景色
需求描述 : 修改 turtlesim 乌龟显示节点窗体的背景色,已知背景色是通过参数服务器的方式以 rgb 方式设置的。
结果演示:
实现分析:
- 首先,需要启动乌龟显示节点。
- 要通过ROS命令,来获取参数服务器中设置背景色的参数。
- 编写参数设置节点,修改参数服务器中的参数值。
实现流程 :
- 通过ros命令获取参数。
- 编码实现服参数设置节点。
- 启动 roscore、turtlesim_node 与参数设置节点,查看运行结果。
1.参数名获取
获取参数列表:
1
rosparam list
响应结果:
1
2
3
/turtlesim/background_b
/turtlesim/background_g
/turtlesim/background_r
2.参数修改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include"ros/ros.h"
/*
实现参数服务器中参数的增加和修改
实现:
两种方式
1.使用NodeHandle中的nh.setParam();
2.使用ros::param::set();
*/
int main(int argc, char *argv[])
{
ros::init(argc,argv,"test_param");
ros::NodeHandle nh;
//向参数服务器发送参数
ros::param::set("/turtlesim/background_r", 255);
ros::param::set("/turtlesim/background_g", 255);
ros::param::set("/turtlesim/background_b", 255);
//red:255,green:255,bule:255,最后是白色
return 0;
}
3.运行
先启动参数修改程序,再启动乌龟节点。 PS:启动顺序很重要,另外不要用launch文件启动去测试,launch文件启动的仿真器的背景需要在launch文件里初始化更改,用rosrun turtlesim turtlesim_node命令去启动
本文由作者按照 CC BY 4.0 进行授权