ROS2学习笔记:C++最小服务端/客户端节点

当节点之间使用服务进行通信时,发送数据请求的节点称为客户端节点,响应请求的节点称为服务节点。请求和响应的结构由 .srv 文件决定。在使用ros2命令生成一个package框架时候,需要一个参数example_interfaces来生成需要的.srv文件。对于我们一个两数相加的服务例子,在.srv需要如下内容: int64 a int64 b — int64 sum 前边两个是客户端request的参数,最后是服务端response的参数。然后开始准备我们具体的代码。 服务端示例代码为: #include “rclcpp/rclcpp.hpp” #include “example_interfaces/srv/add_two_ints.hpp” #include <memory> void add(const std::shared_ptr<example_interfaces::srv::AddTwoInts::Request> request, std::shared_ptr<example_interfaces::srv::AddTwoInts::Response> response) { response->sum = request->a + request->b; RCLCPP_INFO(rclcpp::get_logger(“rclcpp”), “Incoming request\na: %ld” ” b: %ld”, request->a, request->b); RCLCPP_INFO(rclcpp::get_logger(“rclcpp”), “sending back response: [%ld]”, (long int)response->sum); } int main(int argc, char **argv) { rclcpp::init(argc, argv); […]

ROS2学习笔记:C++最小服务端/客户端节点 Read More »

ROS2学习笔记:Python最小发布/接收节点

通过前边流程建立了workspace和基于Python的package框架后,下边是极简的一个Python语言实现的Publisher和Subscriber例子: import rclpy from rclpy.node import Node from std_msgs.msg import String class MinimalPublisher(Node): def __init__(self): super().__init__(‘minimal_publisher’) self.publisher_ = self.create_publisher(String, ‘topic’, 10) timer_period = 0.5 # seconds self.timer = self.create_timer(timer_period, self.timer_callback) self.i = 0 def timer_callback(self): msg = String() msg.data = ‘Hello World: %d’ % self.i self.publisher_.publish(msg) self.get_logger().info(‘Publishing: “%s”‘ % msg.data) self.i += 1 def main(args=None):

ROS2学习笔记:Python最小发布/接收节点 Read More »

ROS2学习笔记:C++最小发布/接收节点

通过前边流程建立了workspace和基于C++的package框架后,下边是极简的一个C++语言实现的Publisher和Subscriber例子: #include <chrono> #include <functional> #include <memory> #include <string> #include “rclcpp/rclcpp.hpp” #include “std_msgs/msg/string.hpp” using namespace std::chrono_literals; /* This example creates a subclass of Node and uses std::bind() to register a * member function as a callback from the timer. */ class MinimalPublisher : public rclcpp::Node { public: MinimalPublisher() : Node(“minimal_publisher”), count_(0) { publisher_ = this->create_publisher<std_msgs::msg::String>(“topic”,

ROS2学习笔记:C++最小发布/接收节点 Read More »

ROS2学习笔记:service服务、parameter参数、action动作

如果了解过车载总线的SOME/IP,那么再看ROS2的Service就好简单,原理基于一样,就说订阅和响应。 常用的ROS2 service命令: ros2 service list ros2 service type <service_name> ros2 service find <type_name> ros2 interface show <type_name> ros2 service call <service_name> <service_type> <arguments> 常用的ROS2 param 命令: ros2 param list ros2 param get <node_name> <parameter_name> ros2 param set <node_name> <parameter_name> <value> ros2 param dump <node_name> ros2 param load <node_name> <parameter_file> ros2 run <package_name> <executable_name> –ros-args

ROS2学习笔记:service服务、parameter参数、action动作 Read More »

ROS2学习笔记:topic话题、build包、workspace、package创建

学习topic话题感觉套用CAN总线的知识非常高效,Publisher就是在一条CAN总线写入一个信息,Subscriber就是在CAN总线监听一个信息。发送端(总线写入)可以有多个,接收端(总线监听)也可以有多个。 常用的topic命令: ros2 topic list ros2 topic echo <topic_name>: ros2 topic echo /turtle1/cmd_vel ros2 interface show <msg_type>: ros2 interface show geometry_msgs/msg/Twist ros2 topic pub <topic_name> <msg_type> ‘<args>’ : ros2 topic pub /turtle1/cmd_vel geometry_msgs/msg/Twist “{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}” ros2 topic hz: ros2 topic hz /turtle1/pose ros2

ROS2学习笔记:topic话题、build包、workspace、package创建 Read More »

ROS2学习笔记:节点node

