【ROS实操1编码实现乌龟运动控制,让小乌龟做圆周运动。】

实现分析:

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

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_47869094/article/details/130063486
今日推荐