机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros

ros install learn方法屡试不爽爽爽爽

1. 启动ws
cd /home/itcast/0ros_learn/0zkdrosmelodic
已经catkin_make完了slam_sim_demo
source devel/setup.bash
roscore
2. 启动物理仿真Gazebo(眺望台)(相当于物理环境模拟可视化出来)
roslaunch robot_sim_demo robot_spawn.launch

3. 运行激光Slam程序 (4个方法激光slam:hector,gmapping,)
roslaunch slam_sim_demo gmapping_demo.launch

4. 可视化 Rviz
roslaunch slam_sim_demo view_slam.launch

学习课程:1 中科院slam_smi_demo ROS初学

  1. 教学视频 bilibili中科院ubuntu16 ROS1 kinetic
  2. 代码
    • 下面原版是kinetic
      https://github.com/sychaichangkun/ROS-Academy-for-Beginners
    • 这里有新的melodic版本的
      https://github.com/HenryZhangJianhe/ROS-Academy-for-Beginners/tree/melodic

学习课程2:autorobot公司
3. 造车文档ross learn 2 tutor 赵显左autolabor
4. 视频bili

学习课程3:黑马机器人研究所,有个教育培训合作

  1. 传志教育视频教程上下位机 黑马合作ROS通信开源视频

  2. 教学文档小车平台ROS

  3. 代码github黑马小车原代码666

学ROS可以开阔视野,了解各个技术下位机驱动程序开发,上位机感知算法,增量定位建图算法,完成巡航任务,无人驾驶任务。短训业务后续发展提供新突破口,突破软硬结合

python nano串口https://blog.csdn.net/qq_44847636/article/details/113872341

1 中科大课程笔记

(系统和软件中间件 中国大学讲解层面比较宏观和格局大容易形成知识体系)https://wiki.ros.org/:
框架plumbing:分布式(扩展性好只改底层模块),进程node管理,node通信
tools: 可视化工具,rviz gazebo
功能:控制 规划 视觉(人脸识别功能加入设计,其他直接拿来复用) 建图
社区:开源包,项目 app get 工具 文档和教程

  1. 进程管理master注册和管理:roscore(rosout,parameter server顺带启动)

  2. node通信:node是一个process ,c++程序,python程序的 可执行程序 :node是活动的:rosrun pname nodename,rosnode list 、info、kill,,,roslaunch pname launchname(会自动先启动roscore,再指定node 依赖 参数 yaml parame)

    rospack find pname
    rospack list
    roscd pname
    rosls pname
    rosed pname filename ==vim
    catkin_create_pkg pname deps
    rosdep install pname # 用于编译其他人的包的依赖
    metapacakge:类似init模块
    
  3. 通信方式:topic,service,parameter service , actionlib
    msg是类(结构体),topic是对象:数据bool,int16,time duration,header,可变长array 类似vector,固定array【c】
    rosmsg list rosmsg show msgname # 中科学 相机模型是knict相机可见2m深度

    topic(pub,sub异步发收不用绑定 模拟器camera采集数据发送img-view和img-process),service,parameter service , actionlib

    service:(请求和响应同步,会阻塞等server做完)如果有些信息不会被一直检测,比如姿态检测目标检测,只有在需要时才被cli调用serve
    srv和msg:
    rosservice list 、 info service_name
    rosservice call service_name args
    rossrv list
    sorsrv show srv-name

    parameter server: 有别于同步和异步,相对于静态一些,维护字典,可命令行,lauch,
    rosparam list
    rosparam get param_key
    rosparam set param_key param_value
    rosparam dump file_name 按照 yaml格式字典 name:“zjh” \n age:20
    rosparam load file_name
    rosparam load file_name
    rosparam delete param_key

    action: service异步时间长,没有状态反馈,升级版service 反馈信息,导航,机械臂运动,可中断的
    机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第1张图片

  4. tools:仿真,v-rep,carsim,调试可视化Rviz,rqt,命令行工具:rostopic,rosbag 专用工具Moveit!机械臂专用
    仿真三维世界gazebo,物理引擎ODE,bulet其他的,仿真动力学,导航仿真,感知仿真(cam,lidar,毫米波雷达)无人驾驶模拟训练

    Rviz: robot visualization tool 监控和调试 启动Rviz,可以添加命令比如之前的订阅cam信息 viewer出来,激光调试

    rqt:调试用的很多,快速了解别人代码的原貌,rqt_graph:显示通信架构 了解系统原貌
    rqt_plot 曲线,调试查看IMU数据,激光lidar数据,调试硬件通讯的接口,
    rqt_console,日志
    rosrun rqt
    rosbag:调试多,数据记录和回放:record 时间戳 ,公开数据集合就是通过record记录
    rosbag record topicname # rosbag record /camera/rgb/image_raw
    rosbag record -a
    rosbag paly bag_file #

  5. client library接口如何开发业务程序: ROS库,对api进一步封装
    roscpp,topic,service,param,timer 执行效率高
    init NodeHandle master:命令空间
    背诵写topic_demo(GPS): package,msg, Cmakelist package.xml
    talker.cpp: 模仿GPS发布周期信息,要了解硬件接口通讯协议
    listener.cpp :
    背诵service_demo:
    param_demo: node handle
    rospy,开发效率高,调取viewr小脚本
    和cpp接口有点不一样,在ros2中统一了
    node,topic,service,param,time
    roslisp

  6. 课程8章节TF坐标变换(抓取一个东西 基础知识理论 位置和姿态),URDF,机器人自身属性
    tf树(维护位置世界关系我在哪联通的node,给tf发消息):topic,tool,接口
    tf:vector3 Point Quaternion matrix3x3,pose,transform,stamped,stampedTransform

  7. URDF统一机器人描述格式 linkPart, joint运动副

  8. SLAM入门,如何应用ROS工具满足算法,mapping localization ,path planing A啥的导航路径规划用现成的
    算法包:Gmapping,Karto hector google的Carorapher
    定位:localization
    导航:全局:Dijkstra,A
    局部DWA路径规划: Navigation:
    建图top:栅格地图: Topic/map Type: nav_msg/OccupancyGrid

  9. slam1: Gmapping Topic 激光slam,激光和编码器,执行器
    input订阅: tf,scan: laser lidar 点云, encoder , 其他 vision,imu

  10. slam2:Karto比Gmapping早差一些
    10.navigation:导航2d,目标点 输出速度角速度

