编译第一个ROS程序--Hello ROS

这篇博客详细介绍了如何在Ubuntu16.04上使用ROS Kinetic编译并运行第一个ROS程序。首先,介绍了安装ROS的步骤,接着创建catkin工作空间和功能包'first',并在其中编写'hello.cpp'源代码。代码中通过NodeHandle与ROS进行交互。然后,修改CMakelists.txt和package.xml文件以编译cpp代码,并添加必要的依赖。最后,说明了如何编译并运行ROS程序,成功输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作系统: Ubuntu16.04

ROS版本: Kinetic

1.安装ROS,详情见http://blog.youkuaiyun.com/qq_17232031/article/details/79519308

2.建立一个catkin_ws文件夹,以及子目录src:

$ mkdir catkin_ws
$ cd ./catkin_ws
$ mkdir src

3.在src目录下创建功能包,命名为first

$ catkin_create_pkg first

此时会产生first文件夹,其中包含两个文件,CMakelists.txt和package.xml

4.在first文件夹下,新建hello.cpp文件

$ sudo gedit hello.cpp

编写代码:

#include <ros/ros.h>

int main(int argc,char ** argv)
{
    ros::init(argc,argv,"hello_ros");
    ros::NodeHandle nh;
    ROS_INFO_STREAM("Hello ROS");
}

init函数初始化客户端库。NodeHandle节点句柄,用于程序与ROS的交互。

5.编译cpp代码,此时需要对同目录下的CMakelists.txt和package.xml文件进行修改

在CMakelist.txt文件中添加

add_executable(hello hello.cpp)
target_link_libraries(hello ${catkin_LLIBRARIES})

并且将

find_package(catkin REQUIRED)

改为:

find_package(catkin REQUIRED COMPONENTS roscpp)

这句是为了添加roscpp依赖项

修改package.xml文件,添加build_depend编译依赖和run_depend运行依赖

<build_depend>roscpp</build_depend>
<run_depend>roscpp<run_depend>

然后,在catkin_ws目录下执行:

$ catkin_make
$ cd ./devel
$ source setup.bash

6. 运行程序

$ rosrun first hello

出现结果:








编写第一个ROS程序通常包括以下几个步骤: 1. 环境准备:首先确保你的计算机上已经安装了ROS。选择一个合适的ROS版本并进行安装,比如ROS Noetic, ROS Melodic等。 2. 创建ROS工作空间:在你的home目录下创建一个工作空间文件夹,并在其下创建src、build、devel三个子文件夹。 3. 配置环境变量:将你的工作空间的devel文件夹添加到ROS环境变量中,这样你就可以运行ROS程序了。 4. 创建ROS包:在工作空间的src文件夹下创建你的第一个ROS包。使用`catkin_create_pkg`命令创建包,并指定依赖关系。 5. 编写代码:在你的包中创建一个`src`文件夹,并在其中编写你的节点(Node)。一个简单的ROS程序通常包含一个主程序,负责初始化节点,并循环执行某个任务或者处理订阅和发布的消息。 6. 编译程序:在工作空间的根目录下运行`catkin_make`命令来编译你的程序。 7. 运行程序编译完成后,使用`source`命令加载环境,然后使用`rosrun`或`roslaunch`来运行你的节点。 这里是一个简单的ROS节点的Python示例代码: ```python #!/usr/bin/env python import rospy from std_msgs.msg import String def talker(): pub = rospy.Publisher('chatter', String, queue_size=10) rospy.init_node('talker', anonymous=True) rate = rospy.Rate(10) # 10hz while not rospy.is_shutdown(): hello_str = "hello world %s" % rospy.get_time() rospy.loginfo(hello_str) pub.publish(hello_str) rate.sleep() if __name__ == '__main__': try: talker() except rospy.ROSInterruptException: pass ``` 在这段代码中,我们定义了一个名为“talker”的节点,它会不断向名为“chatter”的话题发布消息。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值