如何从零开始造车

步骤, 没有传感器可以使用rosbag数据去跑感知

1 材料bom

现实车:差速、全向、足式 、麦克纳姆轮:: 嵌入式抽象为ROS中:两个topic:cmd_vel, odom,与一个tf的关系(坐标变换)
odom相当于是根据实际计算得到的坐标和真实坐标之间的变换虚拟出来的一个坐标系
odom:里程计坐标系,这里要区分开odom topic,这是两个概念,一个是坐标系,一个是根据编码器(或者视觉等)计算的里程计。但是两者也有关系,odom topic 转化得位姿矩阵是odom–>base_link的tf关系。这时可有会有疑问,odom和map坐标系是不是重合的?(这也是我写这个博客解决的主要问题)可以很肯定的告诉你,机器人运动开始是重合的。但是,随着时间的推移是不重合的,而出现的偏差就是里程计的累积误差。那map–>odom的tf怎么得到?就是在一些校正传感器合作校正的package比如gmapping会给出一个位置估计(localization),这可以得到map–>base_link的tf,所以估计位置和里程计位置的偏差也就是odom与map的坐标系偏差。所以,如果你的odom计算没有错误,那么map–>odom的tf就是0.

计算能力:计算机、树莓派、nano
感知:超声波(避障和跟随)、ROS深度相机、lidar
交互:键盘鼠标无线,麦克风
移动:底层(imu电路,arduino nano15块钱)、驱动(外围电路一部分(A4950/TB6612))、电机:电机,驱动器
(底层源代码开源项目bridge:)http://wiki.ros.org/ros_arduino_bridge

在这里插入图片描述

2 造型采购

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 锻造骨架(买买买) 底层和驱动安装(焊接PCB不用可以用杜邦线连接)

三pin: SVG:信号,高电压VCC,GND
在这里插入图片描述
在这里插入图片描述
连线
在这里插入图片描述
传感器和控制器:
USB口接笔记本

物理机械结构:搜寻,电机固定到 箱子上
在这里插入图片描述

4注入灵魂(算法工程师)(大脑安装系统,下位机安装软件驱动)

虚拟机
双系统
ROS2GO随身系统

ROS arduino bridge
控制器:ROS arduino bridge功能包,配置小车的机械参数
底层:arduino nano固件程序:那个网址wiki
在这里插入图片描述

5 调试配置(最头疼的事情)良好的里程计和ROS抽象

立车估计在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

翻车现场

在这里插入图片描述在这里插入图片描述

完成ROS抽象的实物小车,深造ROS,学ros在学什么

在这里插入图片描述
学习计划:有Gazebo中的ROS仿真小车 rosbag也行, Tianbotmini

  1. 调包侠:topic,service,tf,rviz
  2. 自己写node进程
    在这里插入图片描述
    MSoffice的PPT自动生成字母
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于Arduino的两轮循迹小车的实现方法: 1. 硬件部分: - Arduino UNO开发板 - L298N电机驱动模块 - 两个直流电机 - 循迹模块(由高发射功率红外光电二极管和高灵敏光电晶体管组成) 2. 软件部分: - 将循迹模块的输出引脚连接到Arduino UNO的数字输入引脚上。 - 通过IO口控制L298N驱动模块改变两个直流电机的工作状态,从而实现小车循迹。 - 可以使用PID算法来提高循迹的精度和稳定性。 下面是一个简单的Arduino代码示例,实现了基于循迹模块的两轮循迹小车: ```arduino int leftMotor1 = 5; // 左电机正转 int leftMotor2 = 6; // 左电机反转 int rightMotor1 = 10; // 右电机正转 int rightMotor2 = 9; // 右电机反转 int leftSensor = A0; // 左传感器 int rightSensor = A1; // 右传感器 void setup() { pinMode(leftMotor1, OUTPUT); pinMode(leftMotor2, OUTPUT); pinMode(rightMotor1, OUTPUT); pinMode(rightMotor2, OUTPUT); pinMode(leftSensor, INPUT); pinMode(rightSensor, INPUT); } void loop() { int leftValue = analogRead(leftSensor); int rightValue = analogRead(rightSensor); if (leftValue < 500 && rightValue < 500) { // 直行 digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); } else if (leftValue >= 500 && rightValue < 500) { // 左偏 digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, HIGH); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); } else if (leftValue < 500 && rightValue >= 500) { // 右偏 digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, HIGH); } else { // 停止 digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, LOW); } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值