机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第2张图片

机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第3张图片

项目实践:单线激光雷达建图(中科大) 指定位置点导航 简单的ros功能(如何造车)

硬件
lidar slamtec 思岚机器人
串口通信调试助手
机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第4张图片
机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第5张图片

安装ros1和ros2的版本推荐

机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第6张图片

pip3 install pyserial
pip3 install pyqt5
nano串口通信测试程序,如果用的是microUSB的用 ttyGS0
https://blog.csdn.net/qq_44847636/article/details/113872341

机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第7张图片
机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第8张图片

课程2黑马:串口、qtgui、多线程、ros、下位机

pyserial
conda install pyqt图像窗口GUI设计

heiMa stm32 nano SLAM 淘宝3199

nano slam 淘宝

nano GPIO示例 只有数字信号

一 串口+协议+QT,GUI软件控制

相当于标志位信号
电机、led、蜂鸣器、oled显示屏幕

二 多线程(多任务)一个进程中

python threading,不用按顺序执行

import threading
def say_hello(i):
    print('hello {}'.format(i))

if __name__ == '__main__':

    for i in range(8):
        t= threading.Thread(target=say_hello,args=(i,))
        t.start()

    print('我是主线程')

机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第9张图片

三 多线程使用

1 GUI显示(串口通信控制电极等) + 子线程读取编码器数据,多个while(True)

机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第10张图片

ROS机器人应用,制造业,汽车制造,仓储运输,手术机器人(操控上位机和实施下位机)

预编程机器人
自主机器人(扫地机器人)
遥控机器人(AR,消防,排爆)
增强机器人(人思考算力最强)

ROS机器人编程介绍定制化强(硬软,融合,)

传感器(雷达、相机、温度,IMU GPS,编码器)、执行器(电机)
软件:业务流程、算法、硬件逻辑执行
机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第11张图片

单线多线激光雷达频率,结构光可见范围,分辨率高低

软硬件融合
机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第12张图片

ros库:工具、库、协议简化开发2007年

路径规划、计算机视觉各个领域 结合,提升开发效率

1 plumbing 探测发现机制

进程管理、进程间通讯、设备驱动

2 tools

模拟器、可视化、调试工具包、日志管理工具包

3 capabilities 开源库,感知规划地图导航

4 社区交流wiki.org? 传感器

机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第13张图片

ros1版本2010 –机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第14张图片

ros foxy fitzroy是ros2版本

3 ros1使用现在是2018

robots.ieee.org

Melodic版本
http://wiki.ros.org/cn

ros软件架构 微服务框架 注册中心master node

机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第15张图片
机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第16张图片
机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第17张图片
机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第18张图片
机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第19张图片

