#创建工作空间rosdemo的同时创建子目录src用于存放功能包 rostest@ubuntu:~$ mkdir -p rosdemo/src2、切换到子目录下
rostest@ubuntu:~$ cd rosdemo/src3、初始化 CMakeLists
rostest@ubuntu:~/ros_demo/src$ catkin_init_workspace
初始化之后工作空间子目录src下自动创建了一个CMakeLists.txt文件
4、编译工作空间#返回工作空间主目录 rostest@ubuntu:~/ros_demo/src$ cd ../ #编译工作空间 rostest@ubuntu:~/ros_demo$ catkin_make
编译之后主目录下自动生成了build、devel目录及其子文件,其中在devel目录中已经产生了几个setup.*sh形式的环境变量设置脚本。
rostest@ubuntu:~/ros_demo$ ls build devel src5、把工作空间在bash中注册使其环境变量生效并查看是否注册成功
#注册bash rostest@ubuntu:~/ros_demo$ source devel/setup.bash #验证是否注册成功 rostest@ubuntu:~/ros_demo$ echo $ROS_PACKAGE_PATH #打印出了当前工作空间的路径,则说明环境变量注册成功 /home/rostest/ros_demo/src:/opt/ros/melodic/share二、创建ROS功能包 1、进入工作区主目录的src子目录下并创建功能包hellowrod_pak
#进入工作区主目录的src子目录下 rostest@ubuntu:~/ros_demo$ cd src/ #创建功能包 rostest@ubuntu:~/ros_demo/src$ catkin_create_pkg hellowrod_pak roscpp rospy std_msgs三、编写cpp文件
#进入功能包存放源代码的src目录 rostest@ubuntu:~/ros_demo/src$ cd hellowrod_pak/src #创建cpp文件 rostest@ubuntu:~/ros_demo/src/hellowrod_pak/src$ touch helloword.cpp #编写代码 rostest@ubuntu:~/ros_demo/src/hellowrod_pak/src$ vim helloword.cpp
#includeint main(int argc, char **argv) { ros::init(argc,argv,"hello");//初始化ROS节点 ros::NodeHandle n;//创建节点句柄 ROS_INFO("Hello ROS!");//打印日志信息 ros::spinOnce();//用于处理节点订阅话题和所有回调函数 }
四、编译功能包和工作空间 1、编译功能包ros::init(argc,argv,"hello");用于初始化ROS节点,括号中前两个参数是用来完成命名重映射等功能的,第三个参数是Publisher(发布者)节点的名称,该名称在ROS节点中是独一无二的,不允许同时存在两个相同名称的节点。
ros::NodeHandle n 是用于和ROS系统交互的主要机制,创建此对象会使当前程序成为节点管理器的节点。
ROS_INFO("Hello ROS!") 类似于C/C++中的printf/cout函数,用于打印日志信息ros::spinOnce() 用于处理节点订阅话题和所有回调函数,当前发布的节点没有订阅任何消息,spinOnce()函数并不是必须的,但是为了保证功能无误,所以建议所有节点都默认加入该函数。
#返回到功能包中主目录:ros_demo/src/hellowrod_pak rostest@ubuntu:~/ros_demo/src/hellowrod_pak/src$ cd ../ #编辑CMakeLists.txt文件 rostest@ubuntu:~/ros_demo/src/hellowrod_pak$ vim CMakeLists.txt
cmake_minimum_required(VERSION 3.0.2)
project(hellowrod_pak)
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
)
catkin_package()
include_directories(include ${catkin_INCLUDE_DIRS})
add_executable(hello src/helloword.cpp)
target_link_libraries(hello ${catkin_LIBRARIES})
2、编译工作空间#添加依赖的功能包,其中roscpp提供了ROS的C++客户端,rospy提供了Python客户端,std_msgs包含了常见的数据类型
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
)#编译功能包,用于生成文件
catkin_package()#用于设置头文件的相对路径,该配置项还包含了catkin编译器默认包含的其他头文件路径
include_directories(include ${catkin_INCLUDE_DIRS})#设置需要编译的代码和生成可执行的文件,第一个参数为可执行文件的名称,第二个参数是编译的cpp文件路径
add_executable(hello src/helloword.cpp)#用于设置链接库,第一个参数为链接可执行的文件,后面依次列出需要链接的库
target_link_libraries(hello ${catkin_LIBRARIES})
#返回工作空间主目录 rostest@ubuntu:~/ros_demo/src/hellowrod_pak$ cd ../../ #编译工作空间 rostest@ubuntu:~/ros_demo$ catkin_make五、执行程序 1、设置环境变量
如果环境变量没设置好,发布节点的时候会报错:[rospack] Error: package 'hellowrod_pak' not found,提示说找不到包,所以设置好之后最好要使用$ROS_PACKAGE_PATH验证以下
#注册bash rostest@ubuntu:~/ros_demo$ source ~/ros_demo/devel/setup.bash #验证是否注册成功 rostest@ubuntu:~/ros_demo$ echo $ROS_PACKAGE_PATH #打印出了当前工作空间的路径,则说明环境变量注册成功 /home/rostest/ros_demo/src:/opt/ros/melodic/share2、执行程序
#启动节点管理器(ROS Master) rostest@ubuntu:~$ roscore #新打开一个窗口,发布节点,其中hellowrod_pak是功能包的名称 ,hello是节点的名称是在helloword.cpp文件中创建的 rostest@ubuntu:~$ rosrun hellowrod_pak hello [ INFO] [1655038902.167104193]: Hello ROS!



