ROS----小乌龟画圆
接触ros的人一定不会忘记安装好ros以后的一行测试命令
roscore
rosrun turtlesim turtlesim_node
上述两个命令在不同的终端中输入。
就可以看到一个小乌龟出现在屏幕上
然后再在另一个终端中输入
rosrun turtlesim turtle_teleop_key
就可以使用键盘的上下左右键去控制乌龟拐弯前进。
那么今天就是通过编写相应的代码,使小乌龟自己在屏幕上画圆。
想要实现该功能,需要知道ros的topic通信机制。
在上面键盘控制的例子中,就是turtle_teleop_key这个节点发布了乌龟该如何运动的topic,然后turtlesim_node订阅该topic然后乌龟就会按照订阅的topic去运动。
要让乌龟根据我们的代码进行运动,我们就需要知道乌龟所需要的topic。
首先启动乌龟节点
roscore
rosrun turtlesim turtlesim_node
在另一个终端中查看topic
$rostopic list
/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
不难看出关于乌龟的话题有三个:/turtle1/cmd_vel、/turtle1/color_sensor、/turtle1/pose
接下来需要确定到底是哪一个topic
rostopic echo /turtle1/cmd_vel
rostopic echo /turtle1/color_sensor
rostopic echo /turtle1/pose
分别执行上述的三条命令
排除/turtle1/color_sensor,该话题为颜色相关的话题
/turtle1/cmd_vel没有任何显示
/turtle1/pose显示了坐标,方向,线速度,角速度等。
此时启动turtle_teleop_key节点,然后使用键盘发送让乌龟运动的话题,可以看出该节点发布的话题为/turtle1/cmd_vel
接下类在终端中测试一下:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:
x: 10.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 10.0"
可以看到乌龟在屏幕中画圆。
接下来使用C++编写一个节点,该节点发布topic控制乌龟运动。
1 #include <ros/ros.h>
3 #include <geometry_msgs/Twist.h>
4
5 int main(int argc,char** argv)
6 {
7 ros::init(argc, argv, "talkercpp");
8
9 ros::NodeHandle n;
10 ros::Publisher pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel ", 1000);//发布话题为/turtle1/cmd_vel,话题的类型为geometry_msgs::Twist
11
12 ros::Rate loop_rate(10);
13 while(ros::ok())
14 {
15 geometry_msgs::Twist t;//定义话题类型变量
16 t.angular.z = 10;//为变量中对应的属性进行赋值
17 t.linear.x=10;
18 pub.publish(t);//发布该话题
22 ros::spinOnce();
}
return 0;
}