ros自带一个乌龟案例,通过它可以让我们更好的理解ros的话题通信。下面的内容主要是讲如何去写一个话题通信去控制其动作。
ROS话题通信 发布消息 控制小乌龟
记录一下学习ROS的过程,加油!
测试当前环境是否可以运行小乌龟
roscore
#运行roscore
rosrun turtlesim turtlesim_node
#启动turtlesim_node节点
rosrun turtlesim turtle_teleop_key
#启动turtlesim_teleop_key节点
如果成功的话,会弹出一个带有小乌龟的窗口,你可以通过键盘去控制它行走。
获取当前ros运行的话题与其相关的信息
rostopic list
#获取当前活跃的话题
/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
rqt_graph
#获取当节点图
我们可以得到话题名为
/turtle1/cmd_vel
rostopic info /turtle1/cmd_vel
我们得到话题的信息
Type: geometry_msgs/Twist
Publishers:
- /teleop_turtle
Subscribers:- /turtlesim
rosmsg show gemetry_msgs/Twist
#获取其信息的格式
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
线速度: x前进后退,y左右平移,z上下移动;
角速度: x roll y pitch z yaw;
乌龟这个案例只有线速度x,角速度z两个值。
rostopic echo /turtle1/cmd_vel
#当控制小乌通信时,此话题信息会打印出来
总节:此时我们已经获取到话题名称: /turtle1/cmd_vel 类型:geometry_msgs/Twist
做个简单的测试,用下面的命令控可以看到乌龟做圆周运动。
rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist '{linear: {x: 1.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 1.0}}'
写一个发布程序控制乌龟运动
mkdir -p demo01_ws/src
#新建一个目录文件夹src
cd demo01_ws/src
#进入到src文件夹
catkin_create_pkg package_01 roscpp rospy std_msgs geometry_msgs
#创建包名为 package_01 后面4个为依赖项
#在demo01_ws/src下生成package_01,CmakeLists.txt
cd ~/demo01_ws
#进入到 demo01_ws工程文件夹下
catkin_make
#在demo01_ws中生成build,devel 文件夹
source setup.bash
#在devel目录下运行,将此ros工程加入到ros环境
ROS文件工程结构如下图所示:
catkin_create_pkg package_01 roscpp rospy std_msgs geometry_msgs
catkin_create_pkg package_01 roscpp rospy std_msgs geometry_msgs
#在workspace folder/src. 中运行此命令,在src中创建一个包名为package_0文件夹
在demo01_ws/src/package_01/src路径下新建名为pub_control_msg.cpp的c++文件,代码如下。
#include "ros/ros.h"
#include "geometry_msgs/Twist.h"
int main(int argc,char *argv[])
{
//pub msgs to control the turtle
//topic:/turtle1/cmd_vel
//type:geometry_msgs/Twist
//step:include the head file
//initialize ros node
//create handle of ros
//create pub
ros::init(argc,argv,"mycotrol"); //initialize node
ros::NodeHandle nh;
ros::Publisher pub = nh.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",10);
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();
ros::spinOnce();
}
return 0;
}
在demo01_ws/src/package_01/修改CmakeList.txt文件。
add_executable(pub_control_msg src/pub_control_msg.cpp)
target_link_libraries(pub_control_msg ${catkin_LIBRARIES} )
demo01_ws目录下运行
catkin_make
编译成功后运行此程行
rosrun pakage_01 pub_control_msg
如果不出意外的话,ros的小乌龟案例就已经开始圆周动作了。
加油,各位!