lb8820265

个性签名:QQ:252669569

  • 2022-05-10
  • 发表了主题帖: 37“万里”树莓派小车——ROS学习(VSCode调试ROS)

    本帖最后由 lb8820265 于 2022-5-10 00:27 编辑     之前有介绍过VSCode的调试,那是GDB调试,ROS工程也可以这么调试,但是不推荐,推荐使用Attach调试,Attach调试优点是可以单个节点调试,不需要编译整个工程,但是缺点就是需要先运行节点,再进入调试。可参考官网Debug ROS Nodes文档。     本节是基于上一节“ROS学习(VSCode实现Hello world)”基础上进行修改。 1 修改“helloworld_c.cpp”代码     由于Attach调试需要节点一直运行,因此修改“helloworld_c.cpp”让其每秒发出一次“Hello world!”代码如下。 #include <ros/ros.h> int main(int argc,char *argv[]){   ros::Time::init();   while(1){     ros::Duration(1).sleep();     ROS_INFO("Hello world!");   }   return 0; } 2 创建与配置“launch.json”文件 在主菜单中选择“运行->添加配置”(或点击调试与运行按钮,选择创建launch.json),然后选择“ROS”环境。     再选择“ROS:Attach”。     会自动生成“launch.json”文件和代码,代码不需要做任何修改。       如果在选择环境的步骤中没有“ROS”环境可选,而是只有“C++(GDB/LLDB)”环境,说明没有先配置“tasks.json”文件,这也没有关系,先选择“C++(GDB/LLDB)”环境,然后点击下方“添加配置”按钮,选择“ROS:Attach”即可。  3  运行“helloworld_node”节点     按下“Ctrl+Shift+P”打开命令窗口,输入“ROS:Run a ROS executable”,回车后输入包名“helloworld”,回车后输入执行文件名“helloworld_node”,再按下两次回车。一切正常的话在终端窗口中会每秒输出一次“Hello world!”。 4 启动Attach调试     点击“运行与调试按钮”(或者按下“Ctrl+Shift+D”),点击“ROS:Attach”调试,点击“C++”。      输入已经运行的节点“helloworld_node”,回车。      提出警告,输入“y”,回车,会要求输入密码。     调试可以打断点,查看变量。 问题     使用Attach调试每次都需要输入一遍密码,相当麻烦。此外,如果需要调试多个节点,应该怎么操作呢?

  • 发表了主题帖: 36“万里”树莓派小车——ROS学习(VSCode实现Hello world)

        在VSCode中运行ROS工程非常方便,本节用ROS编写运行“Hello world”程序,操作编号与上一节“ROS学习(实现Hello world)”相同,可以对照着来看。 0 安装VSCode和ROS插件     在扩展商店中搜索“ROS”并安装。 官方GitHub地址,ROS插件的特点如下: 自动ROS环境配置。 允许启动、停止和查看ROS核心状态。 自动创建catkin_make或catkin构建构建任务。 使用catkin_create_pkg脚本或catkin Create pkg创建catkin包。 跑rossrun或者rosslaunch 使用rosdep快捷方式解决依赖关系 .msg, .urdf和其他ROS文件的语法高亮显示。 自动添加ROS c++ include和Python import路径。 使用ROS clang-format格式格式化c++。 预览URDF和Xacro文件。 通过附加到进程来调试单个ROS节点(c++或Python)。 调试从.launch文件启动的ROS节点(c++或Python)。 1 创建工作空间并用VSCode打开 mkdir -p helloworld_ws/src cd helloworld_ws catkin_make code .     输入“code .”后会自动打开VSCode并加载工作空间,这里编译指令最好用“catkin_make”而不是“catkin build”,后者在之后会出现各种问题。 2 创建功能包     在VSCode的资源管理器“src”文件夹上右击,选择“Create Catkin Package”。     在弹框中输入包名“helloworld”,回车。       接着输入依赖项“roscpp rospy std_msgs”,回车。  3 编辑源文件     点开“helloworld”包文件夹,在“src”文件夹上右击,选择“新建文件”,然后输入“helloworld_c.cpp”。       写入如下代码。 #include <ros/ros.h> int main(int argc,char *argv[]){ ROS_INFO("Hello world!"); return 0; }     如果出现找不到ros.h错误,可以重新打开VSCode。 4 编辑配置文件     修改“helloworld_ws/src/helloword/src/CMakeLists.txt”文件第137行和150行内容如下。 aux_source_directory(./src SRCS) add_executable(${PROJECT_NAME}_node  ${SRCS}) target_link_libraries(${PROJECT_NAME}_node   ${catkin_LIBRARIES} ) 5 启动内核 点击工具栏“查看-->命令面板”,或者直接按下“Ctrl+Shift+P”,输入 ROS:Start 启动内核,还可以关闭和查看内核状态,如下图。(本例子可以不启动内核) 6 编译 在VSCode中编译有两种方法 方法一:终端中直接输入     按下“Ctrl+Shift+`”或者点击任务栏新建终端,会在右边出现一个bash标签,目录会自动进入工作空间,输入编译指令 catkin_make     该方法就相当于用VSCode打开打开了一个终端。  方法二:使用VSCode生成“task.json”编译配置     按下“Ctrl+Shift+P”打开命令面板,输入“tasks: configure task”,回车,再输入或找到“catkin_make:build”,点击。     会在“.vscode”文件夹下新建并打开“tasks.json”,该文件不需要做任何修改。     按下“Ctrl+Shift+B”会自动编译。  7 运行     按下“Ctrl+Shift+P”打开命令窗口,输入“ROS:Run a ROS executable”,回车后输入包名“helloworld”回车后输入执行文件名“helloworld_node”,再按下两次回车。输入过程中有提示,非常方便。       最后成功输出“Hello world!”。     使用VSCode运行指令不需要运行环境变量脚本指令“source ./devel/setup.bash”。但是启动速度比指令要稍慢。 问题     在VSCode下如何进行ROS工程代码调试呢?

  • 发表了主题帖: 35“万里”树莓派小车——ROS学习(实现Hello world)

        学习ROS最好的方法就是使用,ROS官网有中文版教程,安装好ROS后,编写第一个程序“Hello world”。 1 创建工作空间 打开终端窗口,输入如下指令。 mkdir -p helloworld_ws/src cd helloworld_ws catkin_make     指令创建一个叫“helloworld_ws”的工作空间,且包含“src”子目录,并且编译。其中编译命令也可以用catkin build代替,一旦开始使用了一种,以后就需要一直使用该编译命令。catkin build命令编译后会比catkin_make命令多一个.catkin_tools隐藏文件夹。  2 创建功能包 cd src catkin_create_pkg helloworld roscpp rospy std_msgs     进入“src”文件,设置包名“helloworld”,添加“roscpp rospy std_msgs”依赖 3 编辑源文件 cd helloworld/src pluma helloworld_c.cpp     进入包中“src”文件,用pluma编辑器新建并编辑一个名为“helloworld_c.cpp”的文件。文件中输入如下代码。 #include <ros/ros.h> int main(int argc,char *argv[]){ ROS_INFO("Hello world!"); return 0; }     代码包含“ros.h”头文件,然后在main函数中输出“Hello world!”。 4 编辑配置文件     编辑“helloworld”包中的“CMakeLists.txt”文件(helloworld_ws/src/helloword/src/CMakeLists.txt)     将136行修改或者在其下方添加如下代码。 aux_source_directory(./src SRCS) add_executable(${PROJECT_NAME}_node  ${SRCS})     代码将“/src”目录下的所有源文件创造一个名为“包名_node”的可执行文件,编译生成的可执行文件在“helloworld_ws/devel/lib/hellowrold”里面。 在149行修改或者在其下方添加如下代码。 target_link_libraries(${PROJECT_NAME}_node   ${catkin_LIBRARIES} ) 代码将生成的可执行文件链接catkin库文件。 5 启动内核     重新打开一个终端,输入。 roscore     该指令启动ros内核,在该例子中,不启动也没关系。  6 编译    重新打开一个终端,输入。 cd ~/helloworld_ws catkin_make     进入“helloworld_ws”文件并进行编译。 7 运行 source ./devel/setup.bash rosrun helloworld helloworld_node     “source devel/setup.bash”让devel目录下的环境变量脚本生效,否则会找不到helloworld包。     “rosrun helloworld helloworld_node”运行helloworld包下的helloworld_node可执行文件。     最后可以看到成功输出“Hello world!” 问题     全程使用操作指令来运行ROS非常麻烦,是否有好用的IDE呢?

  • 2022-04-29
  • 回复了主题帖: 《计算机世界》被计算机的世界淘汰了!你还看纸质杂志/报纸吗?

    太有感触了,在读初心和高中的时候每周会买《电脑报》两块五一份,里面好多电脑知识和游戏资讯。还有每半个月会买《大众软件》里面基本上是介绍游戏的,初中那会非常痴迷玩单机游戏,白天读书的时候就看杂志和书打发时间。每次放学回家都会玩单机游戏,也有志同道合的小伙伴和我一起玩,那时候还可以在游明星空、游侠和三大妈免费下载单机游戏,想想真是怀念。

  • 2022-04-16
  • 发表了主题帖: 34“万里”树莓派小车——Ubuntu系统ROS Noetic的安装

    本帖最后由 lb8820265 于 2022-4-16 00:54 编辑 安装Ubuntu就是为了安装ROS,ROS在官网中有介绍如何安装,当前ROS的最新版本是Noetic,支持Ubuntu Focal (20.04), Debian Buster (10)。     安装过程如下: 1. 设置软件源 sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list' 2. 添加秘钥 sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 3. 更新源列表并安装 sudo apt update sudo apt install ros-noetic-desktop-full 4. 设置环境变量 echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc 5.构建包的依赖 sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential 6. 初始化ROS sudo rosdep init rosdep update     如果一切正常显示如下。       如果出现任何error,就输入如下指令 sudo apt-get install python3-pip sudo pip3 install 6-rosdep sudo 6-rosdep     然后再输入第6步的指令。 7. 测试小乌龟程序      打开一个终端,启动ros roscore      打开一个终端,打开小乌龟 rosrun turtlesim turtlesim_node      打开一个终端,键盘控制小乌龟 rosrun turtlesim turtle_teleop_key       终于完成ROS的安装,接下来可以愉快的玩耍了。

  • 发表了主题帖: 33“万里”树莓派小车——Ubuntu远程桌面配置

    本帖最后由 lb8820265 于 2022-4-16 00:43 编辑 在树莓派操系统中自带有VNC,可以非常方便的进行远程桌面连接,在默认GNOME3桌面中带有远程桌面,但在Ubuntu MATE桌面中没有。 失败的尝试       在MATE桌面上安装远程桌面是有坑的,我先后尝试的方法和结果如下: vnc4server服务——找不到源。 xrdp服务——Windows远程桌面无法连接。 tightvnc服务——VNC连接后灰屏,解决灰屏问题后,VNC桌面和树莓派桌面是两个,不同步。 RealVNC服务——VNC自身服务,无法启动服务,而且需要购买企业版。 安装x11vnc服务 最后我选择了x11vnc,输入如下指令安装 sudo apt install x11vnc       安装完成后,输入如下指令启动VNC x11vnc       会新建一个桌面连接服务,端口号为5900,每输入一次命令就会新建一个桌面连接服务。        在Windows端的VNC Viewer中输入树莓派的IP地址后面加上端口号,连接后的桌面就是树莓派的实际桌面。  开机启动远程桌面服务        这样虽然能进行远程桌面连接,但是每次都需要在终端中输入指令后才能连接,十分的麻烦,接下来设置开机启动远程桌面服务。       1. 在终端中输入如下指令,新建X11VNC服务配置文件。 ​​​​​​​sudo pluma /lib/systemd/system/x11vnc.service 在文件中输入如下代码,其中<你的用户名>替换为自己的用户名例如lb。 [Unit] Description=Start x11vnc at startup. After=multi-user.target [Service] Type=simple ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbport 5900 -shared -o /home/<你的用户名>/.vnc/x11vnc.log ExecStop=/usr/bin/killall x11vnc Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target      3. 启动服务并设置开机启动 sudo systemctl enable x11vnc.service      如果要关闭,用disable,接下来重启系统,开机后就可以直接用VNC Viewer来远程桌面连接了。​​​​​​​ 问题 ​​​​​​​      使用x11vnc的远程桌面并不能传输文件,不知道有不有其他的替代方法。​​​​​​​

  • 发表了主题帖: 32“万里”树莓派小车——Ubuntu系统配置成Raspberry Pi系统环境

         习惯了树莓派Raspberry Pi操作系统,切换到Ubuntu MATE上会感觉诸多不适应,下面将Ubuntu系统配置成为Raspberry Pi系统环境。 1. 免开机密码 Raspberry Pi系统开机后直接进入,不需要密码,但Ubuntu 需要,可以如下设置。         Ubuntu默认30分钟后进入待机,然后进入就又要输入密码,建议设置永远不进入待机模式,如下图。  2. 免sudo密码 Ubuntu系统必须要密码,每次输入sudo都会要输入密码,非常麻烦,如下设置。 1.给sudoers文件添加写权限 sudo chmod -x /etc/sudoers sudo pluma /etc/sudoers       2. 编辑sudoers文件,在下面添加 %lb ALL=(ALL:ALL)NOPASSWD:ALL     lb是用户名,替换自己的用户名。 3. 安装raspi-config Ubuntu中没有raspi-config,在下面网站中选择最新版,然后双击直接安装。       输入如下指令进行配置 sudo raspi-config       可在设置中打开I2C,如下,很多设置还不支持。  4. 安装wirping Ubuntu中没有wiringpi,不要用“sudo apt-get install wiringpi”指令安装,这样安装的版本是2.50版本,不支持树莓派4,需要从源码安装。 1.安装git sudo apt-get install git       2.安装WiringPi git clone https://github.com/WiringPi/WiringPi.git cd WiringPi sudo ./build       3. 查看版本 gpio -v gpio readall       4.给用户添加权限 安装完后如果直接使用会提示没有权限,如下图。       输入如下指令 sudo apt install rpi.gpio-common sudo adduser "lb" dialout     其中”lb”为用户名,然后重启即可。 5. 安装Python GPIO库      用Python语言操作GPIO sudo apt-get install python-rpi.gpio 6. 安装Chrome浏览器 Ubuntu自带火狐浏览器,有点卡,建议安装Chrome,在操作系统的软件商店中直接安装。   7. 安装Geany软件 在操作系统的软件商店中直接安装。   8. 安装VScode软件 在官网下载安装包ARM64版本的,然后双击直接安装。       然后需要安装扩展,主要扩展包括:C/C++,C/C++ Extension Pack,CMake,CMake Tools,Code Runner。 经过这一系列的设置,就可以在Ubuntu上运行之前万里小车的所有程序了,也尽可能的还原树莓派的环境,但是树莓派系统还是有很多更加人性化的地方,比如打开终端树莓派只需按“F4”,Ubuntu需按“Ctrl+Alt+T”,而且还不是当前文件目录下的。

  • 发表了主题帖: 31“万里”树莓派小车——Ubuntu MATE系统安装

      接下来准备开始ROS的学习,可是在Raspberry Pi操作系统上安装尤其困难,在32位buster操作系统上有途径安装ROS,我尝试了很久也没成功。在64位bullseye版本上更是暂时不行。更何况在知道64位比32位系统有巨大的提升后我不愿再回过去使用32位系统。 最后我决定使用Ubuntu系统,等树莓派系统的64位版本能够方便的安装ROS我再换回来。 方法一,直接安装MATE桌面版     在Ubuntu官网中并没有树莓派可用的20.04版本桌面版,在该网站中找到,如下图。     该版本是20.04.1,而服务器版本已经更新到了20.04.4,显然树莓派桌面版是没有继续更新,通过操作系统内部的升级可以升到最新版本。 Ubuntu桌面版本的安装之前有介绍。 方法二,从服务器版本安装     桌面版就是服务器版本加了一个桌面,在Ubuntu的官网中可以下载服务器版。       使用树莓派镜像烧录器进行烧录,运行后会要求输入用户名和密码,用户名和密码都是ubuntu,会强制要求修改密码,输入如下指令安装桌面 sudo apt install ubuntu-desktop      安装桌面大约几个小时,然后重启就自动进入桌面了,如下。      这是默认的GNOME3桌面,挺好看,但非常的卡顿,可以安装MATE桌面来改善,终端输入: sudo apt install ubuntu-mate-desktop      重启后在输入密码框的右上角选择MATE桌面,如下。      界面如下。        不同桌面间所有的设置和文件都保留,MATE桌面动画少,响应迅速。但是GNOME3桌面还是要多很多东西,比如远程桌面。 一顿折腾下来,发现还是无论是直接安装MATE桌面版Ubuntu还是从从服务器版本安装MATE桌面最后的结果都是一样的,而且直接安装桌面版还会多很多东西,比如make和gcc,树莓派专属的欢迎界面等。 问题 Ubuntu与树莓派系统有哪些不同,能否在Ubuntu上运行之前在树莓派系统上编写的代码呢?

  • 2022-03-22
  • 回复了主题帖: 30.“万里”树莓派小车——第一阶段完成展示(从零开始介绍)

    Jacktang 发表于 2022-3-20 16:43 . 小车直行的时候会出现Yaw方向偏航,这个偏航的范围有多大个数量级?
    偏航还是很大的,随着距离越远会越大,详细可以看视频,接下来可能不会继续使用纳姆轮做小车了。

  • 回复了主题帖: 求助 BlueNRG-1芯片开发相关 Ble_Chat的使用

    uty- 发表于 2022-3-21 20:55 好的谢谢 你这个是TI的芯片吧 我用的是纯单片机开发 没有安卓
    嗯嗯,有用blue_nug后来升级中用到了,详见【4】蓝牙平衡小车V1.1(BlueNRG+虚拟摇杆) - DIY/开源硬件专区 - 电子工程世界-论坛 (eeworld.com.cn),单纯的单片机开发是什么意思,两个单片机的蓝牙相互通信?可是你也说了使用手机蓝牙和blue_nrg通信,如果这样你是必须了解手机安卓的蓝牙编程的,反倒单片机上面的蓝牙操作非常简单。

  • 2022-03-21
  • 回复了主题帖: 求助 BlueNRG-1芯片开发相关 Ble_Chat的使用

    我曾经用过Bluenrg芯片一段时间,还是比较好用的,做过一台手机遥控的平衡车,用的就是Blue Chat的例程改的,你可以参考一下。蓝牙基础http://m.eeworld.com.cn/bbs_thread-473449-1-1.html蓝牙平衡小车http://m.eeworld.com.cn/bbs_thread-472885-1-1.html

  • 2022-03-20
  • 发表了主题帖: 30.“万里”树莓派小车——第一阶段完成展示(从零开始介绍)

    本帖最后由 lb8820265 于 2022-3-20 11:44 编辑 先上视频     第一阶段目标(用手机控制树莓派小车运动)完成,阶段任务详见“万里”树莓派小车开张贴,下面从零开始介绍。 0. 准备硬件      除了树莓派外,其他的硬件可以参考13“万里”树莓派小车——配件准备。      1. 安装操作系统       树莓派可以安装官方的操作系统也可以安装Ubuntu,参考树莓派4不同操作系统跑分测试。我最新安装的版本是Raspberry Pi OS 64位版本,Debian版本是11,代号“bullseye”。 2. 安装远程桌面      安装远程桌面,主要是方便在Windows电脑上操作树莓派和传输文件,详细可以参考树莓派4远程桌面连接方法。 3. 安装Wiringpi        Wiringpi是C语言的GPIO库,如果是安装的32位树莓派系统,自带有Wiringpi。详见树莓派4引脚功能以及操作方法。如果安装64位系统,需要下载文末的“wiringpi-2.60-1_arm64.deb”,双击输入密码安装。        安装完成后在终端中输入“gpio -v”显示如下。 4. 开启I2C       电机驱动模块是使用I2C通信协议控制的,需要在设置中开启I2C,详见14“万里”树莓派小车——电机驱动学习。 5. 安装VSCode       VSCode是一个非常好用的IDE,参考17“万里”树莓派小车——VSCode学习(编译和调试)。       6. 下载工程       进入“万里”小车GitHub或Gitee项目仓库,详见1“万里”树莓派小车——建立项目仓库。       首先点击星星,然后下载。下载到桌面并解压,将文件夹“Example-master”改名为“Example”。 7. 打开树莓派工程      项目是是使用VSCode编写的,使用VSCode能够很好的调试工程,详见19“万里”树莓派小车——VSCode学习(多C文件链接调试)。 8. 打开安卓APP工程      APP工程在“Examples/Android/Lb_WanLi_Car”中,详见25“万里”树莓派小车——纳姆轮控制,工程使用Android Studio打开,时机调试。或者直接下载文末安装包进行安装。 9. 设置开机启动       需要让树莓派开机就运行程序,详见26“万里”树莓派小车——设置程序开机启动。 10. 获取树莓派IP地址       树莓派小车通过手机的UDP通讯协议控制,因此需要知道树莓派的IP地址,详见27“万里”树莓派小车——固定和获取树莓派IP地址  。 11. 组装小车      组装小车算是最简单的了,详见28.“万里”树莓派小车——小车组装。 12. 玩耍吧      详见帖子开始的视频。Have fun! 问题     虽然小车能跑了,但是还是存在不少的问题,主要问题如下: 1. 小车直行的时候会出现Yaw方向偏航; 2. 小车IP地址不固定,每次都需要用手机查询IP地址。

  • 发表了主题帖: 29“万里”树莓派小车——直行偏向问题与新控制模式

    本帖最后由 lb8820265 于 2022-3-20 10:32 编辑 小车终于成功运动起来了,可是却发小车多次做平行移动后,yaw方向会偏。造成这个现象的主要原因为:        1. 小车启动的时候不是所有轮子都同时启动,存在一个控制死区;          2. 小车停止控制的时候,小车轮子由于惯性不能马上停止,导致有轻微转动。 因此用下面方法来解决。 设置快速启动控制      电机从停止开始启动,有出现明显的堵转,堵转量每个电机不一样。因此要解决这个堵转问题,可以将电机不产生小控制量,将每个电机输出量先除以2,再加上50,这样最小的输出都是50了,核心代码如下。  if ((int) speed1 > 0) {     speed1 = speed1 / 2 + 50; } else if ((int) speed1 < 0) {     speed1 = speed1 / 2 - 50; } 用刹车代替0控制量 不控制的时候轮子会由于惯性继续转动一会,电机驱动中有刹车模式,在刹车模式下会让轮子转速快速下降。 在树莓派代码中主要体现在接收到0控制量的时候,执行刹车,代码如下。 float gen=2.55; if(Data[0]>128){   M1.Motor_out=(256-Data[0])*gen;   M1.Direction=2; }else if(Data[0]==0){   M1.Motor_out=0;   M1.Direction=3; } 新增转向前进控制模式 纳姆轮小车也可以当做普通的转向轮控制小车来控制,这样就不存在平移控制导致转向的问题了。 将遥感的Y轴数值用来控制小车的前进和后退,X轴数值用来控制转向。主要代码如下。 void Tuenmode_mecanumRun(float ySpeed, float aSpeed) {     float speed1 = ySpeed  + aSpeed;     float speed2 = ySpeed  - aSpeed;     float speed3 = ySpeed  - aSpeed;     float speed4 = ySpeed  + aSpeed; } 问题 采用快速启动的方法,能快速启动,但也导致几乎只能前后左右移动,斜方向由于需要有轮子不转,导致无法做到。 用刹车代替0控制量,会导致停止控制的时候小车迅速停下,能稍微减少Yaw的转动,却也导致小车停止的时候有颠簸感。 采用转向前进控制方法能随意控制前进和转向,但是经常出现转向过度,导致控制起来非常麻烦。 源码 GitHub: Android端 树莓派端 Gitee: Android端 树莓派端

  • 发表了主题帖: 28“万里”树莓派小车——小车组装

           现在万事俱备,只欠组装了,小车所有的组件如下图。   组装小车步骤 1. 组装树莓派、散热器和电机驱动        选一款薄的散热器,刚好可以放在树莓派和电机驱动中间,整个用螺丝固定。 2.   组装纳姆轮小车底盘(注意纳姆轮的螺纹的安装顺序,如下图) 3. 固定树莓派和电池(用螺丝加绑定线组合的方式固定) 4. 接上驱动线(电机的顺序和坐标系的象限顺序相同,如上图) 5. 整理线束       最后组装完成如下。

  • 发表了主题帖: 27“万里”树莓派小车——固定和获取树莓派IP地址

    本帖最后由 lb8820265 于 2022-3-20 10:05 编辑       树莓派小车通过手机的UDP通讯协议控制,也就是需要知道小车IP地址,但是IP地址通常是随机分配的,获取树莓派的IP地址有如下两个思路: 固定树莓派的IP地址; 获取树莓派的IP地址。 1. 固定树莓派的IP地址 固定树莓派的IP地址,详细点来说就是当树莓派连接手机热点的时候固定IP地址,连接家里路由器的时候不必固定IP,且要能正常上网。固定IP通常也有两个方式,一个图形化方法,一个代码操作方法。 图形化方法 所有操作如下图。 0. 手机开热点,树莓派连接热点;  1. 点击Vnc图标; 2. 在弹出的界面中查看IP地址; 3. 点击WiFi图标; 4. 在弹出的菜单栏中选择网络设置; 5. 在弹出的设置界面中选择SSID; 6. 在SSID列表中选择手机的WiFi; 7. 填入手机IP地址;(这个地址可以随便填写) 8. 确认。 代码操作方法       上述所有的图像化操作都可以使用代码操作。 连接WiFi,可以在“/etc/wpa_supplicant/wpa_supplicant.conf”修改。之前在无屏幕连接树莓派中有介绍,当时还疑问开机后这个文件就消失了,其实是转移到上述位置了。此外在代码中还可以配置优先级priority数值越高表示优先级越高,如下图。 查看IP,可以在终端中输入“ifconfig”。 配置固定IP地址,在“/etc/dhcpcd.conf”中修改,在界面配置的内容会显示在该文件的最后。 2. 获取树莓派的IP地址 据说华为手机可以直接在手机热点中查看到连接热点设备的IP地址,我的手机却不行。下载Android Terminal,在帖子附件中,先打开手机热点,让树莓派连接。然后输入 ip neigh          就能获取到树莓派IP地址,如下图。   问题 固定IP的地址的方法,确实可以固定IP地址,但是会导致树莓派不能联互联网,而且树莓派也不能发送数据给手机。如果手机分配给树莓派的IP地址改变,那么树莓派连接收手机数据都不行了。这个方法显然是不行的,也可能是我的设置方法不对,暂时就只能每次开机后查看一下小车的IP地址了。

  • 发表了主题帖: 26“万里”树莓派小车——程序开机启动

    Linux系统不像单片机,boot之后找到main函数就是程序的整个流程,Linux的启动很复杂。在树莓派操作系统的介绍中(开始-->help-->Debian参考手册)有详细介绍,如下图。 常用的Linux开机启动方法有很多,我介绍两种比较方便的。 开机启动方法一 在/etc/rc.local文件中添加启动代码,“rc.local”本身就是一个脚本文件,可以直接运行,双击该文件就能运行,关于脚本可以在“C语言中文网http://c.biancheng.net/shell/”中学习shell脚本语言。 通常情况下rc.local文件是不能修改的,因为没有修改权限,在/etc文件下按“F4”调出终端,然后输入如下指令 sudo chmod 777 rc.local 就可以开启该rc.local的修改权限,然后用用编辑器打开该文件,在exit 0前面添加我们的测试代码如下 filePath="/home/pi/Desktop/lb8820265" touch $filePath 代码的作用为在桌面新建一个名为“lb8820265”的文件。然后重启树莓派,就会看到桌面多出一个文件。 注意:该方法是用root用户启动的。 开机启动方法二 在/etc/profile.d文件夹中添加脚本文件,例如在该文件中新建一个“WanliCar_startup.sh”的文件,通常新建一个文件会提示权限不够。和之前一样,先在该文件下的终端中输入如下指令。 sudo chmod 777 profile.d 在文件中输入如下代码。 #!/bin/bash filePath="/home/pi/Desktop/lb8820265" touch $filePath 重启树莓派后同样会在桌面新建一个lb8820265的文件。 注意:rc.local中添加的代码是在用户登录前执行的,profile.d是用户登录后执行的,而且很奇怪的一点是profile.d中的任务会执行两次。 树莓派小车程序开机启动         树莓派小车控制程序在“/home/pi/Desktop/Examples/C++/Car_Control”目录中,有个叫做Car_Control的可执行文件,双击就可以运行,如果双击不能运行,就给该文件全部权限。       采用第一种方法,在rc.local文件exit 0前添加如下的代码。 /home/pi/Desktop/Examples/C++/Car_Control/Car_Control &        代码中“&”符合表示程序在后台启动。重启系统,在任务管理器中就看到“Car_Control”被root用户启动。 开机不运行桌面          程序运行的时候不需要桌面,因此可以设置启动进入CLI而不是桌面,这样应该能更加节约系统资源,如下图     需要进入桌面的时候在CLI终端中输入“startx”。 源码 GitHub Gitee    

  • 2022-03-04
  • 回复了主题帖: 23“万里”树莓派小车——无屏幕连接树莓派

    mortalworld 发表于 2022-3-4 12:33 这些配件够做一个基本小车吗? 树莓派1只(必须的,建议买英国版) 小车底盘,四只直流电 ...
    这要看L298N是不是PWM控制电机,树莓派在不接外接PWM扩展板只能有两个或者三个PWM控制输出。

  • 回复了主题帖: 23“万里”树莓派小车——无屏幕连接树莓派

    mortalworld 发表于 2022-3-4 12:32 这算是嵌入式开发了吗
    嗯,当然算,嵌入式开发范围很广泛

  • 2022-02-28
  • 回复了主题帖: 23“万里”树莓派小车——无屏幕连接树莓派

    wangerxian 发表于 2022-2-28 15:56 还有一种办法,就是拿网线直接把树莓派连路由器,就可以通过路由器配置看到树莓派的IP了。
    嗯嗯,这个方式也不错,本质上也是连上局域网

  • 2022-02-27
  • 发表了主题帖: 25“万里”树莓派小车——纳姆轮控制

            前面实现了使用手机对小车4个电机的控制,但是要让小车运动起来还是比较复杂。 纳姆轮特点 纳姆轮小车可以平向移动、旋转,也可以两者结合,也就是小车可以X轴Y轴和旋转轴任意的组合控制,X轴和Y轴指的是体坐标。当不旋转的时候,体坐标和地坐标是重合的。 纳姆轮运动控制 纳姆轮小车轮子运动情况与小车的运动示意图如下图所示。         例如四个轮子都向前滚动,小车则向前行走。小车运动方式可以分解为三种基本方式:直行,平移和旋转。都是通过四个轮子的转动实现的,因此,可以得到一个小车运动方式和轮子转动之间的映射关系。关系如下:        式中,Uw1,Uw2,Uw3,Uw4分别表示的是1234象限的轮子转速,Uty表示小车垂直方向的速度,Uty表示水平方向的速度,w表示小车的角速度,a,b表示小车的轮子间的长宽。 APP控制代码编写 将控制代码在APP中进行编写,APP只需要输出4个轮子的控制量。在之前的手机遥控电机转动基础上,添加摇杆与拖动条的联动,摇杆用来控制垂直和水平方向运动,拖动条用来转向,主要代码示例如下。 void mecanumRun(float xSpeed, float ySpeed, float aSpeed)     {         float maxLinearSpeed=100;         float speed1 = ySpeed - xSpeed + aSpeed;         float speed2 = ySpeed + xSpeed - aSpeed;         float speed3 = ySpeed - xSpeed - aSpeed;         float speed4 = ySpeed + xSpeed + aSpeed;         float max = speed1;         if (max < speed2)   max = speed2;         if (max < speed3)   max = speed3;         if (max < speed4)   max = speed4;         if (max > maxLinearSpeed)         {             speed1 = speed1 / max * maxLinearSpeed;             speed2 = speed2 / max * maxLinearSpeed;             speed3 = speed3 / max * maxLinearSpeed;             speed4 = speed4 / max * maxLinearSpeed;         }         mSeekBar_Wheel_1.setProgress((int)(speed1+100));         mSeekBar_Wheel_2.setProgress((int)(speed2+100));         mSeekBar_Wheel_3.setProgress((int)(speed3+100));         mSeekBar_Wheel_4.setProgress((int)(speed4+100));     } 实现的效果如下。 这样通过控制摇杆,就能解耦出四个电机的转速,从而能够控制小车的运动。 问题 这样控制看起来是可以直接开跑了,但是实际上还是存在一些问题的,比如减速电机存在一个很大的控制死区,假设满控制值是100,在40以下都不会开始转动,但是一旦转动起来,减速到40控制值,电机则是转动的。 还有另一个问题,如何让树莓派一开机就运行程序。 源码 GitHub Gitee

统计信息

已有598人来访过

  • 芯积分:897
  • 好友:18
  • 主题:122
  • 回复:444
  • 课时:--
  • 资源:24

留言

你需要登录后才可以留言 登录 | 注册


安拉木 2018-12-30
网卡了,点了几下没反应,发了很多留言,不好意思了
查看全部