面试问题总结----ROS部分

1、本栏用来记录社招找工作过程中的内容,包括基础知识学习以及面试问题的记录等,以便于后续个人回顾学习; 暂时只有2023年3月份,第一次社招找工作的过程;

2、个人经历: 研究生期间课题是SLAM在无人机上的应用,有接触SLAM、Linux、ROS、C/C++、DJI OSDK等;
3、参加工作后(2021-2023年)岗位是嵌入式软件开发,主要是服务器开发,Linux、C/C++、网络编程、docker容器、CMake、makefile、Shell脚本、JSON等。

4、求职岗位是嵌入式软件开发、C/C++开发、自动驾驶岗位开发等。

在这里插入图片描述

文章目录

1 ros1通信模型

  • talker注册
  • listener注册
  • ROS Master进行信息匹配
  • listener 发送链接请求
  • talker确认请求
  • 建立连接
  • talker给listener发数据

在这里插入图片描述

2 ROS的应用框架是怎样的?

在这里插入图片描述
总结:ROS就是一个为了提高机器人开发的软件复用率,开发的一款具有独特的通信机制、丰富的开发工具、海量的应用功能、良好的生态系统集的工具。

3 如何新建一个工作空间?

mkdir  -p ~/target_ws/src   //其中target_ws为我新建的工作空间名
cd ~/target_ws/src
catkin_init_workspace    //初始化工作空间
cd ~/target_ws
catkin_make  //编译,编译完成后,会发现catkin_ws中多了两个文件 build 和 devel
echo "source ~/target_ws/devel/setup.bash" >> ~/.bashrc  
source ~/.bashrc

需要注意一点,同一个工作空间下不能存在同名功能包,不同的工作空间下可以存在同名功能包。但是要注意一个问题,ROS运行时会优先选择最前端工作空间的同名功能包。为了避免出现想不到的问题,所有工作空间尽量不使用同名功能包。

功能包的名称尽量按照a_b_c的格式书写,否则,编译过程将会出现警告。

4 如何新建一个功能包?

cd ~/target_ws/src/
catkin_create_pkg target_pub std_msgs roscpp rospy   //target_pub为功能包的名称
cd ~/target_ws-
catkin_make   //编译功能包

5 如何新建一个ROS节点?

接着上面的测试功能包,我们在功能包的src文件下新建test.cpp文件:

cd ~/catkin_test_ws/src/test_package/src/
vim test.cpp

然后就是ROS节点的模板程序,都是在模板程序之上做的修改。

#include "ros/ros.h"                    //引入ROS头文件
 
int main(int argc,char **argv)
{
   
	ros::init(argc,argv,"test");        //初始化ROS节点
	
	ros::NodeHandle nh;                 //创建ROS句柄
 
	ros::Rate loop_rate(10);            //定义循环频率 10HZ
 
	while(ros::ok())
	{
   
		std::cout<< "hello ros" <<std::endl;
		loop_rate.sleep();             //按照循环速率延时
	}
	return 0;
}

到这里,然后编译就可以了?这个功能包的编译还需要修改对应的CMakeLIsts.txt文件,一般为三步。

  • 设置需要编译的代码和生成的可执行文件;

  • 设置链接库;

  • 设置依赖;

所以我们修改功能包下的CMakeLIsts.txt文件,一般功能包会自动生成CMakeLists.txt文件内容,我们进行修改即可。

add_executable(${PROJECT_NAME}_node src/test.cpp)                             #这里注意自动生成的源文件名字一般不对,一定要修改成对的名字
target_link_libraries(${PROJECT_NAME}_node ${catkin_LIBRARIES})
add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

这里因为我们没有自定义的消息或者服务类型,所以其他的地方不做更改,如果使用了自定义的消息或者服务类型,注意修改其他的地方。

cd ~/catkin_test_ws                                            
catkin_make                                                    #编译

此时~/catkin_test_ws/devel/lib/test_package目录下生成了test_package_node的可执行文件
执行功能包,在使用rosrun执行功能包之前,使用roscore启动rosmaster。启动rosmaster是启动一切ros节点的前提。

roscore            #启动rosmaster

打开一个新终端启动,test_package功能包下的test_package_node节点。

rosrun test_package test_package_node

终端循环打印hello ros,一个新的ros节点就创建完成了。

6 如何在一个ros节点文件中调用其他的源文件?

这个问题很常见,但是他不应该是个问题,但是发现一些小伙伴还是不太会操作。我们在开发的过程中,随着程序的不断扩大,模块化编程肯定必不可少。有时,我们要调用别人写好的特定功能的源文件,这个时候我们应该怎么做吗?

首先,将你需要的源文件复制到你需要编写的功能包的src文件夹下,规范地讲,.hpp文件应该放到include文件下,如果文件比较少,也没有必要,和.cpp文件放在一起也可以。

ros节点源文件只需要添加你复制的头文件下就行了,函数自己调用就行了。

CMakeLists.txt文件需要做相应的修改,添加你添加的文件名字,放在ros节点文件后面,如下所示:

add_executable(${
   PROJECT_NAME}_node src/test.cpp src/test2.cpp src
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘凉~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值