经历了传统汽车ECU项目开发再来看ROS的节点就特别好的理解,Node和汽车电子分布式ECU特别的像,都是挂在到总线上,汽车是CAN、以太网,ROS是DDS,也有集中不同的信号形式做交互。根据功能定位的不同节点可大可小,可复杂可简单。通信方式也可以按照数据的特点有不同的区分。Topic特别像CAN总线以及车载以太网的PDU,而ROS的Service则很像汽车的SOME/IP。Parameter的概念也很像。 比较重要的命令: ros2 run <package_name> <executable_name> 其中Package和executable不需要一一对应,一个Package可以包含多个节点,每个节点就是独立可执行的文件。同时一个Package也可以没有可执行文件,通常用来定义消息、服务、动作等,甚至是纯库包,只提供功能库,供其他package调用。甚至还有配置/Launch的文件包,只包含启动文件、参数配置等,可以将Package理解成一个容器,可以装很多东西。 在命令启动时候,可以显式修改一些节点的默认参数,语法为: ros2 run turtlesim turtlesim_node –ros-args –remap __node:=my_turtle   其他还有个作用于node比较有用的命令,查看node详细信息:   ros2 node info <node_name>    

ROS2学习笔记:节点node Read More »

ROS2学习笔记:小乌龟、rqt

小乌龟几乎是所有学习ROS第一个例子,就像写代码的“Hello World”一样。通过这个小例子可以初步了解ROS2中几个核心的概念:node节点、topic话题、parameter参数等。 首先是小乌龟安装: sudo apt update sudo apt install ros-humble-turtlesim 然后重开两个窗口,一个是小乌龟节点,一个是控制节点: ros2 run turtlesim turtlesim_node ros2 run turtlesim turtle_teleop_key XXX 再开一个Terminal,通过下列命令可以看当前网络的node, topic, service, actin: ros2 node list ros2 topic list ros2 service list ros2 action list rqt 是 ROS 2 的图形用户界面(GUI)工具。在 rqt 中完成的所有操作也可以在命令行中完成,但 rqt 提供了一种更用户友好的方式来操作 ROS 2 元素,直观,新手友好。 XXX XXX 对于网络整体拓扑的查看,以及快速简单看一个数据或者触发一个命令,rqt真的挺简单实用的。

ROS2学习笔记:小乌龟、rqt Read More »

ROS2学习笔记:缘由、安装

这几年机器人行业爆火,而我在的智驾领域差开始稳定,一定程度到了淘汰赛阶段,我想横向看看机器人有没有更合适的机会。整理学习相关知识的过程中,ROS是避不开的一环。虽然之前做项目也用到过,但是几乎都忘光了完全达不到面试水平,趁着最近找工作回顾知识点,系统再看一遍记录一下。 关于ROS2安装这部分,官网教程非常非常细致有效了,没有遇到太多的坑。建议根据各自的系统版本以及所需ROS2版本,去到对应的官网教程来安装。比如说我是Ubuntu22.04对应的是humble版本的ROS2,地址在这里: https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html 需要注意的是安装完成后需要在每个Termianl 加载一下ROS2环境,比如在Ubuntu系统下: source /opt/ros/humble/setup.bash 这个步骤经常忘记,如果想一劳永逸的话,可以将该命令写在~/.bashrc 中,用不着每次手动加载。 echo “source /opt/ros/humble/setup.bash” >> ~/.bashrc 这样环境安装对绝大多数就差不多了。如果工程比较复杂可能还需要设置一些Domain ID以防止相同命令在不同节点串行,这个在需要的时候配置也OK,初期不太懂得到。

ROS2学习笔记:缘由、安装 Read More »

我在中国银行的负面体验

