1、模型
2、创建功能包
在这之前,应先创建ROS工作空间,具体步骤请查看我的另一篇文章《创建ROS工作空间 & 功能包简介》。
命令解释请查看《ROS常用命令》。
cd ~/catkin_ws/src
catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim
3、编写程序
一定要进入到 ~/catkin_ws/src/learning_topic/src/
里面,而不是 ~/catkin_ws/src
,因为这是本功能包的程序。
cd learning_topic/src/
touch velocity_publisher.cpp
可以看到在 learning_topic/src/ 路径下多了个 velocity_publisher.cpp 文件,双击打开,插入以下代码后保存:(代码解释可以看我的另一篇文章《ROS常用命令》。)
/**
* 该例程将发布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(10);
int count = 0;
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;
}
或者使用 gedit velocity_publisher.cpp
命令进行编辑,gedit 编辑器与windows 的记事本的使用方法差不多。当然,也可以使用 vim velocity_publisher.cpp
命令进行编辑,但 vim 编辑器使用方法比较复杂。
vim 编辑器默认为命令模式,按i
键可以进入文本编辑模式,并复制以上 c++ 代码如图所示。(请忽略我的路径)
附:vim编辑器快捷键键位图:
1、vim 编辑器默认是处于命令模式
,若此时输入:wq
后回车即可保存文件并退出编辑器,若输入:q!
后回车则不保存并退出。命令模式中会区分大小写。按下红色标识
的按键都会进入文本编辑模式
。
2、在命令模式下按下红色标识的按键都会进入文本编辑模式
,此模式下就是对文件进行编辑。按esc
键进入命令模式
。
按esc
进入命令模式,输入:wq
保存退出。(请忽略我的路径)
4、编译功能包
编译前需要先在 ~/catkin_ws/src/learning_topic/
下的CMakeLists.txt文件添加两条语句,粘贴位置在## Install ##
正上方并ctrl+s
保存:
add_executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${
catkin_LIBRARIES})
依次输入以下命令:
cd ~/catkin_ws
catkin_make
source devel/setup.bash
roscore
可通过运行
echo $ROS_PACKAGE_PATH
命令查看环境变量是否已经设置好
打开一个新终端,开启 turtlesim:
rosrun turtlesim turtlesim_node
再新开启一个终端,运行发布者 publisher 的 cpp 程序:
rosrun learning_topic velocity_publisher
小海龟成功按照程序运动起来:
PS:编译cpp生成的文件在 home/catkin_ws/devel/lib/learning_topic 下面
因为每次编译后都需要输入一次 source devel/setup.bash
命令来使系统确定环境变量,这样会有点麻烦,下面介绍一个一劳永逸的方法:
回到主目录,按Ctrl+H
键(意思是显示隐藏文件),可以看到一个名为.bashrc
的文件,双击打开,在最后添加source /home/wyz/catkin_ws/devel/setup.bash
(其中wyz
应改为你自己的用户名称)。
然后重新打开终端即可自动完成source
这一步骤。