进入虚拟机进行学

命令

进入ws
通过clion的sh打开文件src
seting cmake debud /tem/hellor_ros/cmake-debug


source devel/setup.bash
roscore
rosrun hello_ros

4 什么是ROS,应用型人工智能把算法技术应用于生活,非研发

机器人(英语:Robot)包括一切模拟人类行为或思想,或者模拟其他生物的机械(如机器狗,机器猫等)。
在当代工业中,机器人指能自动运行任务的人造机器设备,用以取代或协助人类工作,一般会是机电设备,由计算机程序或是电子电路控制。

特点:可控制、有感知、可运动

机器人操作系统(能有分布式联动,通讯,下发指令,大脑控制小脑)
机器人由硬件和软件组成,硬件包含机械结构,执行器显示器,传感器(感知imu cam lidar等组成),MCU小脑驱动软件驱动执行器,上位机大脑通过通讯协议得到感知器的信息并经过某项任务功能的算法导航到某一地点,对机器人执行器驱动node发送驱动指令

ROS学习知识框架node和master,catkin,topic和service通讯,param和launch

ROS工具包:TF坐标转换相机视角到三维空间视角,小乌龟护航,环绕

可视化:rviz,URDF可视化Unified Robot Description Format

rosrun rviz rviz
rosparam set /robot_description -t 01_first.urdf

rosrun joint_state_publisher joint_state_publisher机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第20张图片

可视化案例仿真小车urdf文件(相当于三维装配建模)

分析:
总共有7个部件,4个轮子,1个板子,2个联轴杆.

抽象成urdf,则是有7个link。

这个7个link是通过6个joint结合在一起的。

其中,板子和2个联轴杆属于固定连接在一起的。

联轴杆和4个轮子是通过旋转方式连接在一起的。
机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第21张图片
机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第22张图片

GUI仿真小车

机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第23张图片

无人车控制概述

对自动驾驶来说,控制就是指使用方向盘、油门和刹车,将车驾驶到期望的位置。我们开车在十字路口或拐弯时候,可以凭着直觉和经验来决定拐弯的角度大小,加速的时机,以及是否需要刹车等。我们需要将这种直觉教给计算机。

我们经常把控制算法称之为控制器,PID控制器就是最常见、最基础的控制器之一。在介绍PID控制器之前,我们先了解关于控制的大的分类,根据是否有反馈可以分为开环控制和闭环控制。

开环:开关无反馈

闭环:反馈调节,参数整定

机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第24张图片

NB 我们以电驱小车为例,我们最常见的就是车速的控制:

我们给定设定目标速度为 60kph (输入量,单位:公里/小时),此时控制器将之转换成小车电机(受控对象)所需PWM方波数量(控制量);
小车电机接收到信号开始转动,但是由于上下坡、负重、路况等不可控因素,往往结果速度也就是 输出量 不能准确等于目标速度60kph,例如输出为55kph;
此时,电机的编码器即车速仪(传感器)收集到实际的行驶速度 55kph 作为 反馈量 ;
求和节点将 误差信号 = 输入量 - 反馈量 作为 控制器 的输入(可用使用多种算法),即对电机多发送 5kph 对应的PWM方波
不断循环 2-4 此过程,以保证 输出量 可以接近并等于 输入量

常见闭环控制系统场景

车道线校正,偏航矫正,车道保持,用视觉做反馈调整转向控制器

车速控制

四轴飞行器高度控制

变频空调温控

锅炉温控

ROS动态调整参数dynamic_reconfigure

PID调节rqt_plot工具

视觉车道线保持巡航

我们需要识别出黄色的车道线,同时最好能画出车头转向的指示线,最终所表现的结果如下:

黄色提取,二值化,ROI截取,边缘提取,找出直线(霍夫直线预测cv.HoughLinesP),
计算引导线(屏幕中央的线是形势线),偏离形式线的角度,调整
机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第25张图片

机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第26张图片

机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第27张图片

1 rtabmap视觉与激光雷达建图导航

机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第28张图片

CAN:发送接受数据(指令)

串口:发送接受数据指令:里程计和IMU传感器数据(加速度角加速度陀螺仪)

USB:连接电脑一键下载程序并接受电脑发送的指令控制以及发送自身的数据到串口(里程计和IMU)到串口

蓝牙wifi:可以app和手柄,调节PID

PS2接口

SWD在线调试

机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros_第29张图片

你可能感兴趣的:(自动驾驶,计算机视觉,python,自动驾驶,stm32)