我用的中行服务不多,就一张工资卡,平常消费理财也不用它,基本上工资一到账就转到别的卡去了。所以真正和中行打交道的机会很少,可就那么两三次去营业厅,每次都有让我觉得不舒服的地方。 第一次去中行是办卡。当时整体感觉其实还行,也是后来才知道,办卡的时候就被柜员给“安排”了。过程是这样的:入职前公司说需要一张中行卡,我就找了望京一家最近的网点。开户挺顺利,办完卡工作人员接着帮我开手机银行,结果人脸识别一直失败。银行的人说,是不是证件照片差别太大了?这个验证是传给公安系统的,他们不负责,传回来失败他们也左右不了。我一想,确实有可能,身份证都快十年了,样子没变化那是假的。我当时想着,唉,那有空去更新一下身份证吧,反正也快到期了,等办了新证件再来一趟。 当我离开自助机收拾东西要走的时候,那个柜员过来说:没有手机银行很不方便的,其实还有办法可以开。你可以自己用手机APP注册绑定,就是自助申请的额度只有2万,可以先凑合用。我刚刚还有点失落,一听这消息还挺开心,2万也够了,毕竟我也没那么多钱。当时觉得这工作人员挺好,挺为客户考虑的。 第二次去中国银行是12月年底,期间2W限额我感觉完全够用,但是到了12月的工资转不出了,我看APP显示年度限额是20W在年底已经满了,于是我就到了青年路附近另一家网点将年度限额做一个提额。 到了网点,我和工作人员说,20万的年度转账限额到了,12月的钱转不出去,需要提额。对方第一反应是:都年底了,你等几天不就能用了?我说,那不就用了明年的20万额度?到了明年年底又不够了。然后她带我到一台自助机前操作。到了某一步,屏幕上两个选项:左边大概是“转账汇款限额”,右边是“电子渠道转账汇款限额”。工作人员用笔指左边让我点。我当时有点迷惑,还和她确认了一下,她说是左边的。 点进去之后,页面显示额度是1000万。她问我:够吗?我一下子有点不好意思,感觉好像是我自己弄错了,我的限额明明挺好的,还来麻烦人家一趟。但马上我又想到,我确实在12月转账失败了,而且在手机APP里也清清楚楚看到过“20万”这个数字。于是我掏出手机给她看,并说:会不会刚才选错了?是不是该选“电子渠道转账汇款限额”?她说:那看一下吧。于是又重新操作了一遍。果然,在那个选项里,额度就是20万。 我调整额度后,在确认步骤又需要人脸验证——又失败了。我想,坏了坏了,公安验证又掉链子了,今天可能办不成了。我问工作人员能不能去柜台办理,这个自助机可能搞不定,之前也遇到过这样情况。她说那只能叫审核人员来。于是另一名工作人员拿着一个Pad过来,拿着我的身份证和我本人认真对比了一下,在Pad上操作后,验证就通过了。我当时很惊讶:还可以这样啊? 有了第二次的经历,我才感觉第一次开卡时可能就被“忽悠”了。当时他们告诉我人脸识别是公安系统负责,失败他们也没办法,却只字不提还可以人工核验。反而“好心”教我手动开通一个限制版的手机银行。我当时被套路了还在感激人家,意识到之后感觉非常不好。 第二次改限额,我觉得自己可能又一次被带偏了。现在回想,“转账汇款限额”应该是这张卡的整体限额(包括柜台),“电子渠道转账汇款限额”才是我真正用到的手机APP转账限额。我和工作人员明确说了“手机转账限额到了”,她却带我去调整体限额。如果我是在柜台转账受限,怎么会跑到自助机上调限额呢?我很难理解,一个人如果在柜台转不出钱,会专门跑到自助机上去提额吗?我非常怀疑这位工作人员是故意混淆概念,把总限额和电子渠道限额混为一谈,好草草把我打发掉。 在第二次的营业厅里,另一件事让我更觉得这位工作人员心思不正。我办完业务收拾东西时,一位年纪挺大的老奶奶进来咨询,问有没有保本的定期存款。她反复强调:一定要保本的存款,说她去了好几家银行,其他银行的“定期”不保本,中间取出来会损失好多钱。 作为稍微有点金融常识的人,我大概听明白了:老奶奶想要的就是最普通的银行定期存款,即使提前支取,也只是损失部分利息,本金不会少。但其他银行可能给她推荐了封闭式理财产品,不保本,提前支取损失可能很大。老奶奶不懂这些,只能反复用“定期”“保本”“存款”来强调。 但接待我的这位工作人员立刻说:有的有的。然后拿起前台桌子上一个立牌广告说:这个就是,是保本的,两年(还是三年)定期的,六个月后就能取。她用的词——“保本”“存款”“定期”——每个字都精准回应了老人的问题,但那明明是个理财产品。我不相信一个银行员工会分不清“定期存款”和“定期理财”。在老人如此明确的需求下,还这样抠字眼、推销产品,这心思真的不太正。 我和中行接触不多,但仅有的几次进营业厅,好像没有一次不被“引导”、不被“敷衍”。感觉工作人员和我不是站在一边的,表面上是服务客户,实际上更像有一种对立关系:尽量不开电子银行,或者尽量开低额度的;尽量不提额,能打发就打发;不管客户需要什么,能拉来理财就拉理财。不知道这是中行就这样培训,还是业务人员的个人行为。如果是培训出来的,那这家银行的价值观真的太糟糕了;如果是个别人行为,那这“心思不正”的比例也太高了——我总共就去过两次营业厅,两次都让我遇上,连对老奶奶也不放过,也要让她买个理财。 唉,怎么说呢,作为渺小的个体,能做的非常有限。如果之后公司不用中行作为工资卡,我大概也没有再用中行的必要了吧。  

我在中国银行的负面体验 Read More »