整理步骤
cd进入工作空间下的代码空间, 创建功能包,并配置依赖
在功能包里面的代码空间里编写C++代码文件
在cmakelist文件里面配置编译规则
cd到工作空间,编译工作空间,source设置环境变量
打开roscore, 运行海龟仿真节点,运行功能包里发布者的节点
话题模型
1. 创建功能包
cd ~/catkin_ws/src
catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim
- 新增发布代码
在 ~/catkin_ws/src/learning_topic/src 目录下,创建 velocity_publisher.cpp 文件
velocity_publisher.cpp 文件内容如下:
//代码
/**
* 该例程将发布turtle1/cmd_vel话题,消息类型geometry_msgs::Twist
*/
//引入包
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
int main(int argc, char **argv)
{
// ROS节点初始化
ros::init(argc, argv, "velocity_publisher");
// 创建节点句柄
ros::NodeHandle n;
// 创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10
ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);
// 设置循环的频率
ros::Rate loop_rate(1);
while (ros::ok())
{
// 初始化geometry_msgs::Twist类型的消息
geometry_msgs::Twist vel_msg;
vel_msg.linear.x = 0.5;
vel_msg.angular.z = 0.2;
// 发布消息
turtle_vel_pub.publish(vel_msg);
ROS_INFO("Publsh turtle velocity command[%0.2f m/s, %0.2f rad/s]",
vel_msg.linear.x, vel_msg.angular.z);
// 按照循环频率延时
loop_rate.sleep();
}
return 0;
}
3.配置发布者代码编译规则
打开功能包 learning_topic 中的 CMakeLists.txt 文件,设置需要编译的代码和生成的可执行文件,以及设置链接库
add_executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})
4. 编译功能包
cd ~/catkin_ws
catkin_make
设置环境变量
source devel/setup.bash
编译如果报错看看是否是权限问题,切换到root 用户试试
5 测试验证
- 启动ros 主节点
roscore
- 启动小乌龟节点
rosrun turtlesim turtlesim_node
- 启动发布小乌龟位置消息的节点
rosrun learning_topic velocity_publisher
启动找不到功能包报错试试 如果出现 [rospack] Error: package ‘learning_topic’ not found
错误,输入命令 gedit ~/.bashrc,然后在末尾添加 source
/home/XXX/catkin_ws/devel/setup.bash,XXX为自己的用户名,保存该文件,然后重启终端。
到这基本上已经完成一个简单的自定义消息节点的实现。
6 再编译
假如说我们需要调整下里面的代码,比如改变小乌龟移动的速度,我们就改变
// 设置循环的频率
ros::Rate loop_rate(1);
将1 改成10 或者100
然后重新编译
cd ~/catkin_ws
catkin_make
然后重启
rosrun learning_topic velocity_publisher
我们就可以看到小乌龟的移动速度变快了。其他的自定义发布消息同理。