睿抗-ROS 仿真赛(一)ROS入门

第一次

1.问:什么是CMakeList?它是否与用于编译c++对象的make文件有关?如果是,那么两者之间的区别是什么?
答:文件CMakeLists.txt是用于构建软件包的 CMake 构建系统的输入。任何符合 CMake 的包都包含一个或多个CMakeLists.txt文件,用于描述如何生成代码以及将其安装到何处。用于catkin项目的CMakeLists.txt文件是标准的vanilla CMakeLists.txt文件,具有一些附加约束。

rosbuild/CMakeLists - ROS Wiki

2.问: 您是否在ROS中使用CMakeList.txt用于Python ?是否为Python创建了可执行对象?
答: ROS中可以在CMakeLists.txt中配置Python和C++的可执行文件

rosbuild/CMakeLists - ROS Wiki

3.问:在哪个目录下运行catkin make?
答:需要在工作空间的根目录下使用catkin_make命令

catkin/commands/catkin_make - ROS Wiki

4.问:为什么我们需要源代码setup.bash?它是做什么的?为什么我们有不同的setup.bash设置和它们的区别是什么?

答:构建工作区后,会在 devel 子文件夹中创建一个类似于 /opt/ros/$ROSDISTRO_NAME 下的结构。编译完成后,在devel文件夹中已经产生几个 setup.bash形式的环境变量设置脚本。使用source命令运行这些脚本文 件,则工作空间中的环境变量可以生效。

rosbash - ROS Wiki           

第二次

1.问:(c++)什么是nodehandle对象?我们可以在一个节点上有多个nodehandle对象吗?

答:nodehandle对象有NodeHandle::advertiseNodeHandle::subscribeNodeHandle::serviceClient,NodeHandle::advertiseService,且一个节点可以设置多个句柄对象

roscpp:ros::NodeHandle 类参考

2.问:在python中有节点句柄吗?rospy.init_node的意义是什么?

答:rospy是Python版本的ROS客户端库,提供了Python程序需要的接口     ,rospy.init_node是rospy创建和初始化一个node,不再需要NodeHandle,rospy没有设计NodeHandle这个句柄

ROS/Tutorials/WritingPublisherSubscriber(python) - ROS Wiki

rospy/Tutorials - ROS Wiki

3.问:什么是ros::spinOnce()?

答:当spinOnce函数被调用时,spinOnce就会调用回调函数队列中第一个callback函数,此时callback函数被执行。spinOnce函数执行一次后,接着执行下面的语句。等到下次spinOnce函数又被调用时,回调函数队列中第二个callback函数就会被调用,以此类推。

而spin函数,会进入到自己的内部循环,不往下执行。相当于它在自己的函数里面死循环了,直到ctrl+c 或者程序终止的时候才退出。

主要区别:

ros::spin()被动的接收topic,或者说纯粹的接收topic.

ros::spinOnce()可以根据自己的需求设置接收频率(ros::Rate() )。更加主动灵活。

4.问:它与ros::Spin()有什么不同?(c++) ros::rate()是什么?(Python)如何在Python中控制订阅者的回调?

答:ros::rate一般搭配ros::sleep函数是用来控制发布频率的,一般搭配ros::sleep使用,控制的是循环的频率,不是消息和服务的发布频率,通过控制循环频率从而可以控制发布频率,ros::Rate rate()是写在循环外面的,而rate.sleep()是在循环内的

5.问:在python中需要spin()或spinonce()吗?

答:控制订阅者的回调比需要用到用ros::spin()或者ros::spinonce()来调用回调函数。

第三次

问:(Python & C++)Where does the bag file get saved? How can you change where it is saved?
包文件保存在哪里?如何更改保存位置?

答:工作空间共包含四个文件夹,

src: 代码空间,是用来放置所有功能包的代码,配置文件,以及后面会学到的launch文件等,都是放在src文件夹中。
build: 编译空间,放置编译过程中所产生的中间文件,基本不用去关心这个文件夹。
devel: 开发空间,用来放置编译生成的可执行文件,一些库和脚本,在以后的编程中会用到
install: 安装空间,用install指令的安装结果放置的文件夹。

catkin/workspaces - ROS Wiki


问:(Python & C++)Where will the bag file be saved if you were launching the recording of bagfile record through a lannch file. How can you change where it is saved?
如果您通过启动文件启动bagfile记录的记录,那么将包文件保存在哪里?如何更改它的保存位置?

答:包文件将被保存到我们所创建的包文件当中,可以使用 rosbag 过滤器使用主题和数据信息将 bag 文件过滤到新的 bag 文件中

rosbag/教程/记录和回放数据 - ROS Wiki

ROS/教程/记录和回放数据 - ROS Wiki


1.问:(C++)Why did you include the header file of the message file instead of the message file itself?(c++)为什么要包含消息文件的头文件而不是消息文件本身?

答:.msg文件是文本格式,无法直接用于C++或Python等编程语言的编译和链接过程。相反,ROS提供了一个工具链(如rosmsggenmsg等),这些工具可以将.msg文件转换为C++或Python等语言的源代码,并生成相应的头文件。这些生成的头文件包含了消息类型的定义和实现,可以直接在ROS的C++或Python节点中使用。通过这种方式,开发者可以方便地使用ROS消息类型,而无需手动解析或处理.msg文件。

包含生成的头文件还有助于实现代码的可读性和可维护性。由于头文件通常包含了消息类型的定义和注释,因此可以更容易地理解代码中的消息使用方式。同时,如果消息类型发生变化(例如添加或删除字段),只需重新生成头文件并重新编译代码即可,而无需手动修改代码中的消息使用方式。

msg - ROS Wiki

common_msgs - ROS Wiki
2.问:(Python & C++)In the documentation of the LaserScan message there was also a data type called Header header.What is that?  Can you also include it in your message file? 
在LaserScan消息的文档中还有一个名为Header Header的数据类型。那是什么?您还可以将其包含在您的消息文件中吗?
What niformation does it provide? Include Header in your message file too.
它提供了什么信息?在消息文件中也包含Header。

答:Header 是一个结构体,包含seq、stamp、frame—id。seq扫描顺序增加的id序列,stamp激光数据的时间戳,frame-id是扫描数据的名字。

Header自定义消息文件,我们只需要在publisher/server发布信息的一侧实例化header类对象并给予信息赋值,最终以“与自定义信息发布相同的频率”发布即可。header本质上也是一个自定义消息文件,它的发布和我们自定义/一般类型的消息发布操作是一样的

std_msgs/Header Documentation (ros.org)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值