创建用终端进行创建,创建完成后可以在vscode上使用
环境配置:ubunto20.04
工作空间下会产生以下四个文件夹,其中src是需要我们创建。
- src:放置代码(代码空间)
- bulid:编译中产生的中间文件(编译空间)
- devel:编译出来的文件(开发空间)
- install:(安装空间)
1 创建工作空间
mkdir -p ~/catkin_ws/src #catkin_ws文件夹名字(可随意)
cd ~/catkin_ws/src #进入src文件夹
catkin_init_workspace #将src定义为ros工作空间
2 编译工作空间
cd ~/catkin_ws/ #进入主文件夹
catkin_make #编译
注意:此时可能只产生三个文件夹,没有上述的install文件夹,在主文件夹下运行下面代码即可。
catkin_make install
3 设置环境变量
source devel/step.bash
4 检查环境变量
echo $ROS_PACKAGE_PATH
这里会出现你创建的src文件夹的路径,这说明环境变量配置成功
~$ echo $ROS_PACKAGE_PATH
/home/user/catkin_ws/src:/opt/ros/noetic/shar #出现src文件夹路径
5 创建功能包(小乌龟画圆为例子,C++为例)
cd ~/catkin_ws/src #进入src文件夹
catkin_create_pkg learning_topic roscpp rospy std_mags geometry_msgs turtlesim
#learning_topic 功能包名 后面的是依赖包比如c++.python等
6 创建小乌龟划圆圈代码
cd ~/catkin_ws/src/learning_topic/src #进入文件夹
touch velocity_publisher.cpp # 创建cpp文件
打开cpp文件,输入划圆圈代码
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
int main(int argc, char **argv)
{
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("Publish trutlr velocity command[%0.2f m/s rad/s]",vel_msg.linear.x,vel_msg.angular.z);
loop_rate.sleep();
}
return 0;
}
7 配置CMakeLists.txt文件
文件路径:/catkin_ws/src/learning_topic
打开文件添加以下代码
#############
## Install ## 将以下代码加在这个东西上面
#############
add_executable(velocity_publisher src/velocity_publisher.cpp)
#将cpp文件 编译成velocity_publisher可执行文件
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})
#将可执行文件与ros库做连接,比如就这里用到c++库
8 编译写好的文件
cd ~/catkin_ws #进入文件夹
catkin_make #编译
9 设置环境变量
source devel/setup.bash
可以提前配置好以后就不用配置了
在主目录中有一个隐藏文件.bashrc,点击进入,在最下面添加
source /home/电脑用户名/catkin_ws/devel/setup.bash
10 运行(也可以在vscode上面运行)
10.1 打开一个终端:运行ros
roscore
10.2 打开第二个终端:运行海龟仿真器(这里按tab,不是回车)
rosrun turtlesim
10.3 选择下面这个
rosrun turtlesim turtlesim_node
10.4 打开第三个终端
rosrun learning_topic
完成