ROS¶
- PlotJuggler
apt-get install ros-melodic-plotjuggler ros-melodic-plotjuggler-ros
- 待研究
- ros 开机自启动 `robot_upstart
- 解决ROS系统 rosdep update超时问题的新方法
- ros-plugin
- ros-dynamic
wget -qO - https://github.com/my-rds-store/my_space/raw/master/source/ros/shell/rosdep_repair.sh | bash wget -qO - https://raw.fastgit.org/my-rds-store/my_space/master/source/ros/shell/rosdep_repair.sh | bash
#!/usr/bin/env bash # 参考: https://blog.csdn.net/leida_wt/article/details/115120940 GHPROXY='https:\/\/ghproxy.com\/' # 1 if [ -f /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py.bak ]; then echo "PASS to EXIT!!!!!!" exit 0 else sudo cp -rvf /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py \ /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py.bak sudo sed -i "311s/^/ url=\"${GHPROXY}\"+url\n/" \ /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py fi # 2 sudo sed -i "68s/https:\/\//${GHPROXY}/" \ /usr/lib/python2.7/dist-packages/rosdistro/__init__.py # 3 sudo sed -i "36s/https:\/\//${GHPROXY}/" \ /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py # 4 sudo sed -i "72s/https:\/\//${GHPROXY}/" \ /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py # 5 sudo sed -i "39s/https:\/\//${GHPROXY}/" \ /usr/lib/python2.7/dist-packages/rosdep2/rep3.py # 6 sudo sed -i "68s/https:\/\//${GHPROXY}/" \ /usr/lib/python2.7/dist-packages/rosdistro/manifest_provider/github.py sudo sed -i "119s/https:\/\//${GHPROXY}/" \ /usr/lib/python2.7/dist-packages/rosdistro/manifest_provider/github.py # 7 sudo sed -i "204s/^/ gbpdistro_url=\"${GHPROXY}\"+gbpdistro_url\n/" \ /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py
- Awesome Robotic Tooling
- https://freerobotics.tools/#communication-and-coordination
- https://freerobotics.tools/#documentation-and-presentation
- https://freerobotics.tools/#requirements-and-safety
- https://freerobotics.tools/#architecture-and-design
- https://freerobotics.tools/#frameworks-and-stacks
- https://freerobotics.tools/#development-environment
- https://freerobotics.tools/#template
- https://freerobotics.tools/#build-and-deploy
- https://freerobotics.tools/#unit-and-integration-test
- https://freerobotics.tools/#lint-and-format
- https://freerobotics.tools/#debugging-and-tracing
- https://freerobotics.tools/#version-control
- https://freerobotics.tools/#simulation
- https://freerobotics.tools/#electronics-and-mechanics
- https://freerobotics.tools/#sensor-processing
- https://freerobotics.tools/#perception-pipeline
- https://freerobotics.tools/#machine-learning
- https://freerobotics.tools/#parallel-processing
- https://freerobotics.tools/#image-processing
- https://freerobotics.tools/#radar-processing
- https://freerobotics.tools/#lidar-and-point-cloud-processing
- https://freerobotics.tools/#localization-and-state-estimation
- https://freerobotics.tools/#simultaneous-localization-and-mapping
- https://freerobotics.tools/#visual
- https://freerobotics.tools/#vector-map
- https://freerobotics.tools/#prediction
- behavior-and-decision
- planning and control
- steering_functions - Contains a C++ library that implements steering functions for car-like robots with limited turning radius.
- https://freerobotics.tools/#user-interaction
- https://freerobotics.tools/#acoustic-user-interface
- https://freerobotics.tools/#command-line-interface
- https://freerobotics.tools/#data-visualization-and-mission-control
- https://freerobotics.tools/#annotation
- https://freerobotics.tools/#point-cloud
- https://freerobotics.tools/#rviz
- https://freerobotics.tools/#operation-system
- https://freerobotics.tools/#database-and-record
- https://freerobotics.tools/#network-distributed-file-system
- https://freerobotics.tools/#server-infrastructure-and-high-performance-computing
- https://freerobotics.tools/#embedded-operation-system
- https://freerobotics.tools/#real-time-kernel
- https://freerobotics.tools/#network-and-middleware
- https://freerobotics.tools/#ethernet-and-wireless-networking
- https://freerobotics.tools/#controller-area-network
- https://freerobotics.tools/#sensor-and-acuator-interfaces
- https://freerobotics.tools/#security
- https://freerobotics.tools/#datasets
- Webots
- webots-超详细入门教程(2020)
- ROS仿真平台总结
- Webots 机器人仿真平台(一) 系统安装
- Webots 机器人仿真平台(八) 添加GPS传感器 https://rupingcen.blog.csdn.net/article/details/105658021
- Webots 机器人仿真平台(九) 添加IMU传感器 https://blog.csdn.net/crp997576280/article/details/105667450
- Webots 机器人仿真平台(十一) 添加激光传感器(laser) <https://rupingcen.blog.csdn.net/article/details/105761752>
- webots 自动驾驶
URDF¶
example¶
环境搭建¶
# 更换阿里源
sed -i 's/cn.archive.ubuntu.com/mirrors.aliyun.com/' /etc/apt/sources.list
sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/' /etc/apt/sources.list
sed -i 's/ports.ubuntu.com/mirrors.aliyun.com/' /etc/apt/sources.list # arm
# 添加 ROS源
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
sudo apt-get update
#apt-cache search ros-kinetic
sudo apt-get install ros-melodic-desktop-full --yes --allow-unauthenticated
# sudo apt-get install ros-kinetic-slam-gmapping -y # 地图建模
sudo rosdep init
rosdep update
sudo apt-get install python-rosinstall \
python-rosinstall-generator \
python-wstool \
build-essential --yes --allow-unauthenticated
source /opt/ros/kinetic/setup.sh
########################################
# install ros melodic on ubuntu 18.04
########################################
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
rosdep update
sudo apt install ros-melodic-desktop-full
# sudo apt-get install rosbash
# sudo apt-get install ros-melodic-rosbash ros-melodic-rosbash-params # install and reboot , roscd
sudo apt-get install ros-${ROS_DISTRO}-rosbash ros-${ROS_DISTRO}-rosbash-params
apt-cache search ros-melodic
# 小乌龟
source /opt/ros/melodic/setup.sh
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
常用命令¶
roscore
rqt_graph # 查看节点关系
echo $ROS_PACKAGE_PATH
catkin_init_workspace
catkin_create_pkg <package_name> [depend1] [depend2] ... [dependn]
#catkin_create_pkg learning_communication std_msgs rospy roscpp
catkin_make
## 只编译白名单
catkin_make -DCATKIN_WHITELIST_PACKAGES="ros_pyqt;pyqt_gui;rqt_gui"
## 不编译,黑名单列表里面的包
catkin_make -DCATKIN_BLACKLIST_PACKAGES="dyn_cfg_gui;qt_ros_test;ros_cmake;qt4rosgui;test_gui;vizlib_test;rqt_mypkg;ros_cv_gui"
rosrun [package_name] [node_name]
rosnode¶
rosnode list # 获得运行节点列表
rosnode info node-name # 获得特定节点的信息
rosnode ping node-name # 测试节点是否连通
rosnode kill node-name # 终止节点
rospack¶
rospack -h
rosparam¶
rosparam set set parameter 设置参数
rosparam get get parameter 获得参数值
rosparam load load parameters from file 从文件中加载参数到参数服务器
rosparam dump dump parameters to file 将参数服务器中的参数写入到文件
rosparam delete delete parameter 删除参数
rosparam list list parameter names 列出参数服务器中的参数
rostopic¶
rostopic -h
rostopic type /sent_messages
rosmsg info can_msgs/Frame
# src topic => des topic
rosrun topic_tools relay /cv_camera/image_raw /camera/image_raw
rostopic pub /chatter std_msgs/String 'hello' # 发一次
rostopic pub /chatter std_msgs/String -r 1 -- '{data: hello}' # 一秒发一次
rostopic pub /sent_messages can_msgs/Frame -r 1 -- \
'{header: auto,id: 15, is_rtr: 0,is_extended: 0,is_error: 0,dlc: 8,data: [1,2,3,4,5,6,7,9]}'
roslaunch¶
一 node标签
在<node>标签指定一个ROS 节点,这是最常见的roslaunch标签, 因为它支持最重要的功能: 启动和关闭节点。
roslaunch不保证节点开始的顺序。
因为没有办法从外部知道节点何时被完全初始化,所以所有被启动的节点必须是稳健的,以便以任何顺序启动。
二 示例
<node name ="listener1" pkg ="rospy_tutorials" type ="listener.py" args =" - test" respawn ="true"/>
启动"listener1" 节点,使用listener.py从可执行rospy_tutorials 包与所述命令行参数--test。
如果节点死亡,它将自动重新生成。
<node name ="bar1" pkg ="foo_pkg" type ="bar" args ="$(find baz_pkg)/resources/map.pgm"/>
从foo_pkg包中启动bar1节点。此示例使用替换参数将可移植引用传递到 baz_pkg/resources/map.pgm .
三 属性
pkg ="mypackage" 节点包。
type ="nodetype"
节点类型。必须有一个具有相同名称的相应可执行文件。
name ="nodename"
节点基名称。注意:name不能包含命名空间。请改用ns属性。
args ="arg1 arg2 arg3" (可选)
传递参数到节点。
machine =“machine-name” (可选)
在指定机器上启动节点。
respawn ="true" (可选)
如果节点退出,则自动重新启动节点。
respawn_delay ="30" (可选,默认为0)ROS indigo中的新功能
如果respawn为true,请在尝试重新启动之前检测到节点故障后等待respawn_delay秒。
required = "true" (可选)
ROS 0.10:如果节点死亡,杀死整个roslaunch。
ns ="foo" (可选)
在"foo"命名空间中启动节点。
clear_params ="true | false" (可选)
在启动前删除节点的私有命名空间中的所有参数。
output =“log | screen” (可选)
如果'screen',stdout / stderr从节点将被发送到屏幕。
如果是“log”,stdout / stderr输出将被发送到 $ROS_HOME/log中的日志文件,
stderr将继续发送到屏幕。默认值为“log”。
cwd =“ROS_HOME | node” (可选)
如果为“node”,则节点的工作目录将设置为与节点的可执行文件相同的目录。
在C Turtle中,默认值为“ROS_HOME”。在Box Turtle(ROS 1.0.x)中,默认值是'ros-root'。
使用'ros-root'在C Turtle中已被弃用。
launch-prefix ="prefix arguments" (可选)
用于预先添加到节点的启动参数的命令/参数。
这是一个强大的功能,使您能够启用gdb,valgrind,xterm,漂亮或其他方便的工具。
四 元素
您可以在<node>标记中使用以下XML 标签:
<env>
为节点设置环境变量。
<remap>
为此节点设置重新映射参数。
<remap from="/original_name" to="/new_name"/>
<rosparam>
将rosparam文件加载到此节点的〜 / local命名空间中。
<rosparam file="$(find 2dnav_pr2)/config/costmap_common_params.yaml"
command="load" ns="local_costmap" />
<param>
在节点的〜 / local命名空间中设置一个参数。
rosbag¶
rosbag -h
rosbag record -a
rosbag record /topic_name1 /topic_name2 /topic_name3
rosbag record -O/-o filename.bag /topic_name1 # -O (大写) 后跟录制数据包的名字。
# -o(小写)则只是给数据包的名字加前缀。
rosbag record -a -O filename.bag -x "/monitor/(.*)" #记录过滤掉/monitor/*之外的其他topic
# 在运行rosbag record命令的窗口中按Ctrl-C退出该命令,即结束数据记录。
# 现在在~/bagfiles目录中应该会看到一个以日期和时间命名并以.bag作为后缀的 rosbag 文件,
# 它包含rosbag record运行期间发布的 topic。
如果在 launch 文件中使用 rosbag record 命令,如下
<node pkg="rosbag" type="record" name="bag_record" args="/topic1 /topic2"/>
默认存放路径是 ~/.ros 中。
rosbag info filename.bag
- 回放
rosparam set /use_sim_time true # 使用的是仿真时间
# launch文件 设置
# <param name="use_sim_time" value="false" />
rosbag play <bagfile>
rosbag play ros.bag /original_name:=/new_name # rosbag remap topoic name
rosbag play -r 2 <bagfile> # 两倍的速度发布topic。 -r 后面的数字对应播放速率。
rosbag play -l <bagfile> # -l == --loop 循环播放
rosbag play <bagfile> --topics /topic1 # 只播放感兴趣的 topic
rosbag play <bagfile> -d <sec> # 等待一定时间之后发布bag文件中的内容 ; rosbag help play | grep delay
# 在上述播放命令执行期间,空格键可以暂停播放。
- 过滤
rosbag filter IN.bag OUT.bag 'topic == "/turtle1/command_velocity"'
rosbag filter skoda.bag skoda_filter.bag "topic == '/BrakeCmd' or topic == '/SteeringCmd' or topic == '/ThrottleCmd' or topic== '/rosout' or topic=='/rosout_agg'"
- 压缩 compress
# 有时候我们的包太大了,会导致打开很慢。比如25G的KITTI数据包可能需要10分钟打开。
# rosbag提供了两种压缩格式:BZ2和LZ4。
# 其中BZ2占用硬盘小,但播放慢。LZ4虽然对体积的压缩不多,但打开速度提高了数倍。
# 另外,此命令会自动备份要压缩的数据包,命名会加一个origin,所以无需担心。
rosbag compress --lz4 slam_2019-12-14-23-24-43_filter.bag
————————————————
原文链接:https://blog.csdn.net/a850565178/article/details/105820624
rosdep¶
rosdep install AMAZING_PACKAGE
rosdep install --from-paths src --ignore-src -r -y # 用于安装工作空间中所有包的依赖项
- rosdep update一直timeout的问题 !
find /usr/lib/python2.7/dist-packages/rosdep2/ -name "*.py" | xargs grep -n "DOWNLOAD_TIMEOUT\ ="
# 将 DOWNLOAD_TIMEOUT = 15.0 的值,改大一点就可以了
知识点¶
CATKIN_IGNORE¶
touch /path/to/catkin_ws/your/package/CATKIN_IGNORE
ROSINFO¶
export ROSCONSOLE_FORMAT='[${severity}] [${time}]${node}--${function}-${line}: ${message}'
# ${line} for __LINE__
# ${function} for __func__
# ${file} for __FILE__
# ${node} for the node name, no pre-processor equivalent.
package¶
-
# 解压缩 # /cv_camera/image_raw/compressed => /cv_camera/image_decompressed rosrun image_transport republish compressed in:=/cv_camera/image_raw \ out:=/cv_camera/image_decompressed # /simulator/camera_node/image/compressed => /image_raw rosrun image_transport republish compressed in:=/simulator/camera_node/image \ out:=/cv_camera/image_decompressed
<launch> <node name="image_decompresser" type="republish" pkg="image_transport" output="screen" args="compressed in:=/simulator/camera_node/image raw out:=/image_raw"> </node> </launch>
- rocon_rtsp_camera_relay
-
mkdir -p work_dir/src cd work_dir/src git clone --depth 1 https://github.com/robotics-in-concert/rocon_devices.git cd ../ catkin_make source devel/setup.zsh # export ROCON_RTSP_CAMERA_RELAY_URL=rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov # public rtsp test url export ROCON_RTSP_CAMERA_RELAY_URL=rtsp://192.168.2.100:5540/ch0 roslaunch rocon_rtsp_camera_relay rtsp_camera_relay.launch --screen rosrun rqt_image_view rqt_image_view /rtsp_camera_relay/image
tar xzvf flycapture2-2.13.3.31-amd64-pkg_Ubuntu18.04.tgz
cd flycapture2-2.13.3.31-amd64
# README
# Ubuntu 18.04:
sudo apt-get install libraw1394-11 libavcodec57 libavformat57 \
libswscale4 libswresample2 libavutil55 libgtkmm-2.4-1v5 \
libglademm-2.4-1v5 libgtkglextmm-x11-1.2-0v5 libgtkmm-2.4-dev \
libglademm-2.4-dev libgtkglextmm-x11-1.2-dev libusb-1.0-0
sudo bash install_flycapture.sh
y
y
${USER}
y
To do this just add "raw1394" to the /etc/modules file.
# vim /etc/modules-load.d/modules.conf
#
git clone --depth 1 https://github.com/ros-drivers/pointgrey_camera_driver.git
source devel/setup.zsh
roslaunch pointgrey_camera_driver camera.launch
rostopic list
rviz¶
# imu
sudo apt-get install ros-melodic-imu-tools
tf变换¶
rosrun tf tf_monitor <source_frame> <target_target>
rosrun tf tf_echo <source_frame> <target_target>
rosrun tf view_frames
# << ROS机器人开发实践 >> Page 64
rosrun tf static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms
rosrun tf static_transform_publisher x y z qx qy qz qw frame_id child_frame_id period_in_ms
<!-- << ROS机器人开发实践 >> Page 64 -->
<launch>
<node pkg="tf" type="static_transform_publisher" name="world_to_map" args="0 0 0 0 0 0 /world /map 10" />
<node pkg="tf" type="static_transform_publisher" name="map_to_mobility" args="0 0 0 0 0 0 /map /mobility 10" />
</launch>
- tf namespace
- tf::TransformListener Class Reference
cpp python type transformQuaternion() transformQuaternion() geometry_msgs/QuaternionStamped transformVector() transformVector3() geometry_msgs/Vector3Stamped transformPoint() transformPoint() geometry_msgs/PointStamped transformPose() transformPose() geometry_msgs/PoseStamped transformPointCloud() transformPointCloud() sensor_msgs/PointCloud static geometry_msgs::Quaternion createQuaternionMsgFromRollPitchYaw (double roll, double pitch, double yaw) void tf::Quaternion::setRPY(const tfScalar & roll, const tfScalar & pitch, const tfScalar & yaw) // 将 tf::Quaternion 转换成 geometry_msgs::Quaternion static void quaternionTFToMsg ( const Quaternion &bt, geometry_msgs::Quaternion &msg)
ROS 分布式¶
sudo apt-get install chrony # 时间同步
export ROS_MASTER_URI=http://${MasterHostName}:11311
export ROS_HOSTNAME=192.168.1.102
export ROS_IP=192.168.1.102
export ROS_MASTER_URI=http://192.168.1.102:11311
#
export ROS_MASTER_URI=http://192.168.1.102:11311
创建Deb安装包¶
sudo apt-get install python-bloom=0.10.2-100
# or sudo pip install -U bloom
#sudo apt-get install dpkg-dev debhelper
sudo apt-get install fakeroot=1.22-2ubuntu1
# 1. Create debian structure
# To make a debian folder structure from the ROS package
# you must cd into the package to be in the same folder where package.xml file is.
bloom-generate rosdebian --os-name ubuntu --os-version bionic --ros-distro melodic
# bloom-generate rosdebian --ros-distro melodic
# 2. Create binary debian
fakeroot debian/rules binary
-
- 创建文件 rosdep.yaml
pm_gnss_msgs: ubuntu: ros-melodic-pm-gnss-msgs
- 在 /etc/ros/rosdep/sources.list.d/50-my-packages.list 编辑
yaml file:///mnt/waypoint_follower/waypoint_follower_1.0/src/pure_pursuit_ext/rosdep.yaml
- 然后
rosdep update # 更新本地 rosdep db | grep pm_gnss_msgs # 查看
sensor¶
velodyne¶
Motor RPM: 转速,范围(0-1200), 默认 600
Host(Destination)
- IP Address : 广播地址 255.255.255.255
: 单播地址 接收端(UDP Server)设备 IP , eg: 10.158.51.29
接收端设备IP,必须和此IP一致。
- Data Port : 网络端口 , default 2368
roslaunch velodyne_pointcloud VLP16_points.launch port:=2368
roslaunch velodyne_pointcloud VLP16_points.launch port:=2371
# topic
# - /velodyne_points
LIO-SAM¶
docker pull daocloud.io/jiangxumin/lio_sam_utils:latest
docker run --rm --name=lio_sam_utils -it -v $(pwd):/root/host_dir daocloud.io/jiangxumin/lio_sam_utils:latest
CAN BUS¶
Peak-CAN¶
# 1. install depends
sudo apt-get install linux-headers-`uname -r` \
libpopt-dev g++
# 2. build
tar -xzf peak-linux-driver-X.Y.Z.tar.gz
cd peak-linux-driver-X.Y.Z
make -j $(nproc)
make -C driver netdev
make -C lib
make -C test
make -C libpcanbasic
# 3. install
sudo make -C driver install
sudo make -C lib install
sudo make -C test install
sudo make -C libpcanbasic install
ip l | grep can
# 4.0 load peak_usb
sudo modprobe peak_usb # 卸载 sudo modprobe -r peak_usb
# 4.1 reboot
sudo shutdown -r now
# 5. set can0 up
sudo ip link set can0 up type can bitrate 500000
ip -details -statistics link show can0
# 6. test send
sudo apt-get install can-utils
cansend can0 123#0102030405060708
cangen -v can0 # 随机生成can消息
candump can0
### SecureBoot如果是 enable 状态, 需要进入 BOIS , 将 secure boot 关闭
### linux secure boot 状态查询:
mokutil --sb-state
pcanview¶
wget -q http://www.peak-system.com/debian/dists/`lsb_release -cs`/peak-system.list -O- | sudo tee /etc/apt/sources.list.d/peak-system.list
wget -q http://www.peak-system.com/debian/peak-system-public-key.asc -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install pcanview-ncurses
- jetson Tx2 install python-can
tar xzvf python-can-3.2.0.tar.gz
cd python-can-3.2.0/
ls
python3 setup.py build
python3 setup.py install --user
auto can0
iface can0 inet manual
#pre-up ip link set $IFACE type can bitrate 125000 listen-only off
pre-up /sbin/ip link set $IFACE type can bitrate 500000 triple-sampling on
up /sbin/ifconfig $IFACE up
down /sbin/ifconfig $IFACE down
auto vcan0
iface vcan0 can static
bitrate 0 # NEEDED but not supported
pre-up /sbin/ip link add dev $IFACE type vcan
up /sbin/ip link set $IFACE up
down /sbin/ip link set $IFACE down
#######################
## create vcan
#######################
sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set vcan0 up
sudo ip link add dev vcan1 type vcan
sudo ip link set vcan1 up
ip l
## connect vcan0 vcan1
sudo modprobe can-gw
sudo cangw -A -s vcan0 -d vcan1 -e
sudo cangw -A -s vcan1 -d vcan0 -e
rosrun socketcan_bridge socketcan_bridge_node _can_device:=vcan0
rostopic pub /sent_messages can_msgs/Frame -r 1 -- \
'{header: auto,id: 15, is_rtr: 0,is_extended: 0,is_error: 0,dlc: 8,data: [1,2,3,4,5,6,7,9]}'
rosrun socketcan_bridge socketcan_to_topic_node _can_device:=vcan0
rosrun socketcan_bridge topic_to_socketcan_node _can_device:=vcan0
$ sudo apt-get install ros-${ROS_DISTRO}-socketcan-interface \
ros-${ROS_DISTRO}-ros-canopen
$ rosrun socketcan_interface socketcan_dump can0 # dump
$ rosrun socketcan_interface socketcan_bcm can0 0.5 12#12345678 # id=12 周期0.5s
ZLG PCIe¶
- ZLG PCIe-91XX系列LINUX驱动
#下载 PCIe-91XX系列LINUX驱动
wget https://www.zlg.cn/data/upload/software/Can/zpcican_socket.rar
# md5sum zpcican_socket.rar
# 6b3f6ee0f0aa8f84f2e2f6304f845fb4 zpcican_socket.rar
apt-get install unrar
unrar x zpcican_socket.rar
cd zpcican_socket/zpcican_socket_2018_11_07/
sed -i "s/4.4.0-31-generic/$(uname -r)/" Makefile
make
# sudo modprobe sja1000
# sudo insmod zpcican.ko
sudo mkdir /lib/modules/$(uname -r)/kernel/drivers/net/can/zlg
sudo cp zpcican.ko /lib/modules/$(uname -r)/kernel/drivers/net/can/zlg/
sudo depmod
sudo modprobe zpcican
sudo tee -a /etc/modules-load.d/modules.conf <<-'EOF'
zpcican
EOF
advSocketCAN¶
- 研华can卡驱动 - SocketCAN Driver for PCM-26D2CA
sudo apt-get install -y flex bison
sudo tee /etc/modules-load.d/modules.conf <<-'EOF'
lp
can
can_dev
can_raw
advsocketcan
advcan_sja1000
EOF
sed -i "s/SUBDIRS/M/g" advSocketCAN_V1.0.1.0/driver/Makefile
20c20
< $(MAKE) -w -C $(KDIR) SUBDIRS=$(PWD) modules
---
> $(MAKE) -w -C $(KDIR) M=$(PWD) modules
make
sudo make install
- 系统内核
# 安装 18.04.4 lts : http://old-releases.ubuntu.com/releases/18.04.4/
# 安装 18.04.5 lts
# http://releases.ubuntu.com/releases/bionic/ubuntu-18.04.5-desktop-amd64.iso.torrent
# 4.15.0-20-generic
# KERNAL_VERSION=5.0.0-23-generic # Ubuntu 18.04.4
# KERNAL_VERSION=5.3.0-59-generic # Ubuntu 18.04.4
KERNAL_VERSION=$(uname -r)
KERNAL_VERSION=5.4.0-42-generic # Ubuntu 18.04.5
sudo apt-get install linux-image-${KERNAL_VERSION} \
linux-headers-${KERNAL_VERSION} \
linux-modules-extra-${KERNAL_VERSION} # depends can-dev.ko
sudo apt-mark hold linux-image-${KERNAL_VERSION} # 禁用系统升级
sudo apt-get install vim make gcc openssh-server
sudo shutdown -r now # 重启
## modinfo ./advcan_sja1000.ko | grep depend
sudo apt-get install linux-modules-extra-$(uname -r) # depends can-dev.ko
# 安装内核
sudo apt-get install linux-headers-$(uname -r) linux-image-$(uname -r)
uname -r # 查看当前内核版本
dpkg --get-selections | grep linux-image # 查看已安装内核镜像
sudo apt-mark hold linux-image-5.0.0-23-generic # 禁止内核更新
sudo apt-mark unhold linux-image-5.0.0-23-generic #解除禁用
# 或者 修改配置
#
# 修改系统配置,在/etc/apt/apt.conf.d目录下
# 10periodic、20auto-upgrades配置中1改为0即可
- 如果内核已经自动升级,更改默认启动内核
- tab + shift 开机进入 grub 引导界面
# /etc/default/grub
# sudo update-grub
grub_timeout_style=menu # 这里可以选择menu或者是hidden
GRUB_DEFAULT="Ubuntu 高级选项>Ubuntu,Linux 5.4.0-42-generic"
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu,Linux 5.4.0-42-generic"
GRUB_DEFAULT="1> 3"
can-dbc-parser¶
- Source : https://github.com/NewEagleRaptor/raptor-dbw-ros
- code API
- Install : sudo apt-get install ros-${ROS_DISTRO}-can-dbc-parser
- example
- defined but not used [-Wunused-function] 警告
sudo apt-get install -y socat
socat -d -d pty,raw,echo=0 pty,raw,echo=0
sudo socat -d -d pty,raw,echo=0,link=/dev/ttyS0 pty,raw,echo=0,link=/dev/ttyS1
sudo apt-get install ros-melodic-uvc-camera
sudo apt-get install "ros-melodic-image-*"
sudo apt-get install ros-melodic-rqt-image-view
rosrun uvc_camera uvc_camera_node
rosrun image_view image_view image:=/image_raw
EMQ- MQTT¶
- 在容器中搭建运行EMQ服务器(MQTT服务器)
- 各个服务端口说明:
- 1883:MQTT 协议端口
- 8883:MQTT/SSL 端口
- 8083:MQTT/WebSocket 端口
- 8080:HTTP API 端口
- 18083:Dashboard 管理控制台端口
- 访问地址:http://服务器IP:18083
- 默认用户名:admin
- 默认密码:public
docker run --name emq \
-p 18083:18083 \
-p 1883:1883 \
-p 8084:8084 \
-p 8883:8883 \
-p 8083:8083 \
-d emqx/emqx
TEST
# pub.py
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with result code: " + str(rc))
def on_message(client, userdata, msg):
print(msg.topic + " " + str(msg.payload))
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect('127.0.0.1', 1883, 600) # 600为keepalive的时间间隔
client.publish('fifa', payload='amazing', qos=0)
# sub.py
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with result code: " + str(rc))
def on_message(client, userdata, msg):
print(msg.topic + " " + str(msg.payload))
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect('127.0.0.1', 1883, 600) # 600为keepalive的时间间隔
client.subscribe('fifa', qos=0)
client.loop_forever() # 保持连接
# sub.py
import paho.mqtt.client as mqtt
import time
#HOST = "127.0.0.1"
HOST = "192.168.2.102"
PORT = 1883
def client_loop():
client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
client = mqtt.Client(client_id) # ClientId不能重复,所以使用当前时间
client.username_pw_set("jxm", "public") # 必须设置,否则会返回「Connected with result code 4」
client.on_connect = on_connect
client.on_message = on_message
client.connect(HOST, PORT, 60)
client.loop_forever()
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("test")
def on_message(client, userdata, msg):
print(msg.topic+" "+msg.payload.decode("utf-8"))
if __name__ == '__main__':
client_loop()
# pub.py
# import paho.mqtt.client as mqtt
import paho.mqtt.publish as publish
import time
HOST = "127.0.0.1"
PORT = 1883
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("test")
def on_message(client, userdata, msg):
print(msg.topic+" "+msg.payload.decode("utf-8"))
if __name__ == '__main__':
client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
# client = mqtt.Client(client_id) # ClientId不能重复,所以使用当前时间
# client.username_pw_set("admin", "123456") # 必须设置,否则会返回「Connected with result code 4」
# client.on_connect = on_connect
# client.on_message = on_message
# client.connect(HOST, PORT, 60)
# client.publish("test", "你好 MQTT", qos=0, retain=False) # 发布消息
publish.single("test", "你好 MQTT", qos = 1,hostname=HOST,port=PORT,
client_id=client_id,auth = {'username':"jxm",
'password':"public"})
- C/C++
# C
man libmosquitto
vscode¶
- 在 VSCode 中, c_cpp_properties.json 的"包含路径"如下所示.
"includePath": [
"/home/shisato/catkin_ws/devel/include/**",
"/opt/ros/melodic/include/**",
"/home/shisato/catkin_ws/src/package_name/include/**",
"/usr/include/**"
]
ctrl+shift+B