实现分析:
1.乌龟运动控制实现,关键节点有两个,一个是乌龟运动显示节点turtlesim_node,另一个是控制节点,二者是订阅发布模式实现通信的,乌龟运动显示节点直接调用即可,运动控制节点之前是使用的turtle_teleop_key通过键盘控制,现在需要自定义控制节点。
⒉.控制节点自实现时,首先需要了解控制节点与显示节点通信使用的话题与消息,可以使用ros命令结合计算图来获取。
3.了解了话题与消息之后,通过C++或 Python编写运动控制节点,通过指定的话题,按照—定的逻辑发布消息即可。
实现流程:
1.通过计算图结合ros命令获取话题与消息信息。
2.编码实现运动控制节点。
3.启动roscore、turtlesim_node 以及自定义的控制节点,查看运行结果。
1.话题与消息获取
准备:先启动键盘控制乌龟运动案例。
打开一个终端启动roscore,然后水平分割或者竖直分割出两个窗口。分别运行以下两个命令:
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
1.1话题获取
获取话题:/turtle1/cmd_vel
通过计算图查看话题,启动计算图:
rqt_graph
或者通过rostopic列出话题:
rostopic list
1.2消息获取
获取消息类型:
rostopic info /turtle1/cmd_vel
获取消息类型:rostopic type /turtle1/cmd_vel
获取消息格式: `二选一都可以
rosmsg`info
rosmsg show
linear(线速度)下的xyz分别对应在x、y和z方向上的速度(单位是m/s);
angular(角速度)下的xyz分别对应x轴上的翻滚、y轴上俯仰和z轴上偏航的速度(单位是rad/s)。
简单实现使用:rostopic pub -r 10 /turtle1/cmd_vel后面用tab补齐,然后修改角速度和线速度。
这里分别设置为1/1,1/5。
键入enter,实现运行。
方法:使用c++的方式实现乌龟运动。
在原有的文件里面新建功能包。
命名为plumbing_test
然后在plumbing_test下的src目录下面新建文件test01_pub_twist.cpp
粘贴下面代码
#include "ros/ros.h"
#include "geometry_msgs/Twist.h"
/*
需求:发布速度消息
话题:/ turtle1/ cmd_Jeq
消息:geometry msgs/Twist
1.包含头文件
2.初始化 ROS节点
3.创建节点句柄
4.创建发布对象
5.发布逻辑
6.spinOnce( );
*/
int main(int argc,char *argv[])
{
//2.初始化ROS节点
ros::init(argc ,argv , "my_control" );
//3.创建节点句柄
ros::NodeHandle nh;
//4.创建发布对象
ros :: Publisher pub = nh.advertise<geometry_msgs :: Twist>( "/turtle1/cmd_vel" ,10);
// 5.发布逻辑
ros::Rate rate( 10);//设置发布频率
//组织被发布的消息
geometry_msgs::Twist twist;
twist.linear.x =1.0;
twist.linear.y = 0.0;
twist.linear.z = 0.0;
twist.angular.x = 0.0;
twist.angular.y = 0.0;
twist.angular.z = 0.5;
//循环发布
//循环发布
while ( ros::ok())
{
pub.publish(twist);
//休眠
rate.sleep();
//回头
// 6.spinonce( );
ros::spinOnce( );
}
// 6.spinonce();
return 0;
}
其中:乌龟圆周运动的线速度为twist.linear.x =1.0;twist.angular.z = 0.5;两个可以任意设置,其余为0。
twist.linear.x =1.0;
twist.linear.y = 0.0;
twist.linear.z = 0.0;
twist.angular.x = 0.0;
twist.angular.y = 0.0;
twist.angular.z = 0.5;
编辑cmakelist.txt,然后编译运行。
编译无误后打开终端,启动roscore。
打开两个终端,一个启动乌龟节点:
rosrun turtlesim turtlesim_node
另外一个
cd xxx进入自己的文件夹下
比如我这里是cd demo03然后tab补齐:
然后启动
cd demo03_ws/
source ./devel/setup.bash
rosrun plumbing_test test01_pub_twist
运行结果: