(1)创建cpp文件
方法一:打开 Visual Studio Code,在功能包名称/src子文件夹上单击鼠标右键,选择 New File 新建一个代码文件。新建的代码文件命名为 turtle_vel_node.cpp。
方法二:在 功能包名称/src中打开终端,确保目录路径为 功能包名称/src,运行下面指令
touch turtle_vel_node.cpp
粘贴下面内容:
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
void callback(const geometry_msgs::Twist &cmd_vel)
{
ROS_INFO("Received a /cmd_vel message!");
ROS_INFO("Linear Velocity: [%f,%f,%f]",
cmd_vel.linear.x, cmd_vel.linear.y, cmd_vel.linear.z );
ROS_INFO("Angular velocity:[%f,%f,%f]",
cmd_vel.angular.x, cmd_vel.angular.y, cmd_vel.angular.z);
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "turtle_vel_rece_node");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("/turtle1/cmd_vel", 1000, callback);
ros::spin();
return 1;
}
(2)配置编译文件
代码编写完毕,需要将文件名添加到编译文件里才能进行编译。打开你设定功能包的目录下CMakeLists.txt,在文件末尾,为 turtle_vel_node.cpp 添加新的编译规则。内容如下:
add_executable(turtle_vel_node src/turtle_vel_node.cpp)
add_dependencies(turtle_vel_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(turtle_vel_node ${catkin_LIBRARIES})
新建终端,进入ROS的工作空间,然后执行如下指令开始编译
cd ~/catkin_ws/
catkin_make
(3)测试结果
roscore
新建终端,运行 turtlesim 功能包中的 turtlesim_node 节点,打开乌龟窗口。
rosrun turtlesim turtlesim_node
新建终端,在终端中输入以下指令:
rosrun turtle_vel_ctrl_pkg turtle_vel_node
由于 turtle_vel_ctrl_node 节点尚未启动运行,turtle_vel_node 节点处于等待接收速度状态。
新建终端窗口,输入以下指令:
rosrun turtle_vel_ctrl_pkg turtle_vel_ctrl_node
小乌龟以0.1m/s的速度缓慢向前移动。同时可以看到在第3个终端程序中显示从主题“/turtle1/cmd_vel”接收到的小乌龟的运行速度,可用rostopic list查看节点存在情况。
测试结果:
(4)查看节点网络情况
rqt_graph
会弹出一个窗口,显示当前 ROS 里的节点网络情况。