写一个ROS HelloWord程序,有注释说明

一、创建一个工作空间

1、创建目录和子目录

 #创建工作空间rosdemo的同时创建子目录src用于存放功能包
 rostest@ubuntu:~$ mkdir -p rosdemo/src

2、切换到子目录下

 rostest@ubuntu:~$ cd rosdemo/src

3、初始化 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  src

 5、把工作空间在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 
#include <ros/ros.h>
 int main(int argc, char **argv)
{
        ros::init(argc,argv,"hello");//初始化ROS节点
        ros::NodeHandle n;//创建节点句柄
        ROS_INFO("Hello ROS!");//打印日志信息
        ros::spinOnce();//用于处理节点订阅话题和所有回调函数
}

ros::init(argc,argv,"hello");用于初始化ROS节点,括号中前两个参数是用来完成命名重映射等功能的,第三个参数是Publisher(发布者)节点的名称,该名称在ROS节点中是独一无二的,不允许同时存在两个相同名称的节点。

ros::NodeHandle n  是用于和ROS系统交互的主要机制,创建此对象会使当前程序成为节点管理器的节点。
ROS_INFO("Hello ROS!") 类似于C/C++中的printf/cout函数,用于打印日志信息

ros::spinOnce() 用于处理节点订阅话题和所有回调函数,当前发布的节点没有订阅任何消息,spinOnce()函数并不是必须的,但是为了保证功能无误,所以建议所有节点都默认加入该函数。
 

四、编译功能包和工作空间

1、编译功能包

#返回到功能包中主目录: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})

#添加依赖的功能包,其中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})

2、编译工作空间

#返回工作空间主目录
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/share

2、执行程序 

#启动节点管理器(ROS Master)
rostest@ubuntu:~$ roscore

#新打开一个窗口,发布节点,其中hellowrod_pak是功能包的名称 ,hello是节点的名称是在helloword.cpp文件中创建的
rostest@ubuntu:~$ rosrun hellowrod_pak hello 
[ INFO] [1655038902.167104193]: Hello ROS!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值