湘潭建设网站公司,网站运维工作内容,wordpress成绩查询插件,买过域名之前就可以做网站了吗目录 ROS#xff1a;通信机制一、话题发布实操1.1需求1.2分析1.3实现流程1.4实现代码1.4.1C版1.4.2Python版 1.5执行 二、话题订阅实操2.1需求2.2分析2.3流程2.4实现代码2.4.1启动无辜GUI与键盘控制节点2.4.2C版 ROS#xff1a;通信机制
一、话题发布实操
1.1需求
编码实现… 目录 ROS通信机制一、话题发布实操1.1需求1.2分析1.3实现流程1.4实现代码1.4.1C版1.4.2Python版 1.5执行 二、话题订阅实操2.1需求2.2分析2.3流程2.4实现代码2.4.1启动无辜GUI与键盘控制节点2.4.2C版 ROS通信机制
一、话题发布实操
1.1需求
编码实现乌龟运动控制让小乌龟做圆周运动。
1.2分析
乌龟运动控制实现关键节点有两个一个是乌龟运动显示节点 turtlesim_node另一个是控制节点二者是订阅发布模式实现通信的乌龟运动显示节点直接调用即可运动控制节点之前是使用的 turtle_teleop_key通过键盘 控制现在需要自定义控制节点。
控制节点自实现时首先需要了解控制节点与显示节点通信使用的话题与消息可以使用ros命令结合计算图来获取。
1.3实现流程
通过计算图结合ros命令获取话题与消息信息。 编码实现运动控制节点。 启动 roscore、turtlesim_node 以及自定义的控制节点查看运行结果。
1.4实现代码
1.4.1C版
#include ros/ros.h
#include geometry_msgs/Twist.h/*
需求发布速度消息
话题/turtle/cmd_vel
消息geometry_msgs/Twist1.包含头文件
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 pubnh.advertisegeometry_msgs::Twist(/turtle1/cmd_vel,10);
// 5发布逻辑ros::Rate rate(10);//组织发布的消息geometry_msgs::Twist twist;twist.linear.x1.0;twist.linear.y0.0;twist.linear.z0.0;twist.angular.x0.0;twist.angular.y0.0;twist.angular.z0.5;//循环发布while(ros::ok()){pub.publish(twist);//休眠rate.sleep();//回头ros::spinOnce();}
// 6.spinOnce()return 0;
}
1.4.2Python版
#! /usr/bin/env python
编写 ROS 节点控制小乌龟画圆准备工作:1.获取topic(已知: /turtle1/cmd_vel)2.获取消息类型(已知: geometry_msgs/Twist)3.运行前注意先启动 turtlesim_node 节点实现流程:1.导包2.初始化 ROS 节点3.创建发布者对象4.循环发布运动控制消息import rospy
from geometry_msgs.msg import Twistif __name__ __main__:# 2.初始化 ROS 节点rospy.init_node(control_circle_p)# 3.创建发布者对象pub rospy.Publisher(/turtle1/cmd_vel,Twist,queue_size1000)# 4.循环发布运动控制消息rate rospy.Rate(10)twist Twist()twist.linear.x 1.0twist.linear.y 0.0twist.linear.z 0.0twist.angular.x 0.0twist.angular.y 0.0twist.angular.z 0.5while not rospy.is_shutdown():pub.publish(twist)rate.sleep()1.5执行
首先启动 roscore
然后启动乌龟显示节点
最后执行运动控制节点 二、话题订阅实操
2.1需求
已知turtlesim中的乌龟显示节点会发布当前乌龟的位姿(窗体中乌龟的坐标以及朝向)要求控制乌龟运动并时时打印当前乌龟的位姿。
2.2分析
首先需要启动乌龟显示以及运动控制节点并控制乌龟运动。 要通过ROS命令来获取乌龟位姿发布的话题以及消息。 编写订阅节点订阅并打印乌龟的位姿。
2.3流程
通过ros命令获取话题与消息信息。 编码实现位姿获取节点。 启动 roscore、turtlesim_node 、控制节点以及位姿订阅节点控制乌龟运动并输出乌龟的位姿。
2.4实现代码
2.4.1启动无辜GUI与键盘控制节点
!--启动无辜GUI与键盘控制节点--
launch!--乌龟GUI--node pkgturtlesim typeturtlesim_node nameturtle1 outputscreen /!--键盘控制--node pkgturtlesim typeturtle_teleop_key namekey outputscreen //launch2.4.2C版
#include ros/ros.h
#include turtlesim/Pose.h/*
需求订阅乌龟的位姿信息1.包含头文件
2.初始化ros节点
3.创建节点句柄
4.创建订阅对象
5.处理订阅数据回调函数
6.spinOnce()
*/void doPose(const turtlesim::Pose::ConstPtr pose)
{ROS_INFO(乌龟的位姿信息坐标(%.2f,%.2f),朝向(%.2f),线速度:%.2f,角速度:%.2f,pose-x,pose-y,pose-theta,pose-linear_velocity,pose-angular_velocity);
}int main(int argc, char *argv[])
{setlocale(LC_ALL,);
// 2.初始化ros节点ros::init(argc,argv,sub_pose);
// 3.创建节点句柄ros::NodeHandle nh;
// 4.创建订阅对象ros::Subscriber sub nh.subscribe(/turtle1/pose,100,doPose);
// 5.处理订阅数据回调函数
//6.spinros::spin();// 6.spinOnce()return 0;
}