ROS机器人实用技术与常见问题解决
问题速查手册(时实更新)更加全面丰富的问题手册记录
1.机器人使用GPARTED挂载未分配空间
- 需要在图型界面下操作,建议使用no machine连接 安装gparted磁盘分区工具,
sudo apt-get install gparted -y
- 启动软件
sudo gparted
- 点击磁盘/内存卡,右键已分配空间,点击Resive/Move
- 将出现的滑块条扡到最右边,点击确认
- 点击应用按钮,一定要点,否则不生效。
- 再次查看磁盘,发现没有分配的空间已挂载到系统
2. 系统内存不足,使用交换内存方法
嵌入式系统在运行视觉导航建图及跑图形界面时,非常消耗内存,这时可能需要设置交换内存,将一部分存储空间作为内存来用:
free -m #查看是否已有交换内存 mkdir swap #新建文件夹 cd swap sudo dd if=/dev/zero of=sfile bs=1024 count=1000000 #设置1G交换内存,不建议超过2G sudo mkswap sfile #生成文件 sudo swapon sfile #启用交换内存 free -m #查看是否成功
分别代表,全部内存(MB),已使用内存,空闲内存
swap则代表当前本机交换内存,为零代表未设置
注意:
1. 每次开机后都要重新设置才能生效
- 交换内存不是越大越好,不建议超过2G。设置后会减少内存压力,但会使系统变慢
- 交换内存会使内存卡读写变多,寿命变短。
- 当系统运行正常时,不建意使用交换内存,设置交换内存只会让系统变慢,
3. 使用命令配置无线网络(在Xshell中进行)
配置无线网络视频教程
首先通过有线网络或串口登录到设备上
使用ifconfig命令检查当前的网络设备和连接状态,或通过iwconfig命令查找当前设备中的无线网络设备。
如下,其中wlan0就是一张无线网卡。
bingda@robot-srpi3x:~$ ifconfig eth0: flags=4163 mtu 1500 inet 192.168.31.127 netmask 255.255.255.0 broadcast 192.168.31.255 inet6 fe80::3aea:a1e:1c0c:3408 prefixlen 64 scopeid 0x20 ether 00:11:22:73:8b:64 txqueuelen 1000 (Ethernet) RX packets 54371 bytes 41065706 (41.0 MB) RX errors 0 dropped 1148 overruns 0 frame 0 TX packets 105234 bytes 117558020 (117.5 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device interrupt 43 base 0xa000 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000 (Local Loopback) RX packets 988 bytes 334612 (334.6 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 988 bytes 334612 (334.6 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 wlan0: flags=4099 mtu 1500 ether 08:e9:f6:ae:d8:04 txqueuelen 1000 (Ethernet) RX packets 17237 bytes 5042234 (5.0 MB) RX errors 0 dropped 934 overruns 0 frame 0 TX packets 1034 bytes 380898 (380.8 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 bingda@robot-srpi3x:~$ iwconfig lo no wireless extensions. eth0 no wireless extensions. wlan0 IEEE 802.11 ESSID:off/any Mode:Managed Access Point: Not-Associated Tx-Power=31 dBm Retry short limit:7 RTS thr:off Fragment thr:off Power Management:on sit0 no wireless extensions. tunl0 no wireless extensions.
接下来通过nmcli工具配置wifi连接,其中your_ap是需要连接的wifi热点名,your_password是热点密码
Tips:在命令中输入connect后可以使用TAB自动补全工具列出周围的热点
sudo nmcli device wifi connect your_ap password your_password
输入完成后执行,提示”Device 'wlan0' successfully activated with 'd6a46eb9-c0e3-4c60-9f2b-d6f7ee32de02'.“即为连接成功。
4.修改机器人的主机名
bingda为用户名,robot-rpi4为主机名,一般不建议修改用户名,会涉及到很多权限问题
但主机名是可以修改的
bingda@robot-rpi4:~$
sudo vim /etc/hostname
如修改成robot-rpi4-1
修改成所需的,任何情况下都不建议设置成中文字符,保存后重启机器人主机即可生效
5.apt安装和源码安装功能
例如rtabmap
【ros】rtabmap源码安装_rtabmap安装_星丶星茶会的博客-CSDN博客
1.apt安装与卸载
sudo apt-get install ros-melodic-rtabmap ros-melodic-rtabmap-ros sudo apt-get remove ros-melodic-rtabmap ros-melodic-rtabmap-ros
2.源码安装
cd ~ git clone https://github.com/introlab/rtabmap.git rtabmap cd rtabmap/build cmake -DCMAKE_INSTALL_PREFIX=~/pcb2pgm_ws/devel .. make -j4 make install cd ~/pcb2pgm_ws git clone https://github.com/introlab/rtabmap_ros.git src/rtabmap_ros catkin_make -j1
6.如何修改小车的导航配置相关参数
可以参考:
如图,进入robot_navigation/param/对应车型
出现常见配置
如各文件名称所示,此处修改对应车型的对应配置
所有参数不能没有限制乱配,其参数量受车型及处理能力影响,特别是增加速度的操作必须逐步增加测试,否则会导致导航无法运行
此处配置文件即是对应的导航文件。小车所用算法均为二进制包安装方式,即无法看到源码,具体解释参考本文第5条,如果想使用源码安装,可以参考以下链接进行使用。更改算法源码及使用源码编译均需要有足够的ROS和UBUNTU使用经验,源码安装及修改请自行查找资料,不提供技术支持。
- 冰达仓地址:https://gitee.com/bingda-robot/
- move_base全局规划: https://github.com/ros-planning/navigation.git
- DWA局部规划:https://github.com/ros-planning/navigation
- TEB规划:https://github.com/rst-tu-dortmund/teb_local_planner.git
- gmapping建图: https://github.com/ros-perception/slam_gmapping.git
- cartographer建图: https://github.com/cartographer-project/cartographer_ros.git
- hector建图:https://github.com/tu-darmstadt-ros-pkg/hector_slam.git
- karto建图:https://code.ros.org/svn/ros-pkg/stacks/slam_karto/trunk
- RtabmapVSLAM: https://github.com/introlab/rtabmap.git
https://github.com/introlab/rtabmap_ros.git
- NCNN: https://github.com/Tencent/ncnn/
所有功能算法均可百度获得链接,使用及源码编译方法也可百度。
7.20.04 人脸识别例程出错
opencv版本命名的改动,导致找不到opencv包,分别执行下列命令设置一个软链接即可
sudo apt install opencv-data
sudo ln -s /usr/share/opencv4/ /usr/share/opencv
8.桌面模式要求输入密码
sudo usermod -a -G bluetooth bingda
sudo usermod -a -G netdev bingda
9.gazebo在虚拟机里很卡
可能是因为硬件加速造成的不兼容或其它问题,可以尝试关闭硬件加速
参考如下(来自网上,不保证有效)
10.有时系统明明启动,但是无法连接nomachine
出现这种情况有多种原因:
- 路由器有防火墙,在路由器里关闭防火墙。实测水星 360 小米三个路由器经常性发生连接异常,尽量避免使用以上三种品牌路由器
- 电路网络必须选择专用模式,不要用公用模式
- 或以远程SSH登录到小车,执行
sudo /usr/NX/bin/nxserver --restart
[sudo] password for bingda:
NX> 162 Service: nxd already disabled.
NX> 162 Service: nxserver already disabled.
NX> 162 Service: nxnode already disabled.
NX> 111 New connections to NoMachine server are enabled.
NX> 161 Enabled service: nxserver.
NX> 161 Enabled service: nxnode.
NX> 161 Enabled service: nxd.
- 如果3有效,则进入后,点上方nomahine show main window
如图,点击setting -》status 勾选 start the server at system startup开机自启动即可
11.如何更新冰达ROS的功能包
到达功能包下,针对新系统
- 移动到功能包下
cd ~/catkin_ws/src/bingda_ros1_noetic
- 恢复功能包状态,会删除已建好的地图及更改的代码,请注意备份
git reset --hard
- 强制更新功能包
git pull
如果系统比较老,没有/bingda_ros1_noetic统一功能包目录,则需进入每个功能包执行上述2-3命令
12.JETSON NANO无法识别无线网卡, 没有WLAN0 WIFI
sudo gedit /boot/extlinux/extlinux.conf
增加pcie_aspm=off保存后重启,如果不能解决修改pcie_aspm=on ,保存后重启
13.修改进代码不能用,怎么快速恢复代码
冰达的ROS包都有使用git ,使用git 进行恢复
cd ~/catkin_ws/src/bingda_xxx 进入功能包
git reset --hard 强行恢复
git pull 拉取最新代码(需联网)
如果仍不能恢复则直接
14.主板和控制器的串口连接 ubuntu串口映射
ubuntu的物理硬件端口是要权限的,并且不同设备命名不一样,所以我们需要做UDEV映射
roscd base_control/script/udev可以进入udev目录
根据不同板卡 sudo ./***.sh即可完成,执行后重启生效
注意:冰达所有镜像均已执行,一般情况如果出现找不到端口,可以直接刷机恢复
15.冰达的编程实战代码地址
B站视频:ROS编程入门ROS机器人中级-ROS编程入门_哔哩哔哩_bilibili
git clone bingda_tutorials: ROS核心教程--初级教程
B站视频:机器人编程实战ROS机器人进阶-机器人编程实战_哔哩哔哩_bilibili
git clone bingda_application: 冰达机器人进阶课程例程参考源码