关于ROS运行小乌龟中的一些问题说明
-----话题
注:PPT来源于古月居
建立工作空间
建立一个catkin_ws文件夹 catkin_ws 下建立一个src文件夹
在src 目录下运行 catkin_init_workspace
出现Cmake文件
切换到catkin_ws 目录下 运行编译命令
$ cd ~/catkin_ws/
$ catkin_make
自动生成2个文件夹
输入
source devel/setup.bash 建立环境变量
echo $ROS_PACKAGE_PATH
检查环境变量
建立功能包
到此工作空间建立完毕,下面建立功能包
建立功能包后,出现一个文件夹
然后编译 catkin_make (在catkin_ws下)
设置变量
source ~/catkin_ws/devel/setup.bash
或者在home目录下 Ctrl+H 打开隐藏文件
在bashrc中加入最后一行代码,(根据自己的路径自行更改代码)
编译代码
这里假设你已经建立了工作空间
将源代码放入功能包下的src文件
我的cpp文件命名为 dxp.cpp
代码如下:
#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;
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 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;
}
接下来就是编译代码,但是在编译代码前,我们需要设置一些东西
在如图所示的目录下的Cmakelist 文件中,加入
add_executable(dxp src/dxp.cpp)
target_link_libraries(dxp ${catkin_LIBRARIES})
第一行代码的函数的参数(不用逗号区分),第一个是生成的可执行文件的文件名称 第二个为源代码名称
第二行代码将生成的可执行文件与库链接 ,这里的名字必须为第一个函数生成的可执行文件的名字,不然找不到这个文件
接下来在输入catkin_make (在catkin_ws 目录下),程序就会编译,链接
验证
运行ros系统 输入roscore
然后运行乌龟节点
rosrun turtlesim turtlesim_node
乌龟节点名称为turtle1。因为乌龟在ros系统里已经配置好了,监听话题名为turtle1/cmd_vel 的内容,所以在配置的时候配置成如下代码:
ros::Publisher turtle_vel_pub=n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",
10);
运行程序节点 rosrun learning_topic dxp (因为最终生成的是dxp的文件)
虽然节点名称命名为velocity_publisher,单数不能输入节点名称 ,运行的是文件