<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Haofei Ma · Blog</title><description>Robotics researcher at PolyU. MR-assisted haptic teleoperation, force–tactile skill learning, and egocentric robot learning from humans.</description><link>https://mahaofei.com/en/blog/</link><language>en</language><item><title>Multi-Machine ROS Topic Communication</title><link>https://mahaofei.com/en/blog/ros-multi-machine-communication/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-multi-machine-communication/</guid><description>Two Ubuntu systems (such as a desktop PC and a robot), connected via Ethernet cable, sharing ROS nodes.</description><pubDate>Tue, 18 Nov 2025 16:00:00 GMT</pubDate></item><item><title>Cloudflare R2 Personal Image Hosting</title><link>https://mahaofei.com/en/blog/cloudflare-r2/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/cloudflare-r2/</guid><description>I previously used Alibaba Cloud OSS for personal image hosting, but as the number of posts and images grew and site traffic increased, image-hosting bandwidth also rose and costs kept climbing. So I looked for another platform and found that Cloudflare R2 can provide 10 GB of storage and 10 million free read requests per month.</description><pubDate>Tue, 13 May 2025 16:00:00 GMT</pubDate></item><item><title>Getting Started with Apple Vision Pro Development</title><link>https://mahaofei.com/en/blog/ecc7e7f2/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ecc7e7f2/</guid><description>This article documents the complete process for setting up an Apple Vision Pro development environment, covering physical-device debugging with Xcode, Unity + PolySpatial configuration, Play to Device streaming, app packaging, and basic concepts such as visionOS space types and Volume Camera.</description><pubDate>Tue, 11 Mar 2025 16:00:00 GMT</pubDate></item><item><title>Isaac Sim Robotic Arm Inverse Kinematics Control</title><link>https://mahaofei.com/en/blog/isaacsim-ik/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/isaacsim-ik/</guid><description>Methods for implementing Cartesian-space control (inverse kinematics) in Isaac Sim.</description><pubDate>Thu, 06 Mar 2025 16:00:00 GMT</pubDate></item><item><title>Visualizing URDF Models with ROS2 and Rviz2</title><link>https://mahaofei.com/en/blog/ros2-urdf/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros2-urdf/</guid><description>Visualize URDF files with ROS2 and Rviz2, with an example package and a complete modification tutorial.</description><pubDate>Thu, 27 Feb 2025 16:00:00 GMT</pubDate></item><item><title>Summary of Basic ROS 2 Commands</title><link>https://mahaofei.com/en/blog/ros2-command/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros2-command/</guid><description>I recently installed version 22.04 of Ubuntu and ROS 2 Humble on a new computer. To keep up with the times, I learned the new ROS 2 commands and summarized them here for easy reference.</description><pubDate>Mon, 23 Dec 2024 16:00:00 GMT</pubDate></item><item><title>Create a More Efficient Shell Environment with Zsh</title><link>https://mahaofei.com/en/blog/zsh/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/zsh/</guid><description>Zsh is fully compatible with Bash, supports intelligent command completion, offers a wide range of UI themes and plugins, and greatly improves both efficiency and aesthetics.</description><pubDate>Fri, 29 Nov 2024 16:00:00 GMT</pubDate></item><item><title>Introduction to Using the Isaac Sim Simulation Environment</title><link>https://mahaofei.com/en/blog/isaacsim-intro/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/isaacsim-intro/</guid><description>An introduction to the NVIDIA Isaac Sim simulation environment, covering installation, the GUI, and basic usage of Python programs.</description><pubDate>Wed, 27 Nov 2024 16:00:00 GMT</pubDate></item><item><title>Setting Up Scheduled Tasks on Ubuntu</title><link>https://mahaofei.com/en/blog/cron/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/cron/</guid><description>Certain needs, such as restarting a task at scheduled times, publishing blog updates on a schedule, or regularly backing up files, require certain tasks to be run on a schedule.</description><pubDate>Fri, 08 Nov 2024 16:00:00 GMT</pubDate></item><item><title>Assigning a Fixed USB Device Port Name in Ubuntu (ttyUSB0-&gt;Custom Name)</title><link>https://mahaofei.com/en/blog/usb_distinguish/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/usb_distinguish/</guid><description>Assign stable, custom device names (such as /dev/gripper) to USB-to-serial devices on Ubuntu</description><pubDate>Wed, 21 Aug 2024 16:00:00 GMT</pubDate></item><item><title>Backing Up and Synchronizing Code Across Devices with Git and GitHub</title><link>https://mahaofei.com/en/blog/ea8ce298/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ea8ce298/</guid><description>The project involves synchronizing code across multiple devices, with the same code on a laptop, desktop, and industrial PC, and the code needs to be debugged on all of these platforms. Furthermore, when debugging code on experimental equipment, many uncontrollable factors may cause code loss. Therefore, a platform-based solution for synchronizing and preserving code is needed to prevent such loss.</description><pubDate>Thu, 25 Jul 2024 16:00:00 GMT</pubDate></item><item><title>[Equipment Guide] Controlling the FAIRINO FR5 Robotic Arm with Python</title><link>https://mahaofei.com/en/blog/fr5-ag95/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/fr5-ag95/</guid><description>The FR5 is a 6-DoF robotic arm with a configuration similar to the UR5. This article introduces basic motion control with its Python SDK.</description><pubDate>Tue, 09 Apr 2024 16:00:00 GMT</pubDate></item><item><title>Recognizing Text and Numbers in Images with Python and EasyOCR</title><link>https://mahaofei.com/en/blog/easyocr/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/easyocr/</guid><description>A project needed a small feature for recognizing text and numbers in images, so I found EasyOCR, a useful open-source library. This article explains how to use it.</description><pubDate>Mon, 08 Apr 2024 16:00:00 GMT</pubDate></item><item><title>[Equipment Guide] omega.7 Master Device Setup and Usage</title><link>https://mahaofei.com/en/blog/omega7/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/omega7/</guid><description>Configuration and basic program usage for the Omega.7 virtual haptic force-feedback master device</description><pubDate>Tue, 19 Mar 2024 16:00:00 GMT</pubDate></item><item><title>[Paper Notes] ACT: Imitation Learning for Bimanual Manipulation with Low-Cost Hardware</title><link>https://mahaofei.com/en/blog/act/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/act/</guid><description>A Stanford University bimanual imitation learning system with a full hardware and software stack that enables fine manipulation on low-cost, imprecise hardware.</description><pubDate>Thu, 04 Jan 2024 16:00:00 GMT</pubDate></item><item><title>HDF5 Data File Format</title><link>https://mahaofei.com/en/blog/hdf5/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/hdf5/</guid><description>A brief introduction to the HDF5 data file format and its basic usage.</description><pubDate>Sun, 31 Dec 2023 16:00:00 GMT</pubDate></item><item><title>[Simulation Experiment] Reproducing the robomimic Project</title><link>https://mahaofei.com/en/blog/robomimic/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robomimic/</guid><description>robomimic is a framework for robot learning from demonstrations. The project provides a range of demonstration data for robot manipulation and offline learning algorithms, enabling standardized testing of tasks and algorithms.</description><pubDate>Tue, 26 Dec 2023 16:00:00 GMT</pubDate></item><item><title>[Course Notes] Stanford CS25 V2 - Robotics and Imitation Learning</title><link>https://mahaofei.com/en/blog/standford-cs25/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/standford-cs25/</guid><description>A lecture from Stanford CS25 V2 on robot learning, presented by a Google Brain engineer.</description><pubDate>Sat, 23 Dec 2023 16:00:00 GMT</pubDate></item><item><title>Sharing One Keyboard and Mouse Between Ubuntu and Window Dual Hosts</title><link>https://mahaofei.com/en/blog/doublecomputer-onekeyboard/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/doublecomputer-onekeyboard/</guid><description>Deskflow is free software that lets you control multiple computers with a single keyboard and mouse.</description><pubDate>Wed, 13 Dec 2023 16:00:00 GMT</pubDate></item><item><title>Pairing the Same Bluetooth Device with Windows and Ubuntu in a Dual-Boot Setup (Without Re-pairing)</title><link>https://mahaofei.com/en/blog/doublesystem-onebluetooth/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/doublesystem-onebluetooth/</guid><description>I have Ubuntu and Windows installed in a dual-boot setup and usually use a Bluetooth mouse and headphones. However, I have to re-pair the devices every time I switch operating systems, so I wanted to make pairing work across both systems.</description><pubDate>Tue, 12 Dec 2023 16:00:00 GMT</pubDate></item><item><title>[Experiment Prep] Importing a Custom Robot into MuJoCo</title><link>https://mahaofei.com/en/blog/mujoco/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/mujoco/</guid><description>Import a custom robot model into MuJoCo to lay the groundwork for building simulation environments for future reinforcement learning.</description><pubDate>Sun, 03 Dec 2023 16:00:00 GMT</pubDate></item><item><title>[Note-Taking Tools] Markdown Syntax and the Obsidian Editor</title><link>https://mahaofei.com/en/blog/obsidian/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/obsidian/</guid><description>An introduction to Markdown, the powerful note-taking syntax I have long used, and Obsidian, an editor based on Markdown syntax.</description><pubDate>Tue, 28 Nov 2023 16:00:00 GMT</pubDate></item><item><title>[Paper Notes] Residual Skill Policies: Learning an Adaptable Skill-based Action Space for Reinforcement Learning for Robotics</title><link>https://mahaofei.com/en/blog/reskill/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/reskill/</guid><description>A skill-unit-based reinforcement learning method that decomposes tasks into skills, establishes mappings between skills and states, and learns a skill-selection policy</description><pubDate>Fri, 24 Nov 2023 16:00:00 GMT</pubDate></item><item><title>[Paper Notes] DEX: Demonstration-Guided Reinforcement Learning with Efficient Exploration for Task Automation of Surgical Robot</title><link>https://mahaofei.com/en/blog/dex/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/dex/</guid><description>A surgical robot reinforcement learning method based on an improved DDPG+BC approach, developed by Yun-Hui Liu&apos;s team at The Chinese University of Hong Kong</description><pubDate>Mon, 20 Nov 2023 16:00:00 GMT</pubDate></item><item><title>Reinforcement Learning and Imitation Learning Bug List (Updated Occasionally)</title><link>https://mahaofei.com/en/blog/rl-buglist/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/rl-buglist/</guid><description>A record of bugs that may occur while setting up reinforcement learning environments and running projects, along with their solutions</description><pubDate>Mon, 13 Nov 2023 16:00:00 GMT</pubDate></item><item><title>[Paper Notes] Robot Motion Imitation with Reinforcement Learning</title><link>https://mahaofei.com/en/blog/lfd-rl-papers/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/lfd-rl-papers/</guid><description>Survey and notes on reinforcement learning-based robot motion imitation methods.</description><pubDate>Wed, 08 Nov 2023 16:00:00 GMT</pubDate></item><item><title>[Paper Reproduction] MimicPlay: Learning Robot Skills from Human Demonstrations</title><link>https://mahaofei.com/en/blog/mimicplay/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/mimicplay/</guid><description>A long-horizon imitation learning method from Fei-Fei Li&apos;s team at Stanford University that learns by watching human actions.</description><pubDate>Fri, 20 Oct 2023 16:00:00 GMT</pubDate></item><item><title>Installing and Using the PCL Library</title><link>https://mahaofei.com/en/blog/pcl/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/pcl/</guid><description>The most widely used point cloud library in C++</description><pubDate>Thu, 19 Oct 2023 16:00:00 GMT</pubDate></item><item><title>Quickly Implementing Three-Dimensional Reconstruction with NeRF (instant-ngp)</title><link>https://mahaofei.com/en/blog/nerf/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/nerf/</guid><description>Instant-NGP, short for Instant Neural Graphics Primitives, uses multiresolution hash encoding to solve the efficiency problem encountered when parameterizing NeRF with a fully connected neural network. It greatly accelerates network training, reducing three-dimensional reconstruction time from several hours to several seconds.</description><pubDate>Mon, 09 Oct 2023 16:00:00 GMT</pubDate></item><item><title>【Motion Imitation】Robot Motion Planning Methods Learned from Human Demonstrations</title><link>https://mahaofei.com/en/blog/lfd-motion-papers/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/lfd-motion-papers/</guid><description>A survey of research on methods for robot motion generation and planning learned from videos of humans grasping objects.</description><pubDate>Wed, 06 Sep 2023 16:00:00 GMT</pubDate></item><item><title>【Grasping by Imitation】Learning Robotic Grasping from Human Demonstrations</title><link>https://mahaofei.com/en/blog/lfd-grasp-papers/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/lfd-grasp-papers/</guid><description>A survey of research on robotic grasping learned from videos of humans grasping objects.</description><pubDate>Sat, 12 Aug 2023 16:00:00 GMT</pubDate></item><item><title>[Reinforcement Learning Algorithm] Proximal Policy Optimization (PPO)</title><link>https://mahaofei.com/en/blog/ppo/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ppo/</guid><description>An introduction to a fundamental reinforcement learning algorithm, Proximal Policy Optimization (PPO)</description><pubDate>Sun, 23 Jul 2023 16:00:00 GMT</pubDate></item><item><title>Ubuntu Screenshot and Screen Recording Tools</title><link>https://mahaofei.com/en/blog/ubuntu-screen-record/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ubuntu-screen-record/</guid><description>By default, Ubuntu can only take screenshots but cannot take screenshots, and the experience is very poor, so this article introduces two screenshot and screen recording tools I commonly use.</description><pubDate>Thu, 25 May 2023 16:00:00 GMT</pubDate></item><item><title>ROS Gazebo 6D Robotic Arm Grasping Simulation Experiment</title><link>https://mahaofei.com/en/blog/gazebo-grasp/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/gazebo-grasp/</guid><description>Build a 6D robotic arm simulation environment in Gazebo, add a camera, and implement a grasping simulation experiment.</description><pubDate>Sun, 14 May 2023 16:00:00 GMT</pubDate></item><item><title>ROS System Buglist (Updated Irregularly)</title><link>https://mahaofei.com/en/blog/ros-buglist/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-buglist/</guid><description>A collection of various error messages encountered while using the ROS system for robot experiments, updated irregularly.</description><pubDate>Sun, 14 May 2023 16:00:00 GMT</pubDate></item><item><title>[Object Detection Algorithm] Reproducing YOLOv8</title><link>https://mahaofei.com/en/blog/yolov8/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/yolov8/</guid><description>Using the classic YOLO algorithm for instance segmentation</description><pubDate>Fri, 05 May 2023 16:00:00 GMT</pubDate></item><item><title>[Grasp Pose Estimation Algorithm] RGB Matters Paper Notes and Reproduction</title><link>https://mahaofei.com/en/blog/rgb-matters/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/rgb-matters/</guid><description>Reproducing the RGB Matters algorithm proposed by Shanghai Jiao Tong University.</description><pubDate>Wed, 03 May 2023 16:00:00 GMT</pubDate></item><item><title>Survey of Grasp Pose Estimation Algorithms</title><link>https://mahaofei.com/en/blog/6dgrasp-papers/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/6dgrasp-papers/</guid><description>A survey of grasp pose estimation papers from top conferences and journals over the past three years</description><pubDate>Sat, 22 Apr 2023 16:00:00 GMT</pubDate></item><item><title>Viewing System Resource Usage in Ubuntu</title><link>https://mahaofei.com/en/blog/ubuntu-resource/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ubuntu-resource/</guid><description>When running certain algorithms, you may sometimes need to check system resource usage to see whether the algorithm needs optimization or whether multithreading can be enabled. This requires checking the available system resources.</description><pubDate>Sat, 15 Apr 2023 16:00:00 GMT</pubDate></item><item><title>[Grasping Algorithm] Contact GraspNet</title><link>https://mahaofei.com/en/blog/contact-graspnet/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/contact-graspnet/</guid><description>Reproducing Contact GraspNet, a grasp estimation algorithm proposed by NVIDIA</description><pubDate>Thu, 06 Apr 2023 16:00:00 GMT</pubDate></item><item><title>[6D Pose Estimation] Gen6D Algorithm</title><link>https://mahaofei.com/en/blog/gen6d/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/gen6d/</guid><description>Algorithm reproduction</description><pubDate>Tue, 28 Mar 2023 16:00:00 GMT</pubDate></item><item><title>GDRNPP: A 6D Pose Estimation Algorithm</title><link>https://mahaofei.com/en/blog/gdrnpp/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/gdrnpp/</guid><pubDate>Sun, 26 Mar 2023 16:00:00 GMT</pubDate></item><item><title>Using TensorBoard | Generating Deep Learning Curves</title><link>https://mahaofei.com/en/blog/tensorboard/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/tensorboard/</guid><description>During deep learning training, we inevitably need to observe changes in metrics such as Loss and Learning_rate, so plotting curves in real time is essential. This article explains how to use PyTorch&apos;s TensorBoard to plot curves.</description><pubDate>Wed, 22 Mar 2023 16:00:00 GMT</pubDate></item><item><title>[Paper Notes] 6D Pose Estimation Papers from ECCV2020–2022</title><link>https://mahaofei.com/en/blog/eccv2020-2022/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/eccv2020-2022/</guid><description>Notes from searching for and reading ECCV papers related to 6D pose estimation from the past three years</description><pubDate>Mon, 20 Mar 2023 16:00:00 GMT</pubDate></item><item><title>[Paper Notes] Papers on 6D Pose Estimation at CVPR2020-2022</title><link>https://mahaofei.com/en/blog/cvpr2020-2022/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/cvpr2020-2022/</guid><description>A review of and notes on CVPR papers related to 6D pose estimation from the past three years</description><pubDate>Tue, 14 Mar 2023 16:00:00 GMT</pubDate></item><item><title>[Paper Notes] Papers Citing DenseFusion | No Code</title><link>https://mahaofei.com/en/blog/densefusion-related/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/densefusion-related/</guid><description>I searched for papers citing DenseFusion, but so many of them had no open-source code that after reading two, I switched to focusing only on papers from top-tier conferences.</description><pubDate>Mon, 13 Mar 2023 16:00:00 GMT</pubDate></item><item><title>Share an Ubuntu Folder with Windows via Samba</title><link>https://mahaofei.com/en/blog/ubuntu-windows-fileshare/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ubuntu-windows-fileshare/</guid><description>Explains how to set up a shared folder between Ubuntu and Windows for convenient file transfers.</description><pubDate>Fri, 10 Mar 2023 16:00:00 GMT</pubDate></item><item><title>Share a Windows Folder with Ubuntu or Other Devices</title><link>https://mahaofei.com/en/blog/windows-ubuntu-fileshare/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/windows-ubuntu-fileshare/</guid><description>Share a folder on a Windows computer over a local network so that other systems on the network can access it directly</description><pubDate>Fri, 10 Mar 2023 16:00:00 GMT</pubDate></item><item><title>Using OneDrive on Ubuntu</title><link>https://mahaofei.com/en/blog/ubuntu-onedrive/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ubuntu-onedrive/</guid><description>I previously used Nutstore for multi-device sync, but Nutstore only provides 1G of traffic per month, which is not enough. So I switched to OneDrive. This post records the OneDrive setup process on Ubuntu.</description><pubDate>Thu, 09 Mar 2023 16:00:00 GMT</pubDate></item><item><title>[Statistical Learning Methods Notes 04] Naive Bayes</title><link>https://mahaofei.com/en/blog/statistic-note4/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/statistic-note4/</guid><description>Study notes on Statistical Learning Methods</description><pubDate>Fri, 03 Mar 2023 16:00:00 GMT</pubDate></item><item><title>Common Keyboard Shortcuts for the Terminator Terminal Emulator</title><link>https://mahaofei.com/en/blog/terminator/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/terminator/</guid><description>A handy terminal emulator.</description><pubDate>Fri, 03 Mar 2023 16:00:00 GMT</pubDate></item><item><title>Docker Installation and Common Commands</title><link>https://mahaofei.com/en/blog/docker-install/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/docker-install/</guid><description>Environment setup can be tedious, and many programs&apos; dependency environments can conflict with the local environment. Docker is a good way to avoid these issues.</description><pubDate>Thu, 02 Mar 2023 16:00:00 GMT</pubDate></item><item><title>Installing Multiple OpenCV Versions Side by Side</title><link>https://mahaofei.com/en/blog/opencv-multiversion/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-multiversion/</guid><description>Because some projects were developed some time ago, their programs use opencv2, while most people now have opencv4 installed. Since these projects contain a lot of code, modifying the source code would be too cumbersome, therefore considering installing multiple opencv versions side by side.</description><pubDate>Thu, 02 Mar 2023 16:00:00 GMT</pubDate></item><item><title>[Statistical Learning Methods Notes 03] k-Nearest Neighbors Method</title><link>https://mahaofei.com/en/blog/statistic-note3/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/statistic-note3/</guid><description>The nearest neighbors algorithm assumes a training dataset is given in which the class of each instance is known. For classification, a new instance is predicted from the classes of its k nearest training instances by majority voting or similar rules. Therefore, the k-nearest neighbors method has no explicit learning process.</description><pubDate>Mon, 13 Feb 2023 16:00:00 GMT</pubDate></item><item><title>Remotely Connect to a Server with SakuraFrp NAT Traversal</title><link>https://mahaofei.com/en/blog/sakurafrp/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/sakurafrp/</guid><description>I don&apos;t want to use remote desktop tools such as Sunlogin and ToDesk. My personal computer and the server are not on the same LAN, but I need remote access to the server, so I&apos;m considering NAT traversal.</description><pubDate>Sat, 04 Feb 2023 16:00:00 GMT</pubDate></item><item><title>[Statistical Learning Methods Notes 02] Perceptron</title><link>https://mahaofei.com/en/blog/statistic-note2/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/statistic-note2/</guid><description>The perceptron is a linear binary classification model. Its input is an instance&apos;s feature vector, and its output is the instance&apos;s class. Its goal is to find a separating hyperplane that linearly divides the training data.</description><pubDate>Tue, 06 Dec 2022 16:00:00 GMT</pubDate></item><item><title>[Statistical Learning Method Notes 01] Introduction to Statistical Learning</title><link>https://mahaofei.com/en/blog/statistic-note1/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/statistic-note1/</guid><description>Statistical learning is the discipline in which computers build probabilistic and statistical models from data and use those models to predict and analyze data. These notes follow Li Hang&apos;s book *Statistical Learning Methods*.</description><pubDate>Fri, 02 Dec 2022 16:00:00 GMT</pubDate></item><item><title>Creating a Custom LINEMOD Dataset (ObjectDatasetTools)</title><link>https://mahaofei.com/en/blog/custom-linemod/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/custom-linemod/</guid><description>I am currently studying 6D pose estimation algorithms. The LINEMOD dataset is the most commonly used dataset in this field, but testing only on an existing dataset is not enough. Building a custom dataset is necessary for practical applications.</description><pubDate>Sat, 17 Sep 2022 16:00:00 GMT</pubDate></item><item><title>[Paper Notes] FFB6D</title><link>https://mahaofei.com/en/blog/ffb6d/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ffb6d/</guid><description>FFB6D fuses RGB and point cloud information during the feature extraction stage, then performs instance segmentation and keypoint detection.</description><pubDate>Wed, 14 Sep 2022 16:00:00 GMT</pubDate></item><item><title>[Paper Notes] DenseFusion</title><link>https://mahaofei.com/en/blog/densefusion-paper/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/densefusion-paper/</guid><description>This paper proposes a heterogeneous architecture that processes two data sources (RGB and depth maps) separately and uses a novel dense fusion network to extract dense pixel-level features for pose estimation.</description><pubDate>Sun, 11 Sep 2022 16:00:00 GMT</pubDate></item><item><title>[6D Pose Estimation Algorithm] PVNet</title><link>https://mahaofei.com/en/blog/pvnet/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/pvnet/</guid><description>Attempted to test PVNet but gave up partway through.</description><pubDate>Sun, 11 Sep 2022 16:00:00 GMT</pubDate></item><item><title>[6D Pose Estimation Algorithm] PoseCNN</title><link>https://mahaofei.com/en/blog/posecnn/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/posecnn/</guid><description>Addresses the increased difficulty of 6D pose estimation caused by occlusion and clutter between objects by combining a backbone network with ICP point matching.</description><pubDate>Tue, 06 Sep 2022 16:00:00 GMT</pubDate></item><item><title>Qt Study Notes 05: Using ROS Libraries in Qt</title><link>https://mahaofei.com/en/blog/qt-note5/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/qt-note5/</guid><description>ROS is essential for robot software development, while Qt is essential for graphical user interfaces. This article explains how to use ROS libraries in Qt.</description><pubDate>Fri, 02 Sep 2022 16:00:00 GMT</pubDate></item><item><title>[Qt Study Notes 04] Dialogs</title><link>https://mahaofei.com/en/blog/qt-note4/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/qt-note4/</guid><description>Introduces modal and non-modal dialogs in Qt, as well as standard dialogs.</description><pubDate>Thu, 01 Sep 2022 16:00:00 GMT</pubDate></item><item><title>[Qt Study Notes 03] UI Design</title><link>https://mahaofei.com/en/blog/qt-note3/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/qt-note3/</guid><description>Introduces how to implement QMainWindow features, including the menu bar, toolbar, status bar, dock widgets, central widget, and more.</description><pubDate>Wed, 31 Aug 2022 16:00:00 GMT</pubDate></item><item><title>[Qt Learning Notes 01] Qt Basics, Buttons, Object Tree, and Basic Use of Signals and Slots</title><link>https://mahaofei.com/en/blog/qt-note1/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/qt-note1/</guid><description>Covers Qt basics and walks through creating your first Qt program (an empty window with a button). Introduces signals and slots, and implements the simplest case—closing the window when a button is pressed.</description><pubDate>Fri, 26 Aug 2022 16:00:00 GMT</pubDate></item><item><title>[Qt Study Notes 02] Custom Signals and Slot Functions</title><link>https://mahaofei.com/en/blog/qt-note2/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/qt-note2/</guid><description>Signals and slots are among the most important concepts in Qt. They enable signal transmission between senders and receivers and form the basis of various Qt operations.</description><pubDate>Fri, 26 Aug 2022 16:00:00 GMT</pubDate></item><item><title>[Deep Learning Notes 08] Classic Neural Networks</title><link>https://mahaofei.com/en/blog/deeplearning-note9/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/deeplearning-note9/</guid><description>Basic implementation methods for object detection, starting with object localization and summarizing object detection algorithms such as landmark detection, object detection, the sliding-window method, and NMS (Non-Max Suppression).</description><pubDate>Sat, 20 Aug 2022 16:00:00 GMT</pubDate></item><item><title>[Deep Learning Notes 08] Classic Neural Networks</title><link>https://mahaofei.com/en/blog/deeplearning-note8/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/deeplearning-note8/</guid><description>This article introduces several classic neural network models, including the network architectures of LeNet-5, AlexNet, VGG-16, ResNet, Inception networks, and more.</description><pubDate>Fri, 19 Aug 2022 16:00:00 GMT</pubDate></item><item><title>[Deep Learning Notes 07] Convolutional Neural Network</title><link>https://mahaofei.com/en/blog/deeplearning-note7/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/deeplearning-note7/</guid><description>Why do neural networks often use convolution when analyzing images? Why are there padding and stride? What roles do pooling layers and fully connected layers play?</description><pubDate>Wed, 17 Aug 2022 16:00:00 GMT</pubDate></item><item><title>[Deep Learning Notes 06] Hyperparameter Tuning and Handling</title><link>https://mahaofei.com/en/blog/deeplearning-note6/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/deeplearning-note6/</guid><description>This article introduces common parameter-selection principles and approximate ranges in neural networks, as well as the basic principles of BN and softmax.</description><pubDate>Sat, 13 Aug 2022 16:00:00 GMT</pubDate></item><item><title>[6D Pose Estimation Algorithm] Introduction to LineMod and Code Testing</title><link>https://mahaofei.com/en/blog/linemod/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/linemod/</guid><description>The LineMod algorithm was proposed by Hinterstoisser et al. in 2011. Using template matching, it addresses real-time detection and 6D pose estimation and localization for low-texture three-dimensional objects in cluttered scenes.</description><pubDate>Fri, 12 Aug 2022 16:00:00 GMT</pubDate></item><item><title>[Deep Learning Notes 05] Common Optimization Algorithms in Deep Learning</title><link>https://mahaofei.com/en/blog/deeplearning-note5/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/deeplearning-note5/</guid><description>This article introduces several of the most commonly used optimization algorithms, starting from partitioning the dataset into mini-batches, then covering momentum gradient descent, RMSprop, and their combination Adam, along with implementation details and basic principles for each method.</description><pubDate>Mon, 08 Aug 2022 16:00:00 GMT</pubDate></item><item><title>A Simple Guide to Time Complexity</title><link>https://mahaofei.com/en/blog/algorithm-time/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/algorithm-time/</guid><description>Explains concepts such as O(n) in time complexity and how to calculate time complexity.</description><pubDate>Mon, 01 Aug 2022 16:00:00 GMT</pubDate></item><item><title>[Deep Learning Notes 04] Elements for Improving Training Performance and Speed</title><link>https://mahaofei.com/en/blog/deeplearning-note4/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/deeplearning-note4/</guid><description>There are many ways to improve neural network training performance, such as avoiding underfitting and overfitting, using regularization, and so on. Different methods also have different effects.</description><pubDate>Mon, 25 Jul 2022 16:00:00 GMT</pubDate></item><item><title>[Deep Learning Notes 03] Linear Regression, Softmax Regression, and Their Loss Functions</title><link>https://mahaofei.com/en/blog/deeplearning-note3/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/deeplearning-note3/</guid><description>Linear regression in deep learning, basic optimization algorithms, and implementations of Softmax regression and loss functions.</description><pubDate>Tue, 19 Jul 2022 16:00:00 GMT</pubDate></item><item><title>[Deep Learning Notes 02] Implementation of Data Operations and Linear Algebra Fundamentals</title><link>https://mahaofei.com/en/blog/deeplearning-note2/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/deeplearning-note2/</guid><description>Introduces how to perform basic data operations with PyTorch and pandas, and how to carry out fundamental linear algebra operations and derivative computation with torch.</description><pubDate>Mon, 18 Jul 2022 16:00:00 GMT</pubDate></item><item><title>Summary of PDF Watermark Removal Methods</title><link>https://mahaofei.com/en/blog/pdf-remove-waterprint/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/pdf-remove-waterprint/</guid><description>Methods for removing watermarks with Foxit PDF Editor, including regular watermarks, background watermarks, text watermarks, and other watermarks.</description><pubDate>Sun, 17 Jul 2022 16:00:00 GMT</pubDate></item><item><title>Ubuntu Post-Installation System Configuration and Common Software Setup Notes</title><link>https://mahaofei.com/en/blog/ubuntu-install/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ubuntu-install/</guid><description>Notes from configuring Ubuntu after installation. I recently set up dual-boot systems and also tinkered with a Raspberry Pi; here is a summary.</description><pubDate>Tue, 05 Jul 2022 16:00:00 GMT</pubDate></item><item><title>Creating a Three-Dimensional Mesh Model of an Object with COLMAP and OpenMVS</title><link>https://mahaofei.com/en/blog/colmap/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/colmap/</guid><description>COLMAP is a general-purpose Structure-from-Motion (SfM) and Multi-View Stereo (MVS) tool with graphical and command-line interfaces. OpenMVS is one of the three-dimensional reconstruction frameworks that produces better reconstruction results, and it provides automated scripts.</description><pubDate>Mon, 04 Jul 2022 16:00:00 GMT</pubDate></item><item><title>Python Review Notes 5—Common Modules</title><link>https://mahaofei.com/en/blog/python-note5/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/python-note5/</guid><description>Python has a rich set of useful built-in modules and third-party modules that make it quick and convenient to implement many common features.</description><pubDate>Fri, 01 Jul 2022 16:00:00 GMT</pubDate></item><item><title>Python Review Notes 4—File and Directory Operations</title><link>https://mahaofei.com/en/blog/python-note4/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/python-note4/</guid><description>This article summarizes basic Python file reading and writing operations, as well as common os operations on directories and files, such as retrieving paths, joining paths, renaming files, and moving files. It also summarizes commonly used JSON operations.</description><pubDate>Thu, 30 Jun 2022 16:00:00 GMT</pubDate></item><item><title>Python Review Notes 3 — Testing and Debugging Techniques</title><link>https://mahaofei.com/en/blog/python-note3/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/python-note3/</guid><description>During program execution, you inevitably encounter all kinds of errors. Some are caused by bugs in the code, some by user input, and others are completely unpredictable at runtime. Python includes a built-in exception-handling mechanism to help us handle errors.</description><pubDate>Wed, 29 Jun 2022 16:00:00 GMT</pubDate></item><item><title>Python Review Notes 2 — Object-Oriented Programming</title><link>https://mahaofei.com/en/blog/python-note2/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/python-note2/</guid><description>Summarizes basic class usage; the characteristics and application examples of encapsulation, inheritance, and polymorphism; and inheritance-oriented advanced features such as multiple inheritance and customized classes.</description><pubDate>Tue, 28 Jun 2022 16:00:00 GMT</pubDate></item><item><title>Python Review Notes 1—Advanced Python Features and Functional Programming</title><link>https://mahaofei.com/en/blog/python-note1/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/python-note1/</guid><description>In Python, less code is better, and simpler code is better. Based on this philosophy, Python provides many useful advanced features, such as list comprehensions, generators, anonymous functions, and decorators.</description><pubDate>Mon, 27 Jun 2022 16:00:00 GMT</pubDate></item><item><title>A Survey of Three-Dimensional Reconstruction Methods</title><link>https://mahaofei.com/en/blog/3d-reconstruction/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/3d-reconstruction/</guid><description>Three-dimensional reconstruction uses a camera to photograph real-world objects and scenes, then processes them with computer vision techniques to obtain a three-dimensional model of the object. The main techniques involved include multi-view stereo, depth map estimation, point cloud processing, mesh reconstruction and optimization, texture mapping, Markov random fields, image segmentation, and more.</description><pubDate>Fri, 24 Jun 2022 16:00:00 GMT</pubDate></item><item><title>Implementing Painting, Grinding, and Other Operations in RobotStudio (Curved-Surface Path Generation and Simulation)</title><link>https://mahaofei.com/en/blog/robotstudio-curve/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-curve/</guid><description>Import a CAD model with complex curved surfaces, such as a car body, into RobotStudio. Use RobotStudio for path planning to enable a robotic arm to paint the car body.</description><pubDate>Thu, 23 Jun 2022 16:00:00 GMT</pubDate></item><item><title>Deep Learning Bug List (Updated Occasionally)</title><link>https://mahaofei.com/en/blog/deeplearning-buglist/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/deeplearning-buglist/</guid><description>When running deep learning code for training and inference, you will inevitably encounter various errors. This article collects some of the errors I have encountered and will be updated occasionally.</description><pubDate>Fri, 10 Jun 2022 16:00:00 GMT</pubDate></item><item><title>Classic Instance Segmentation Model: Mask R-CNN</title><link>https://mahaofei.com/en/blog/maskrcnn/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/maskrcnn/</guid><description>Mask R-CNN is a major 2017 work by Kaiming He. It performs instance segmentation alongside object detection and achieves excellent results.</description><pubDate>Fri, 10 Jun 2022 16:00:00 GMT</pubDate></item><item><title>[Deep Learning Notes 01] Neural Networks and Deep Learning</title><link>https://mahaofei.com/en/blog/deeplearning-note1/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/deeplearning-note1/</guid><description>Notes from my journey learning deep learning from scratch. This chapter introduces the most fundamental mathematical ideas behind deep learning, as well as simple regression-based approaches to deep learning algorithms and related code.</description><pubDate>Thu, 19 May 2022 16:00:00 GMT</pubDate></item><item><title>How to Understand Channels in Convolutional Neural Networks</title><link>https://mahaofei.com/en/blog/deeplearning-basic/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/deeplearning-basic/</guid><description>A summary of some concepts that beginners may find difficult to understand when starting out in deep learning.</description><pubDate>Mon, 16 May 2022 16:00:00 GMT</pubDate></item><item><title>Understanding Channels in Convolutional Neural Networks</title><link>https://mahaofei.com/en/blog/channel/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/channel/</guid><description>Generally, channels refers to the number of convolution kernels in each convolutional layer. The channels of the initial input image sample depend on the image type, such as RGB; after convolution, out_channels depends on the number of convolution kernels. The out_channels then also serves as the in_channels of the convolution kernel in the next convolution.</description><pubDate>Sun, 15 May 2022 16:00:00 GMT</pubDate></item><item><title>How Convolution Is Computed</title><link>https://mahaofei.com/en/blog/convolution/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/convolution/</guid><description>Convolution is essentially the process of taking a matrix of a specific size each time, sliding it across the input matrix, and computing the inner product at each position.</description><pubDate>Sun, 15 May 2022 16:00:00 GMT</pubDate></item><item><title>Deep Learning Environment Setup with CUDA + TensorFlow 2 + Keras</title><link>https://mahaofei.com/en/blog/cuda/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/cuda/</guid><description>The process of setting up a deep learning environment with Anaconda + CUDA + TensorFlow 2 + Keras.</description><pubDate>Sun, 15 May 2022 16:00:00 GMT</pubDate></item><item><title>Deep Learning Environment Setup with PyTorch</title><link>https://mahaofei.com/en/blog/pytorch/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/pytorch/</guid><description>An installation tutorial for the commonly used deep learning environment PyTorch.</description><pubDate>Sun, 15 May 2022 16:00:00 GMT</pubDate></item><item><title>LaTeX Paper Writing Guidelines</title><link>https://mahaofei.com/en/blog/ieee-format/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ieee-format/</guid><description>A summary of IEEE paper writing guidelines</description><pubDate>Mon, 25 Apr 2022 16:00:00 GMT</pubDate></item><item><title>LaTeX Basics</title><link>https://mahaofei.com/en/blog/latex-basic/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/latex-basic/</guid><description>Notes on LaTeX basics</description><pubDate>Mon, 25 Apr 2022 16:00:00 GMT</pubDate></item><item><title>Common LaTeX Formulas</title><link>https://mahaofei.com/en/blog/latex-formula/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/latex-formula/</guid><description>I use a lot of formulas when writing blog posts, and having to look up LaTeX syntax every time I forget it is tedious, so I&apos;m summarizing it here.</description><pubDate>Mon, 25 Apr 2022 16:00:00 GMT</pubDate></item><item><title>Basic NumPy Methods for Data Processing</title><link>https://mahaofei.com/en/blog/numpy/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/numpy/</guid><description>Notes and examples on functions and methods for array operations with NumPy, including array creation, slicing and indexing, basic array operations (transposing, joining, sorting, flattening, and more), and the use of some basic array computation functions.</description><pubDate>Sat, 23 Apr 2022 16:00:00 GMT</pubDate></item><item><title>Basic Anaconda Usage and Calling It from PyCharm</title><link>https://mahaofei.com/en/blog/anaconda/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/anaconda/</guid><description>We may want to install many different versions of Python on a computer, or we may want a Python environment to contain only the packages we use so it is easier to package and distribute a program. These situations all require creating Python virtual environments. Anaconda is a tool for managing Python environments like this.</description><pubDate>Thu, 21 Apr 2022 16:00:00 GMT</pubDate></item><item><title>Formatting Guidelines for Undergraduate Thesis Writing</title><link>https://mahaofei.com/en/blog/bachelor-thesis/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/bachelor-thesis/</guid><description>A summary of formatting issues the blogger encountered while writing an undergraduate thesis, for reference only.</description><pubDate>Tue, 19 Apr 2022 16:00:00 GMT</pubDate></item><item><title>Detecting ArUco Marker Pose in ROS</title><link>https://mahaofei.com/en/blog/ros-aruco/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-aruco/</guid><description>A package for detecting ArUco pose, with installation, testing, and usage instructions.</description><pubDate>Sun, 17 Apr 2022 16:00:00 GMT</pubDate></item><item><title>Downloading Resources from Major Video and Audio Websites</title><link>https://mahaofei.com/en/blog/video-download/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/video-download/</guid><description>Use you-get, a project on GitHub, to download videos, images, and audio from most major websites. Supported websites include YouTube, Twitter, Facebook, bilibili, AcFun, niconico, NetEase Cloud Music, Kugou Music, QQ Music, iQIYI, Tencent Video, Douyin, Kuaishou, Zhihu, and many others.</description><pubDate>Thu, 07 Apr 2022 16:00:00 GMT</pubDate></item><item><title>Testing the Staple Object Tracking Algorithm in C++</title><link>https://mahaofei.com/en/blog/staple/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/staple/</guid><description>Staple combines local HOG features and global color-histogram features for object tracking. This test has been completed in Windows, Ubuntu, and ROS environments and runs successfully.</description><pubDate>Mon, 04 Apr 2022 16:00:00 GMT</pubDate></item><item><title>ROS and STM32 Communication</title><link>https://mahaofei.com/en/blog/ros-stm32/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-stm32/</guid><description>Implemented bidirectional serial communication over UART between a host PC running ROS Noetic and an STM32F1 development board.</description><pubDate>Sun, 27 Mar 2022 16:00:00 GMT</pubDate></item><item><title>How to Set Up Alibaba Cloud OSS Image Hosting</title><link>https://mahaofei.com/en/blog/alioss/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/alioss/</guid><description>I now publish blog posts on CSDN and my own website at the same time. However, I used to write and publish directly in the CSDN editor, which was an uncomfortable way to work. I still prefer a local Markdown editor such as Typora. This means I need my own image host, so screenshots pasted into the local Markdown editor are automatically uploaded to it.</description><pubDate>Fri, 25 Mar 2022 16:00:00 GMT</pubDate></item><item><title>Controlling a Stepper Motor with STM32</title><link>https://mahaofei.com/en/blog/stm32-stepping-motor/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/stm32-stepping-motor/</guid><description>Driving a 42-series stepper motor with an A4988 chip, tested on the STM32F1 platform, with up to 16× microstepping.</description><pubDate>Fri, 25 Mar 2022 16:00:00 GMT</pubDate></item><item><title>Siemens TIA Portal V15 Download and Installation Guide</title><link>https://mahaofei.com/en/blog/tia-portal/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/tia-portal/</guid><description>An installation guide for Siemens TIA Portal V15 PLC automation design software.</description><pubDate>Thu, 03 Feb 2022 16:00:00 GMT</pubDate></item><item><title>[Object Recognition] SIFT Algorithm: Theory</title><link>https://mahaofei.com/en/blog/sift/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/sift/</guid><description>SIFT (Scale-Invariant Feature Transform) is an algorithm for detecting and describing local image features. The algorithm searches for extrema across scale space and extracts position, scale, and rotation invariants. These keypoints remain stable under changes in illumination, affine transformation, and noise. The main steps are (1) scale-space extrema detection; (2) keypoint localization; (3) orientation assignment; and (4) keypoint description and matching.</description><pubDate>Mon, 20 Dec 2021 16:00:00 GMT</pubDate></item><item><title>PyQt5 GUI Development Notes</title><link>https://mahaofei.com/en/blog/pyqt5/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/pyqt5/</guid><description>The lab recently needed to process many spreadsheets, so I built a Python tool to help. The program uses PyQt5 for the graphical interface. This post records the full workflow—from installing PyQt5, to designing the UI, to writing code that drives the widgets, and finally packaging the app as an exe.</description><pubDate>Thu, 16 Dec 2021 16:00:00 GMT</pubDate></item><item><title>Introduction to g2o Graph Optimization and Basic Usage</title><link>https://mahaofei.com/en/blog/g2o/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/g2o/</guid><description>g2o (General Graph Optimization) is a graph optimization library that combines nonlinear optimization with graph theory. We can use g2o to solve any least-squares problem that can be represented as graph optimization.</description><pubDate>Sat, 23 Oct 2021 16:00:00 GMT</pubDate></item><item><title>【Basic Ceres Usage】Using Ceres to Fit a Curve and Solve a Least-Squares Problem</title><link>https://mahaofei.com/en/blog/ceres/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ceres/</guid><description>Ceres is a library for solving least-squares problems. We only need to define the problem to be optimized and let it perform the computation. Usage: 1. Define each parameter block. A parameter block is simply a vector, but it can also have a special structure such as a quaternion or Lie algebra……</description><pubDate>Fri, 22 Oct 2021 16:00:00 GMT</pubDate></item><item><title>STM32 Serial Communication Not Responding</title><link>https://mahaofei.com/en/blog/stm32-serialbug/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/stm32-serialbug/</guid><description>I was using an STM32F103C8T6 minimum system board. After debugging the STM32 program on Windows and successfully establishing serial communication, the serial connection stopped responding after I restarted the computer.</description><pubDate>Thu, 21 Oct 2021 16:00:00 GMT</pubDate></item><item><title>Calibrating an External USB Camera in ROS</title><link>https://mahaofei.com/en/blog/ros-usbcamera/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-usbcamera/</guid><description>The purpose of camera calibration is to eliminate camera distortion. For details on how distortion occurs, see the previous article. The process of calibrating a USB camera in ROS can be broadly divided into several steps. ① Install the usb_camera driver package; ② run usb_cam to capture images from the USB camera; ③ download and print a checkerboard, then calibrate the camera.</description><pubDate>Tue, 19 Oct 2021 16:00:00 GMT</pubDate></item><item><title>Keil5 C51 Download and Installation Tutorial (51 MCU Programming Software)</title><link>https://mahaofei.com/en/blog/keil5-c51/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/keil5-c51/</guid><description>This tutorial explains how to download and install the Keil5 51 edition. Keil5 is a very user-friendly and powerful C language software development system. Keil5 provides a clear and intuitive interface, is very easy and convenient to use, and includes compiler, compiler, installer package, and debugging and tracing features.</description><pubDate>Sat, 16 Oct 2021 16:00:00 GMT</pubDate></item><item><title>Keil5 MDK Edition Download and Installation Tutorial (STM32 Microcontroller Programming Software)</title><link>https://mahaofei.com/en/blog/keil5-mdk/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/keil5-mdk/</guid><description>This tutorial explains how to download and install the MDK edition of Keil5. Keil5 is a very user-friendly and powerful C software development system. Keil5 provides a clear, intuitive interface, is very easy and convenient to use, and includes a compiler, compiler, installation package, and debugging and tracing features.</description><pubDate>Sat, 16 Oct 2021 16:00:00 GMT</pubDate></item><item><title>Simulating and Controlling a Differential-Drive Robot with ROS + Gazebo</title><link>https://mahaofei.com/en/blog/gazebo-car/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/gazebo-car/</guid><description>Use xacro description files to create a differential-drive robot model, simulate the model in Gazebo, then use the libgazebo_ros_diff_drive.so plugin to control the robot&apos;s motion, and finally implement keyboard control of the robot in the Gazebo environment.</description><pubDate>Thu, 14 Oct 2021 16:00:00 GMT</pubDate></item><item><title>LabVIEW 2020 Download and Installation Tutorial</title><link>https://mahaofei.com/en/blog/labview-2020/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview-2020/</guid><description>LabVIEW 2020 Chinese edition installation tutorial with Aliyun Drive links and detailed installation steps. For learning reference only—do not use for commercial purposes!</description><pubDate>Tue, 12 Oct 2021 16:00:00 GMT</pubDate></item><item><title>How to Resolve ImportError No module named cv2 (Changing the Default Python Version)</title><link>https://mahaofei.com/en/blog/opencv-pythonversion/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-pythonversion/</guid><description>When using the OpenCV package, you may encounter ImportError: No module named cv2. I was certain that I had already installed OpenCV. After looking into it, I found that OpenCV had been installed for a different Python version than the system default, which caused the module not to be found.</description><pubDate>Mon, 11 Oct 2021 16:00:00 GMT</pubDate></item><item><title>How to Use URDF and Xacro: A Robotic Arm Model Simulation Example</title><link>https://mahaofei.com/en/blog/urdf/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/urdf/</guid><description>Why create a three-dimensional robot model? Robot simulation tools can help us identify critical errors in a design. Model simulation means that we create a robot model, so it does not necessarily look exactly like the real robot. However, because it is a simulation, the model must include all the characteristics of the real hardware.</description><pubDate>Sat, 09 Oct 2021 16:00:00 GMT</pubDate></item><item><title>A Detailed Explanation of Camera Models and Undistortion Methods</title><link>https://mahaofei.com/en/blog/camera-distortion/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/camera-distortion/</guid><description>This article first introduces the imaging principle of pinhole cameras and the conversion between physical coordinates and pixel coordinates. It then introduces a distortion model based on real-world camera issues, presents undistortion formulas, and includes a detailed example program.</description><pubDate>Fri, 08 Oct 2021 16:00:00 GMT</pubDate></item><item><title>Methods for Accessing the Open Internet (How to Access Google, ChatGPT)</title><link>https://mahaofei.com/en/blog/connect-world/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/connect-world/</guid><description>Introduces how to look up literature indexed on various websites and how to download it, as well as how to check the impact factors of major journals.</description><pubDate>Tue, 05 Oct 2021 16:00:00 GMT</pubDate></item><item><title>My Experience with Recommendation-Based Graduate Admission</title><link>https://mahaofei.com/en/blog/postgraduate-recommand-experience/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/postgraduate-recommand-experience/</guid><description>Some time has passed since the recommendation-based graduate admission process ended. Here, I have summarized my experience and offered some advice in the hope that younger students who read this article will find it helpful.</description><pubDate>Tue, 05 Oct 2021 16:00:00 GMT</pubDate></item><item><title>Postgraduate Recommendation Interview Questions</title><link>https://mahaofei.com/en/blog/postgraduate-recommand-question/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/postgraduate-recommand-question/</guid><description>If you found this article, you&apos;re clearly taking this seriously. Keep it up! I believe you&apos;ll get the best outcome!</description><pubDate>Tue, 05 Oct 2021 16:00:00 GMT</pubDate></item><item><title>How to Download from Baidu Netdisk Without Speed Limits</title><link>https://mahaofei.com/en/blog/baidunetdisk-download/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/baidunetdisk-download/</guid><description>Use the Tampermonkey extension with IDM direct links to download from Baidu Netdisk without speed limits.</description><pubDate>Mon, 04 Oct 2021 16:00:00 GMT</pubDate></item><item><title>A Detailed Guide to Basic ROS Functionality (Basic Commands/Nodes/Services/Launch Files/Dynamic Parameters)</title><link>https://mahaofei.com/en/blog/ros-basic/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-basic/</guid><description>Starting with the creation of a workspace and package, this article explains the creation and compilation steps and provides a detailed summary of commonly used ROS commands. It then uses specific examples to explain in detail how to create nodes, services, launch files, and dynamic parameters, and demonstrates how they are used.</description><pubDate>Wed, 15 Sep 2021 16:00:00 GMT</pubDate></item><item><title>Summary of “cmake practice”: CMake Build Process and Basic Commands</title><link>https://mahaofei.com/en/blog/cmake/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/cmake/</guid><description>CMake is a cross-platform, open-source meta-build system that can build, test, and package software. It can support multiple native build environments. More and more projects are using CMake as their build tool, making CMake a mainstream build system.</description><pubDate>Mon, 13 Sep 2021 16:00:00 GMT</pubDate></item><item><title>[OpenCV/C++] Implementation Principles and Code Walkthrough for Digit Recognition with KNN</title><link>https://mahaofei.com/en/blog/opencv-knn/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-knn/</guid><description>The KNN algorithm, or K-nearest neighbors algorithm, works by predicting the class of a new value x based on which class most of its K nearest neighbors belong to. The same idea applies to image recognition.</description><pubDate>Sat, 11 Sep 2021 16:00:00 GMT</pubDate></item><item><title>A Detailed Guide to Camera-Based Digit Recognition with OpenCV</title><link>https://mahaofei.com/en/blog/opencv-digit-recognize/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-digit-recognize/</guid><description>This article aims to recognize digits in camera images. Practical applications include license plate number recognition and recognizing printed digits on A4 paper in some competitions. Camera-based digit recognition consists of two steps: 1. Extract the ROI from the image, such as the rectangular license plate area or the A4 paper image. 2. Recognize digits in the ROI. Digit recognition is relatively straightforward, so this article first introduces its methods and principles.</description><pubDate>Wed, 08 Sep 2021 16:00:00 GMT</pubDate></item><item><title>Adding a Follow Me on CSDN Ribbon to Hexo</title><link>https://mahaofei.com/en/blog/hexo-followme/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/hexo-followme/</guid><description>Most examples online show a Fork me on GitHub ribbon, but the principle for implementing Follow me on CSDN is the same. Just download and edit the image for the effect you want, upload it to an image host (or CSDN), obtain the image URL, and replace the URL in the code.</description><pubDate>Mon, 16 Aug 2021 16:00:00 GMT</pubDate></item><item><title>How to Set the Sidebar Background and Font Colors in Hexo + NexT</title><link>https://mahaofei.com/en/blog/hexo-sidebar/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/hexo-sidebar/</guid><description>Since the NexT theme has been updated several times, many resources said to modify the custom.styl configuration file. However, my theme did not contain this file. After consulting a great deal of material, I finally found the location of the sidebar configuration file.</description><pubDate>Mon, 16 Aug 2021 16:00:00 GMT</pubDate></item><item><title>Customizing the NexT Theme in Hexo</title><link>https://mahaofei.com/en/blog/hexo-next/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/hexo-next/</guid><description>In Hexo, there are generally two _config.yml files—one in the root directory, which I call the site configuration file, and one in the theme directory, which I call the theme configuration file. This article covers settings such as theme switching, menu configuration, sidebar configuration, author avatar, social links, site name, author name, Chinese/English switching, number of posts shown on the homepage, and translation settings.</description><pubDate>Sun, 15 Aug 2021 16:00:00 GMT</pubDate></item><item><title>How to Set Categories and Tags for Posts in Hexo</title><link>https://mahaofei.com/en/blog/hexo-toc/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/hexo-toc/</guid><description>First, create the Categories and Tags pages as described below. Then, create a .md file in the source\_posts directory to create a new blog post. Add the following code at the beginning of the post to assign categories and tags; the annotations explain the purpose of each section.</description><pubDate>Sun, 15 Aug 2021 16:00:00 GMT</pubDate></item><item><title>Learning OpenCV 4: Implementing Face Detection</title><link>https://mahaofei.com/en/blog/opencv-note15/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-note15/</guid><description>First, download all the files in `opencv/samples/dnn/face_detector/` from OpenCV&apos;s GitHub site and overwrite the files in the local directory. Then open weights.meta4 in Notepad and download the files corresponding to the two URLs it contains.</description><pubDate>Fri, 13 Aug 2021 16:00:00 GMT</pubDate></item><item><title>Learning OpenCV 4: Image Blurring Methods (Mean Filter and Gaussian Blur)</title><link>https://mahaofei.com/en/blog/opencv-note14/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-note14/</guid><description>Mean filtering uses the principle of image convolution. As shown in the figure below, when the convolution kernel is a third-order unit matrix, mean filtering is performed: each third-order submatrix of the original image has its mean computed and assigned to the center element.</description><pubDate>Thu, 12 Aug 2021 16:00:00 GMT</pubDate></item><item><title>Learning OpenCV 4: What Is an Image Histogram? How Do You Obtain One?</title><link>https://mahaofei.com/en/blog/opencv-note13/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-note13/</guid><description>An image histogram is a statistical feature of image pixel values. It is inexpensive to compute and has many advantages, including invariance to image translation, rotation, and scaling. It is widely used across image processing, especially for grayscale image thresholding, color-based image retrieval, image classification, and backprojection tracking. Common types are grayscale histograms and color histograms.</description><pubDate>Wed, 11 Aug 2021 16:00:00 GMT</pubDate></item><item><title>Learning OpenCV 4: Reading and Saving Camera Video</title><link>https://mahaofei.com/en/blog/opencv-note12/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-note12/</guid><description>Reading and processing video is essential in image processing. In OpenCV, the main function used to read camera video is capture(). This article explains how to read camera video with OpenCV and describes the functions used to save it, including their implementation and specific details.</description><pubDate>Mon, 26 Jul 2021 16:00:00 GMT</pubDate></item><item><title>Learning OpenCV 4: Summary of Image Transformation Methods (Scaling, Flipping, Rotation)</title><link>https://mahaofei.com/en/blog/opencv-note11/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-note11/</guid><description>Common image transformation methods include image scaling, flipping, and rotation. In OpenCV, each of these image transformation operations has a corresponding function. This article introduces various image transformation methods through explanations of function definitions and concrete examples.</description><pubDate>Sun, 25 Jul 2021 16:00:00 GMT</pubDate></item><item><title>[Learning OpenCV 4] Converting and Normalizing Image Pixel Data Types</title><link>https://mahaofei.com/en/blog/opencv-note10/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-note10/</guid><description>Normalization constrains the data to be processed, after processing (via some algorithm), within a certain range. This makes later data processing easier and also helps the program converge faster during runtime.</description><pubDate>Sat, 24 Jul 2021 16:00:00 GMT</pubDate></item><item><title>[Learning OpenCV 4] Responding to Keyboard and Mouse Input in OpenCV</title><link>https://mahaofei.com/en/blog/opencv-note9/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-note9/</guid><description>This article introduces how to handle keyboard and mouse input in OpenCV, the functions involved, and the parameters of each function. It also uses keyboard and mouse input handling to create several interesting small programs.</description><pubDate>Fri, 23 Jul 2021 16:00:00 GMT</pubDate></item><item><title>[Learning OpenCV 4] Using Random Numbers and Generating Random Lines</title><link>https://mahaofei.com/en/blog/opencv-note8/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-note8/</guid><description>C and C++ provide the rand() and srand() functions for generating random numbers, and they can also be used when writing OpenCV code in C++. OpenCV also provides its own RNG class for generating random numbers, which is very convenient to use. This article mainly introduces how to use RNG and how to draw random lines based on the random numbers it generates.</description><pubDate>Thu, 22 Jul 2021 16:00:00 GMT</pubDate></item><item><title>【Learning OpenCV 4】Methods for Drawing Geometric Shapes</title><link>https://mahaofei.com/en/blog/opencv-note7/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-note7/</guid><description>This article introduces methods for drawing rectangles, circles, lines, and ellipses with C++ and OpenCV 4. It focuses on the definitions of OpenCV built-in functions (such as rectangle(), circle(), line(), and ellipse()) and the role of each parameter, and provides example programs for reference. It also summarizes methods for drawing polygons, including the polygon-border drawing function polylines(), the polygon-filling function fillPoly(), the function for drawing multiple polygons drawContours(), and more.</description><pubDate>Wed, 21 Jul 2021 16:00:00 GMT</pubDate></item><item><title>【Learning OpenCV 4】How to Replace a Green-Screen Background</title><link>https://mahaofei.com/en/blog/opencv-note6/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-note6/</guid><description>Replacing the background of a green-screen image involves ① color-space conversion, ② extracting the green-screen region, ③ inverting the green-screen region, and ④ copying the image. The various functions and code encountered along the way are also covered in detail in this article.</description><pubDate>Tue, 20 Jul 2021 16:00:00 GMT</pubDate></item><item><title>[Learning OpenCV4] Image Channel Splitting, Merging, and Mixing Methods (C++)</title><link>https://mahaofei.com/en/blog/opencv-note5/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-note5/</guid><description>After splitting image channels, the output multi-channel sequence is typically stored using std::vector mv;, where mv[0], mv[1], and mv[2] correspond to the three BGR channels respectively. However, what is displayed now is essentially three single-channel images—in other words, three grayscale images. To restore intuitive color to the three images, you need to use the channel merging method described below.</description><pubDate>Mon, 19 Jul 2021 16:00:00 GMT</pubDate></item><item><title>【Learning OpenCV 4】A Detailed Guide to Creating and Using Trackbars</title><link>https://mahaofei.com/en/blog/opencv-note4/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-note4/</guid><description>OpenCV uses createTrackbar() to create a Trackbar. The function syntax and the purpose of each parameter are shown below.</description><pubDate>Sun, 18 Jul 2021 16:00:00 GMT</pubDate></item><item><title>Learning OpenCV 4: How Do You Manipulate Pixels in an Image?</title><link>https://mahaofei.com/en/blog/opencv-note3/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-note3/</guid><description>Image pixel operations include read and write operations, arithmetic operations, logical operations, and more. Pixel operations are not only diverse; operations on grayscale images and color images also have their own characteristics. Operating on pixels allows us to access every pixel in an image and implement many unexpected functions.</description><pubDate>Sat, 17 Jul 2021 16:00:00 GMT</pubDate></item><item><title>[Learning OpenCV4] Basic Image Operations</title><link>https://mahaofei.com/en/blog/opencv-note2/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-note2/</guid><description>Color space conversion function: cvtColor. GRAY: grayscale, with only one Channel for the grayscale value. BGR: the BGR color space, based on the three primary colors red, green, and blue (0~255), which are combined to form various colors. HSV: the hexagonal cone model, with Hue measured in degrees (0~180), Saturation in the range 0 ~ 255, and Value in the range 0 ~ 255.</description><pubDate>Fri, 16 Jul 2021 16:00:00 GMT</pubDate></item><item><title>[Learning OpenCV4] Installing and Configuring OpenCV4.5 + VS2019 on Windows 10 (Detailed Steps)</title><link>https://mahaofei.com/en/blog/opencv-note1/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opencv-note1/</guid><description>First, download and extract OpenCV. I recommend downloading the Windows installer from the official OpenCV website. If the download is too slow, I have also uploaded the OpenCV4.5.2 installer to Aliyun Drive at https://www.aliyundrive.com/s/VGkaM7vyuck. Make sure to extract it to an English-only path.</description><pubDate>Thu, 15 Jul 2021 16:00:00 GMT</pubDate></item><item><title>Proteus 8.9 Download and Installation Tutorial</title><link>https://mahaofei.com/en/blog/proteus89/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/proteus89/</guid><description>The state machine is the most commonly used design model in engineering applications. With a state machine, we can easily implement decisions and branches in a program flowchart. A LabVIEW state machine consists of a While Loop, a Case Structure, and a shift register.</description><pubDate>Mon, 26 Apr 2021 16:00:00 GMT</pubDate></item><item><title>Introduction to LabVIEW State Machines with a Program Example</title><link>https://mahaofei.com/en/blog/labview-statemachine/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview-statemachine/</guid><description>State machines are the most widely used design pattern in engineering applications. With a state machine, we can easily implement decisions and branches from program flowcharts. A LabVIEW state machine consists of a While loop, a case structure, and a shift register.</description><pubDate>Mon, 19 Apr 2021 16:00:00 GMT</pubDate></item><item><title>Creating and Calling SubVIs in LabVIEW</title><link>https://mahaofei.com/en/blog/labview-subvi/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview-subvi/</guid><description>An important concept in programming is modularity, which means dividing a program into several blocks so that modifying one block does not affect the others. In LabVIEW, we use subVIs to implement modular programming.</description><pubDate>Mon, 19 Apr 2021 16:00:00 GMT</pubDate></item><item><title>Implementing a Drawing Board in LabVIEW</title><link>https://mahaofei.com/en/blog/labview-draw/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview-draw/</guid><description>The two-dimensional Picture control provides pixel-level control and can create almost any graphical object. To display an image in a two-dimensional Picture control, you must write an image to the control programmatically. You can draw with the Picture Functions VIs.</description><pubDate>Wed, 14 Apr 2021 16:00:00 GMT</pubDate></item><item><title>LabVIEW Multi-Point Sinusoidal Motion Trajectories</title><link>https://mahaofei.com/en/blog/labview-sin/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview-sin/</guid><description>A shift register passes the value generated in the previous loop iteration to the next iteration. Shift registers appear as pairs of terminals located at corresponding positions on the borders on opposite sides of a loop. A shift register must be initialized; that is, you must set the value that it passes to the first loop iteration.</description><pubDate>Mon, 12 Apr 2021 16:00:00 GMT</pubDate></item><item><title>[SLAM Notes] How to Use Eigen for Matrix Operations</title><link>https://mahaofei.com/en/blog/eigen/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/eigen/</guid><description>Eigen is an open-source C++ linear algebra library that provides fast matrix and linear algebra operations, equation solving, and other features. Many higher-level software libraries also use Eigen for matrix operations. Eigen is a header-only library, so to use it, you only need to include its header files; no library linking is required.</description><pubDate>Sun, 11 Apr 2021 16:00:00 GMT</pubDate></item><item><title>[SLAM Notes] Three-Dimensional Rigid-Body Motion</title><link>https://mahaofei.com/en/blog/slam-rotation/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/slam-rotation/</guid><description>The rotation and translation between two coordinate frames are collectively called the transformation between frames. While a robot moves, we often define an inertial frame (the world frame), which can be treated as fixed. The robot itself is a moving frame.</description><pubDate>Fri, 09 Apr 2021 16:00:00 GMT</pubDate></item><item><title>Generating a Three-Dimensional Surface in LabVIEW | Vase</title><link>https://mahaofei.com/en/blog/labview-3dsurface/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview-3dsurface/</guid><description>Generating a surface of revolution such as a vase essentially involves sweeping a profile along a guide curve. For a vase, the method is to sweep a circle along a curve. The circle is generated as follows: the total number of loop iterations is 360, corresponding to 360 degrees, while i represents each angle from 0~360.</description><pubDate>Wed, 07 Apr 2021 16:00:00 GMT</pubDate></item><item><title>Drawing Circles/Ellipses in LabVIEW</title><link>https://mahaofei.com/en/blog/labview-circle/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview-circle/</guid><description>A for loop runs for a fixed number of iterations and also has a conditional terminal that can terminate a while loop early, equivalent to the break statement in C. For loops are closely tied to array operations, and their most important function is processing array data.</description><pubDate>Mon, 05 Apr 2021 16:00:00 GMT</pubDate></item><item><title>[Proteus Simulation] Converting 220V to 5V to Power a Microcontroller</title><link>https://mahaofei.com/en/blog/proteus-220to5/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/proteus-220to5/</guid><description>The components used include a simulated power supply, a transformer, a bridge rectifier, a non-polarized capacitor, an electrolytic capacitor, and a three-terminal voltage regulator IC. The wiring method is shown in the figure.</description><pubDate>Mon, 05 Apr 2021 16:00:00 GMT</pubDate></item><item><title>[SLAM Notes] Overview of SLAM</title><link>https://mahaofei.com/en/blog/slam-intro/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/slam-intro/</guid><description>For a mobile robot, we often need it to know two things—where it is (localization) and what the surrounding environment looks like (mapping).</description><pubDate>Sat, 27 Mar 2021 16:00:00 GMT</pubDate></item><item><title>Frontend Notes | CSS Positioning</title><link>https://mahaofei.com/en/blog/html-note6/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/html-note6/</guid><description>An element can move freely within a box and overlap other boxes. When the window is scrolled, some modules stay fixed at a certain position on the screen. Neither of these effects can be achieved quickly with standard flow or floats alone; positioning is needed in those cases.</description><pubDate>Wed, 17 Mar 2021 16:00:00 GMT</pubDate></item><item><title>Quick Ways to Write HTML and CSS in VS Code</title><link>https://mahaofei.com/en/blog/html-vscode/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/html-vscode/</guid><description>Emmet was formerly known as Zen Coding. It uses abbreviations to speed up HTML/CSS coding, and VS Code has built-in support for it.</description><pubDate>Tue, 16 Mar 2021 16:00:00 GMT</pubDate></item><item><title>Frontend Notes | CSS Floats</title><link>https://mahaofei.com/en/blog/html-note5/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/html-note5/</guid><description>CSS provides three traditional layout methods—normal flow (standard flow), floats, and positioning. All three are used to arrange boxes. Once the boxes are placed in the appropriate positions, the layout naturally takes shape. In actual development, a page generally includes all three layout methods (mobile devices have newer layout methods).</description><pubDate>Mon, 15 Mar 2021 16:00:00 GMT</pubDate></item><item><title>Frontend Notes | CSS Box Model</title><link>https://mahaofei.com/en/blog/html-note4/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/html-note4/</guid><description>Web page layout learning has three core topics—the box model, floats, and positioning. Learning the box model helps us lay out pages well. The web page layout process: first prepare the related page elements, use CSS to set the box styles, then place them in the corresponding positions, and put content into the boxes.</description><pubDate>Sun, 14 Mar 2021 16:00:00 GMT</pubDate></item><item><title>Frontend Notes | Advanced CSS</title><link>https://mahaofei.com/en/blog/html-note3/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/html-note3/</guid><description>CSS classifies selectors by type as basic selectors and composite selectors. Composite selectors are built by combining basic selectors. CSS background properties can add background styles to elements on a page, including background colors, images, tiling, image positions, and fixed background images.</description><pubDate>Sat, 13 Mar 2021 16:00:00 GMT</pubDate></item><item><title>Front-End Notes | CSS Fundamentals</title><link>https://mahaofei.com/en/blog/html-note2/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/html-note2/</guid><description>CSS is mainly used to beautify web pages and lay them out. Web pages look unattractive when only HTML is used. CSS is also a markup language, mainly used to set the text content (font, size, alignment, etc.), the appearance of images (width and height, border styles, margins, etc.), and the layout and visual styles of HTML pages.</description><pubDate>Fri, 12 Mar 2021 16:00:00 GMT</pubDate></item><item><title>Frontend Notes | HTML Basics</title><link>https://mahaofei.com/en/blog/html-note1/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/html-note1/</guid><description>HTML is a language used to describe web pages. HTML stands for HyperText Markup Language. HTML is not a programming language; it is a markup language. How to use HTML headings, paragraphs, links, and images. Elements, attributes, and formatting; links, styles, and tables; how to create lists, blocks, layouts, and forms.</description><pubDate>Thu, 11 Mar 2021 16:00:00 GMT</pubDate></item><item><title>C++ Notes: File Operations</title><link>https://mahaofei.com/en/blog/cpp-note8/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/cpp-note8/</guid><description>Data generated while a program is running is temporary and is released once the program finishes. Files can be used to persist data. File operations in C++ require an #include directive.</description><pubDate>Wed, 10 Mar 2021 16:00:00 GMT</pubDate></item><item><title>[C++ Notes] Inheritance</title><link>https://mahaofei.com/en/blog/cpp-note7/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/cpp-note7/</guid><description>Inheritance is one of the three core features of object-oriented programming. When defining a class, a lower-level class shares the common characteristics of the level above while also having its own characteristics.</description><pubDate>Tue, 09 Mar 2021 16:00:00 GMT</pubDate></item><item><title>[C++ Notes] Operator Overloading</title><link>https://mahaofei.com/en/blog/cpp-note6/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/cpp-note6/</guid><description>Operator overloading redefines existing operators to give them another function, allowing them to work with different data types. This article covers overloading the addition, left-shift, increment, assignment, relational, and function-call operators.</description><pubDate>Mon, 08 Mar 2021 16:00:00 GMT</pubDate></item><item><title>C++ Notes: Friends</title><link>https://mahaofei.com/en/blog/cpp-note5/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/cpp-note5/</guid><description>Some private members may need to be accessed by certain functions or classes outside the class, which requires friends. The keyword for friends is fiend. Friends can be implemented in three ways: a global function as a friend, a class as a friend, or a member function as a friend.</description><pubDate>Sun, 07 Mar 2021 16:00:00 GMT</pubDate></item><item><title>[C++ Notes] Object Model and the this Pointer</title><link>https://mahaofei.com/en/blog/cpp-note4/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/cpp-note4/</guid><description>In C++, a class&apos;s member variables and member functions are stored separately, and only non-static member variables belong to objects of the class. Each non-static member function has only one function instance, meaning that multiple objects of the same type share one block of code. How does the code distinguish which object invoked it? This is where the this pointer comes in.</description><pubDate>Sat, 06 Mar 2021 16:00:00 GMT</pubDate></item><item><title>[C++ Notes] Constructors and Destructors</title><link>https://mahaofei.com/en/blog/cpp-note3/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/cpp-note3/</guid><description>Every object needs initial setup and cleanup before it is destroyed. Object initialization and cleanup are two very important safety concerns. Using an object or variable without an initial state has unknown consequences; failing to clean up an object or variable in time after use can also cause safety issues.</description><pubDate>Fri, 05 Mar 2021 16:00:00 GMT</pubDate></item><item><title>[C++ Notes] The Meaning of Encapsulation and the Difference Between Structs and Classes</title><link>https://mahaofei.com/en/blog/cpp-note2/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/cpp-note2/</guid><description>Encapsulation combines attributes and behaviors into a whole to represent real-world entities, while controlling access to those attributes and behaviors. When designing a class, attributes and behaviors are written together to represent an entity. The syntax is as follows.</description><pubDate>Thu, 04 Mar 2021 16:00:00 GMT</pubDate></item><item><title>[C++ Notes] Using Functions: Default Arguments, Placeholder Parameters, and Function Overloading</title><link>https://mahaofei.com/en/blog/cpp-note1/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/cpp-note1/</guid><description>In C++, parameters in a function&apos;s parameter list can have default values. If an argument is passed to a parameter, the supplied value is used; otherwise, the default value is used. However, if a parameter at a given position has a default argument, every parameter after it must also have a default value.</description><pubDate>Wed, 03 Mar 2021 16:00:00 GMT</pubDate></item><item><title>[ROS Study Notes] (Twelve) Common Visualization Tools</title><link>https://mahaofei.com/en/blog/ros-note12/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-note12/</guid><description>Rviz is a three-dimensional visualization tool that is highly compatible with robot platforms based on the ROS software framework. Rviz can graphically display robot sensor data, robot motion status, environmental information, and more.</description><pubDate>Tue, 02 Mar 2021 16:00:00 GMT</pubDate></item><item><title>[ROS Study Notes] (XI) How to Use Launch Files</title><link>https://mahaofei.com/en/blog/ros-note11/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-note11/</guid><description>The functions of a laubch file are as follows: it configures and starts multiple nodes through an XML file. It can also start ROS Master automatically (so there is no need to run roscore separately).</description><pubDate>Mon, 01 Mar 2021 16:00:00 GMT</pubDate></item><item><title>[ROS Study Notes] (X) Coordinate Frame Management in ROS</title><link>https://mahaofei.com/en/blog/ros-note10/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-note10/</guid><description>The TF package manages all coordinate frames. It keeps a ten-second history of the relationships among all frames and can show where a grasped object is relative to the robot&apos;s center frame.</description><pubDate>Sun, 28 Feb 2021 16:00:00 GMT</pubDate></item><item><title>[ROS Study Notes] (VIII) Defining and Using Service Data</title><link>https://mahaofei.com/en/blog/ros-note8/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-note8/</guid><description>Each time the Client makes one Request, the Server sends data once. The data format is personal information such as name, gender, and so on.</description><pubDate>Sat, 27 Feb 2021 16:00:00 GMT</pubDate></item><item><title>[ROS Study Notes] (IX) Using ROS Parameters from the Command Line and in Code</title><link>https://mahaofei.com/en/blog/ros-note9/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-note9/</guid><description>ROS Master includes a Parameter Server, which is a global dictionary that stores configuration parameters. These configuration parameters are globally accessible to all nodes.</description><pubDate>Sat, 27 Feb 2021 16:00:00 GMT</pubDate></item><item><title>[ROS Study Notes] (VI) Implementing the Client</title><link>https://mahaofei.com/en/blog/ros-note6/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-note6/</guid><description>Send a service request programmatically. In other words, the client sends a request to the server to spawn a turtle, and the server returns the response to the client. Go back to the catkin_ws/src directory and create a package named learning_service.</description><pubDate>Thu, 25 Feb 2021 16:00:00 GMT</pubDate></item><item><title>[ROS Study Notes] (VII) Implementing the Server</title><link>https://mahaofei.com/en/blog/ros-note7/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-note7/</guid><description>The server waits for a signal. Each time it receives a signal from the client, it toggles the turtle&apos;s motion state (moving → stopped, stopped → moving).</description><pubDate>Thu, 25 Feb 2021 16:00:00 GMT</pubDate></item><item><title>[ROS Study Notes] (V) Defining and Using Topic Messages</title><link>https://mahaofei.com/en/blog/ros-note5/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-note5/</guid><description>In ROS Master, you can publish and subscribe to predefined messages, such as information about a turtle&apos;s motion and pose. However, sometimes you need to define custom message types. The main objective of this section is to define a Person message containing personal information, publish it through a Publisher, and subscribe to it through a Subscriber.</description><pubDate>Wed, 24 Feb 2021 16:00:00 GMT</pubDate></item><item><title>[ROS Study Notes] (III): Implementing a Publisher</title><link>https://mahaofei.com/en/blog/ros-note3/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-note3/</guid><description>ROS Master contains two nodes: a Subscriber (turtlesim) and a Publisher. The Publisher is implemented in code to publish a Message containing linear velocity and angle. The Message is transmitted through a Topic channel to the Subscriber, thereby controlling the turtle&apos;s movement.</description><pubDate>Tue, 23 Feb 2021 16:00:00 GMT</pubDate></item><item><title>[ROS Study Notes] (IV) Implementing the Subscriber</title><link>https://mahaofei.com/en/blog/ros-note4/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-note4/</guid><description>In ROS_Master, you can publish and subscribe to messages. ROS_Master contains two nodes: a Subscriber (turtlesim) and a Publisher. The Publisher publishes Messages programmatically. The Message content includes linear velocity and angle, and it is passed to the Subscriber through the Topic pipeline, thereby controlling the turtle&apos;s movement.</description><pubDate>Tue, 23 Feb 2021 16:00:00 GMT</pubDate></item><item><title>[ROS Study Notes] (II) Creating the Workspace and Package</title><link>https://mahaofei.com/en/blog/ros-note2/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-note2/</guid><description>A workspace is a folder that holds project development files, similar to a project you create in an IDE on Windows. Folders in a workspace include …</description><pubDate>Mon, 22 Feb 2021 16:00:00 GMT</pubDate></item><item><title>[ROS Study Notes] (Part One): Explanations and Examples of Common Commands</title><link>https://mahaofei.com/en/blog/ros-note1/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-note1/</guid><description>roscore starts ROS Master and is the first command to run before starting a ROS system; rosrun runs a node in a package. It takes two arguments: the package name first and the node name second.</description><pubDate>Sun, 21 Feb 2021 16:00:00 GMT</pubDate></item><item><title>Installing ROS Noetic on Ubuntu20.04</title><link>https://mahaofei.com/en/blog/ros-install/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ros-install/</guid><description>Add the ROS software repository: open Software &amp; Updates and select the first four download options. Make sure all of them are checked, or dependency issues will occur during installation. Then run the following commands to add the software repository and public key.</description><pubDate>Fri, 19 Feb 2021 16:00:00 GMT</pubDate></item><item><title>Troubleshooting rosdep_init and rosdep_update During ROS Installation (Tested on 2022.04.08)</title><link>https://mahaofei.com/en/blog/rosdep/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/rosdep/</guid><description>The ROS installation process is covered in my previous blog post, Installing ROS_Noetic on Ubuntu20.04. During installation, rosdep_init reports 【ERROR_cannot download_default_sources_list_from…Website_may_be down.】. rosdep_update always times out and cannot update. I finally found a reliable solution that works.</description><pubDate>Fri, 19 Feb 2021 16:00:00 GMT</pubDate></item><item><title>How to Install Node.js</title><link>https://mahaofei.com/en/blog/nodejs/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/nodejs/</guid><description>I tried using PicGo on Ubuntu, but every time I installed a plugin, it prompted me to install Node.js. Following the installation steps did not solve the issue, so I reinstalled Node.js.</description><pubDate>Wed, 17 Feb 2021 16:00:00 GMT</pubDate></item><item><title>Using VNC for Remote Desktop on Ubuntu</title><link>https://mahaofei.com/en/blog/ubuntu-vnc/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ubuntu-vnc/</guid><description>I wanted to connect to my Raspberry Pi remotely using VNC. I searched online and tried many related blog posts and various methods, but I kept running into problems. Finally, after much effort, I found a method that works.</description><pubDate>Wed, 17 Feb 2021 16:00:00 GMT</pubDate></item><item><title>Installing Ubuntu20.04 on a Raspberry Pi 4B</title><link>https://mahaofei.com/en/blog/raspberrypi-ubuntu/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/raspberrypi-ubuntu/</guid><description>Go to the official Ubuntu website and download the Ubuntu installation package for Raspberry Pi. Use DiskGenius to format the SD card, delete all sectors, and then format it. Download the official imaging tool, select the .xz file you just downloaded as the image, select your SD card, and write the image. Then configure the Ubuntu environment...</description><pubDate>Tue, 16 Feb 2021 16:00:00 GMT</pubDate></item><item><title>Ubuntu System Bug List (Updated Irregularly)</title><link>https://mahaofei.com/en/blog/ubuntu-buglist/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/ubuntu-buglist/</guid><description>A collection of issues encountered while using Ubuntu.</description><pubDate>Mon, 15 Feb 2021 16:00:00 GMT</pubDate></item><item><title>Installing ABB RobotStudio 6.08</title><link>https://mahaofei.com/en/blog/robotstudio-install/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-install/</guid><description>Cloud drive link: https://pan.baidu.com/s/1yUpRG146dUXC9Gj1D94AHw, extraction code: rsaz. Extract the installation package, run ABB RobotStudio 6.08.msi, and follow the prompts step by step to install it. After installation is complete, depending on your computer, extract...</description><pubDate>Sat, 13 Feb 2021 16:00:00 GMT</pubDate></item><item><title>Personal Website Setup Tutorial: Alibaba Cloud ECS + BT Panel + WordPress</title><link>https://mahaofei.com/en/blog/website-build-wordpress/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/website-build-wordpress/</guid><description>Building a website requires a server and a domain name. This article covers the entire process of purchasing a server, registering a domain name, configuring the server, installing WordPress, and successfully setting up a blog, as a reference.</description><pubDate>Sat, 13 Feb 2021 16:00:00 GMT</pubDate></item><item><title>Creating a Palletizing Robot in RobotStudio</title><link>https://mahaofei.com/en/blog/robotstudio-stack/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-stack/</guid><description>First, import an IRB2600 robot and move the gripper&apos;s local coordinate origin to the center of its top surface (where it connects to the flange). Align the local coordinates of the gripper Smart Component with the coordinates of the robot&apos;s end flange...</description><pubDate>Fri, 12 Feb 2021 16:00:00 GMT</pubDate></item><item><title>Creating a Dynamic Gripper in RobotStudio</title><link>https://mahaofei.com/en/blog/robotstudio-gripper/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-gripper/</guid><description>If you have a gripper model created with other modeling software such as SolidWorks, you can import it into RobotStudio. Here, a simple model is created, mainly to demonstrate the process of creating a dynamic gripper.</description><pubDate>Wed, 10 Feb 2021 16:00:00 GMT</pubDate></item><item><title>Configuring Collision Detection in RobotStudio</title><link>https://mahaofei.com/en/blog/robotstudio-collision/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-collision/</guid><description>Click Create Collision Detection to create a collision check. Once created, ObjectA and ObjectB are the two groups to be checked. If objects in the two groups collide, their colors will change.</description><pubDate>Tue, 09 Feb 2021 16:00:00 GMT</pubDate></item><item><title>Creating and Simulating a Robot Path in RobotStudio</title><link>https://mahaofei.com/en/blog/robotstudio-trajectory/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-trajectory/</guid><description>This article covers the process of creating a robot path after the mechanical model and robot system have already been created. The project files have been uploaded to a cloud drive, including the initial project file (03Practice_init.rspag), the completed project file (03Practice.rspag), and model files.</description><pubDate>Mon, 08 Feb 2021 16:00:00 GMT</pubDate></item><item><title>Building a Dual-Conveyor System in RobotStudio</title><link>https://mahaofei.com/en/blog/robotstudio-doubleconveyer/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-doubleconveyer/</guid><description>Start by building the mechanical structure of the system. Import two conveyors, rotate the second conveyor 90° about the z-axis, then offset it -3200mm along the y-axis. Import the IRB120 robot and move it to a suitable position. Create a workpiece model...</description><pubDate>Sun, 07 Feb 2021 16:00:00 GMT</pubDate></item><item><title>The “No Valid Configuration Found” Issue When Creating a Target in RobotStudio</title><link>https://mahaofei.com/en/blog/robotstudio-configbug/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-configbug/</guid><description>When creating a target using Create Target under Paths and Targets in RobotStudio, you may sometimes be unable to jump to the target because no valid configuration is found. Solution 1: Under Basic - Settings, select the correct tool coordinate system, such as the gripper&apos;s tool coordinate system.</description><pubDate>Sat, 06 Feb 2021 16:00:00 GMT</pubDate></item><item><title>RobotStudio Conveyor Design</title><link>https://mahaofei.com/en/blog/robotstudio-conveyer/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-conveyer/</guid><description>Create a new station and import a conveyor from Equipment. Create a cube to serve as the object carried by the conveyor. Drag the small cube onto the conveyor at the desired position, using Snap and Set Position to position it precisely...</description><pubDate>Fri, 05 Feb 2021 16:00:00 GMT</pubDate></item><item><title>Fixing Slow Ctrl + Left-Mouse Dragging in RobotStudio</title><link>https://mahaofei.com/en/blog/robotstudio-slowbug/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-slowbug/</guid><description>When using ABB RobotStudio, dragging the mouse to pan the view may sometimes suddenly become very slow. Right-click a blank area of the station, then click View All or View Center. This resolves the issue.</description><pubDate>Fri, 05 Feb 2021 16:00:00 GMT</pubDate></item><item><title>[RobotStudio Study Notes] (X) Modular Programs</title><link>https://mahaofei.com/en/blog/robotstudio-note10/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-note10/</guid><description>When a program is relatively complex, or when repeated sections appear within a program, modular program design is often a viable approach. In RobotStudio, you can call different routines from the main program to keep the code logic clear.</description><pubDate>Wed, 03 Feb 2021 16:00:00 GMT</pubDate></item><item><title>RobotStudio Study Notes, Part Nine: Setting Coordinate Offsets</title><link>https://mahaofei.com/en/blog/robotstudio-note9/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-note9/</guid><description>The Offs instruction offsets coordinates based on the currently selected workobject coordinate system and a reference point. Click the robtarget data to offset and select Function - Offs to configure the coordinate offset.</description><pubDate>Tue, 02 Feb 2021 16:00:00 GMT</pubDate></item><item><title>RobotStudio Study Notes, Part Eight: Speed Settings</title><link>https://mahaofei.com/en/blog/robotstudio-note8/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-note8/</guid><description>In manual mode, the maximum speed is limited to 250mm/s. The v1000 speed used in a program is very fast both in simulation and on a physical robot, so the robot&apos;s motion speed and delay time need to be configured.</description><pubDate>Mon, 01 Feb 2021 16:00:00 GMT</pubDate></item><item><title>[RobotStudio Learning Notes] (VII) WorkObject Coordinates</title><link>https://mahaofei.com/en/blog/robotstudio-note7/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-note7/</guid><description>Create a Cartesian coordinate system at any position and orientation on the target workbench; this is called a WorkObject coordinate system. By creating WorkObject coordinate systems at different locations, the same program can perform the same process at those different locations.</description><pubDate>Sun, 31 Jan 2021 16:00:00 GMT</pubDate></item><item><title>RobotStudio Study Notes, Part Six: Payload</title><link>https://mahaofei.com/en/blog/robotstudio-note6/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-note6/</guid><description>After the gripper picks up a workpiece, the system load changes. This difference may not be obvious in a simulation, but it must be taken into account in a real system.</description><pubDate>Sat, 30 Jan 2021 16:00:00 GMT</pubDate></item><item><title>[RobotStudio Learning Notes] (IV) Workpiece Grasping Program Design</title><link>https://mahaofei.com/en/blog/robotstudio-note4/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-note4/</guid><description>MoveJ moves the robot to a position. Set/Reset controls external devices. Add a MoveJ instruction at the initial position to move the robot gripper directly above the workpiece, then add another MoveJ instruction (adding a waypoint above the workpiece prevents the robot from grasping directly and possibly colliding with the workpiece from the side).</description><pubDate>Fri, 29 Jan 2021 16:00:00 GMT</pubDate></item><item><title>RobotStudio Study Notes, Part Five: Tool Data</title><link>https://mahaofei.com/en/blog/robotstudio-note5/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-note5/</guid><description>Remove the gripper and measure the coordinates at the gripper tip. Click Modeling - Measure - Point to Point, select the gripper&apos;s base and end faces, and record the resulting z-coordinate value. Reinstall the gripper on the end of the robot. Open the Virtual FlexPendant, go to Manual Operation - Tool Coordinates - New, change the name, and click Initial Value in the lower-left corner. Set the first z (coordinate position) to the measured value, 215.30; set the mass parameter mass to 1; and enter an initial estimate for the second z (center-of-gravity position). Verify the coordinates, set Motion Mode to Reorient, and set Tool Coordinates to the coordinates created above. Moving the joystick shows the robot rotating about the center point between the two gripper tips.</description><pubDate>Fri, 29 Jan 2021 16:00:00 GMT</pubDate></item><item><title>RobotStudio Study Notes, Part Two: Manual Operation</title><link>https://mahaofei.com/en/blog/robotstudio-note2/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-note2/</guid><description>Open a robot system and the Virtual FlexPendant. Click Menu - Manual Operation - Motion Mode. Four motion modes are displayed below. The single-axis options are Axes 1-3, plus Axes 4-6; these are followed by linear operation and reorientation. Here, select Axes 1-3, then click OK. On the right side of the manual operation screen, you can see the robot&apos;s position information and joystick directions.</description><pubDate>Wed, 27 Jan 2021 16:00:00 GMT</pubDate></item><item><title>[RobotStudio Learning Notes] (III) Creating Programs</title><link>https://mahaofei.com/en/blog/robotstudio-note3/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-note3/</guid><description>Open the main menu &gt; Program to see the program name on the top line. T_ROB1 is a task; you can choose one task for each mechanical unit. The second level is modules, divided into system modules and program modules. Modules split the robot&apos;s required functions into separate modules—think of them like folders. The third level is routines—the programs the robot system actually executes.</description><pubDate>Wed, 27 Jan 2021 16:00:00 GMT</pubDate></item><item><title>RobotStudio Study Notes, Part One: Software Installation and Initial Testing</title><link>https://mahaofei.com/en/blog/robotstudio-note1/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/robotstudio-note1/</guid><description>Extract the installation package, run the setup.exe program in the package, and follow the prompts to install it. The process is quite simple. After installation, double-click RobotStudio_5.61.02注册补丁.reg. Open RobotStudio to complete the installation.</description><pubDate>Mon, 25 Jan 2021 16:00:00 GMT</pubDate></item><item><title>WordPress Website Design: A Beginner&apos;s Website Design Workflow Using Elementor&apos;s Visual Editor</title><link>https://mahaofei.com/en/blog/wordperss-website/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/wordperss-website/</guid><description>First, prepare by installing the Elementor plugin, a theme, and supporting plugins; then import a template and visually edit the site with Elementor; finally, update the site navigation in the WordPress admin dashboard.</description><pubDate>Sun, 24 Jan 2021 16:00:00 GMT</pubDate></item><item><title>WordPress Study Notes</title><link>https://mahaofei.com/en/blog/wordpress-note/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/wordpress-note/</guid><description>In WordPress, content is mainly divided into two parts, posts and pages. WordPress plugins can add, modify, or remove functionality from a WordPress site. The Media Library is mainly used to manage attachments uploaded through WordPress, such as images, videos, and other files.</description><pubDate>Thu, 21 Jan 2021 16:00:00 GMT</pubDate></item><item><title>How to Fix WordPress Upload Errors (413 Request Entity Too Large and the Uploaded File Exceeds the upload_max_filesize Directive in php.ini)</title><link>https://mahaofei.com/en/blog/wordpress-filesizebug/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/wordpress-filesizebug/</guid><description>For the 413 Request Entity Too Large issue, nginx limits the upload size. The solution is as follows: 1. Open the nginx configuration file nginx.conf, usually located at: /etc/nginx/nginx.conf. 2. Add client_max_body_size 64m; to the http{} section. 64m is the maximum allowed upload size. 3. Save the file and restart nginx with service nginx restart</description><pubDate>Wed, 20 Jan 2021 16:00:00 GMT</pubDate></item><item><title>How to Fix Slow Loading in the WordPress Admin Dashboard</title><link>https://mahaofei.com/en/blog/wordpress-loadbug/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/wordpress-loadbug/</guid><description>When entering the admin dashboard/working in the admin dashboard, you may find that the page loads very slowly. One reason is that WordPress uses Google Fonts. Solution: install the Disable Google Fonts plugin (personally tested and confirmed working in 2021.1). (Research suggests another cause is that user avatars fail to load properly, but this has already been fixed in the latest version of WordPress.)</description><pubDate>Wed, 20 Jan 2021 16:00:00 GMT</pubDate></item><item><title>Building a Personal Website with Raspberry Pi: PeanutHull NAT Traversal</title><link>https://mahaofei.com/en/blog/raspberrypi-web-connect/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/raspberrypi-web-connect/</guid><description>After WordPress has been installed and configured, you can access the website by entering localhost or the Raspberry Pi&apos;s IP address in a browser. However, it still cannot be accessed from the external network (outside the same router). The purpose of NAT traversal is to allow computers on the external network to access your website. To make the setup less difficult and complex, I used PeanutHull.</description><pubDate>Tue, 19 Jan 2021 16:00:00 GMT</pubDate></item><item><title>Building a Personal Website with Raspberry Pi: Installing WordPress</title><link>https://mahaofei.com/en/blog/raspberrypi-web-wordpress/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/raspberrypi-web-wordpress/</guid><description>Download the installation package from the official WordPress website, extract it, and place the contents of the worpress folder in the html folder. Enter localhost/phpmyadmin in your browser to open phpMyAdmin, enter your phpMyAdmin username and password, click the Databases tab, create a new database, enter a database name, and click Create. No database tables are needed for now.</description><pubDate>Mon, 18 Jan 2021 16:00:00 GMT</pubDate></item><item><title>[Raspberry Pi Personal Website] Environment Setup</title><link>https://mahaofei.com/en/blog/raspberrypi-web-config/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/raspberrypi-web-config/</guid><description>Setting up a personal website on a Raspberry Pi mainly involves the following steps—setting up a LAMP server (Linux + Apache + MySQL + PHP) and creating a database user (this step requires installing PhpMyAdmin and using SQL statements to add a MariaDB database user).</description><pubDate>Sun, 17 Jan 2021 16:00:00 GMT</pubDate></item><item><title>Raspberry Pi System Installation, Initial Configuration, and Remote Access</title><link>https://mahaofei.com/en/blog/raspberrypi-install/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/raspberrypi-install/</guid><description>Raspberry Pi installation, configuration, and remote access mainly involve the following steps—preparing the TF card, downloading and writing the image, determining and accessing the IP address, updating and configuring package sources, and implementing Windows remote access. At this point, the initial system installation is complete and you can enter the graphical interface.</description><pubDate>Sat, 16 Jan 2021 16:00:00 GMT</pubDate></item><item><title>LabVIEW Study Notes (X): Case Structures</title><link>https://mahaofei.com/en/blog/labview-note10/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview-note10/</guid><description>Case structures are similar to if…else… and switch structures in C and are mainly used to select among branches of program logic. A case structure contains two or more subdiagrams or cases. Only one case executes at a time. Right-click the case structure border to add, duplicate, delete, reorder, or select the default case. Multiple input/output tunnels can be created.</description><pubDate>Fri, 15 Jan 2021 16:00:00 GMT</pubDate></item><item><title>LabVIEW Study Notes (IX): Arrays and Clusters</title><link>https://mahaofei.com/en/blog/labview-note9/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview-note9/</guid><description>When processing a series of similar data and performing repeated calculations, consider using an Array. An Array groups data elements of the same type. Place an Array shell on the front panel and drag a data object or element into the shell to create an Array. Array functions such as Array Size, Index Array, Build Array, Array Max &amp; Min, Sort, and Split Array can all be performed with Array functions.</description><pubDate>Thu, 14 Jan 2021 16:00:00 GMT</pubDate></item><item><title>LabVIEW Study Notes (VIII): Property Nodes</title><link>https://mahaofei.com/en/blog/labview-note8/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview-note8/</guid><description>Property nodes provide access to object properties. In applications that may need to programmatically change the appearance of front panel objects in response to specific inputs, these changes can be configured by editing property nodes. Right-click a control on the block diagram to create a property node. To configure multiple properties, drag the top or bottom border to add properties. A property node executes its properties from top to bottom.</description><pubDate>Wed, 13 Jan 2021 16:00:00 GMT</pubDate></item><item><title>LabVIEW Study Notes (VII): Variables and Shift Registers</title><link>https://mahaofei.com/en/blog/labview-note6/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview-note6/</guid><description>The purpose of variables is to transfer data between parallel loops. Shift registers can transfer data generated by the previous iteration to the next iteration. Right-click the loop border to add a shift register. The shift register on the right stores the data at the end of each iteration, while the shift register on the left provides the stored data to the next iteration.</description><pubDate>Tue, 12 Jan 2021 16:00:00 GMT</pubDate></item><item><title>LabVIEW Study Notes (VI): While Loops and For Loops</title><link>https://mahaofei.com/en/blog/labview-note7/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview-note7/</guid><description>A While Loop executes at least once, while a For Loop can execute 0 times. A While Loop automatically outputs the value from the last iteration, while a For Loop automatically outputs an array. You can right-click the border of a While Loop and convert it to a For Loop from the shortcut menu.</description><pubDate>Mon, 11 Jan 2021 16:00:00 GMT</pubDate></item><item><title>LabVIEW Learning Notes (V): A Comprehensive Data Type Exercise</title><link>https://mahaofei.com/en/blog/labview-note5/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview-note5/</guid><description>Generate a sine-wave signal with a frequency of 0-50M; choose a sampling rate of 10M/50M/100M; detect the signal frequency; output the sampled signal&apos;s power spectrum; and restart averaging if the frequency or sampling rate changes.</description><pubDate>Sun, 10 Jan 2021 16:00:00 GMT</pubDate></item><item><title>LabVIEW Study Notes (IV): Dynamic Data Types</title><link>https://mahaofei.com/en/blog/labview-note4/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview-note4/</guid><description>In LabVIEW, the dynamic data type is shown in dark blue. Only Express VI can produce and receive ExpressVI. Use the Get Dynamic Data ExpressVI to retrieve the properties of dynamic data, and use the Set Dynamic Data Attributes ExpressVI to set properties such as the signal name, timestamp, and time mode.</description><pubDate>Sat, 09 Jan 2021 16:00:00 GMT</pubDate></item><item><title>LabVIEW Study Notes (III): Basic Controls</title><link>https://mahaofei.com/en/blog/labview-note3/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview-note3/</guid><description>Numeric controls can represent different types of numeric values. The most important setting for Boolean controls is the mechanical action. The display type of string controls can be changed from the shortcut menu. To add items to a control&apos;s drop-down list and reorder them, right-click an enum or ring control and select Edit Items from the shortcut menu, or click the Edit Items tab in the Properties dialog box.</description><pubDate>Fri, 08 Jan 2021 16:00:00 GMT</pubDate></item><item><title>LabVIEW Study Notes (II): Filter Experiment</title><link>https://mahaofei.com/en/blog/labview-note2/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview-note2/</guid><description>Place an Express VI on the block diagram, configure the dialog box that appears, wire the Express VI, then save and run the VI.</description><pubDate>Thu, 07 Jan 2021 16:00:00 GMT</pubDate></item><item><title>Installing LabVIEW 2018</title><link>https://mahaofei.com/en/blog/labview-2018/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview-2018/</guid><description>If you need a different version, see the resources page. Download the LabView2018.zip archive from Baidu Netdisk. Before installation, create a new folder for the LabVIEW installation path. It is best not to install it in the root directory of a drive.</description><pubDate>Wed, 06 Jan 2021 16:00:00 GMT</pubDate></item><item><title>LabVIEW Study Notes, Part One: Basic Introduction</title><link>https://mahaofei.com/en/blog/labview-note1/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview-note1/</guid><description>Controls come from the Controls palette. Right-click to open the Controls palette. You can add a control to the front panel by clicking it or dragging it. A block diagram consists of terminals (from the front panel), subVIs, functions, constants, structures, and wires.</description><pubDate>Wed, 06 Jan 2021 16:00:00 GMT</pubDate></item><item><title>Installing and Uninstalling LabView2019</title><link>https://mahaofei.com/en/blog/labview2019/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/labview2019/</guid><description>This release is the English version. For the Chinese version, see the resources page. Download the LabView2019.zip archive from the cloud drive, extract it and open the corresponding 64-bit or 32-bit folder, then extract the ISO file inside that folder, open the extracted folder, and double-click install.exe to install.</description><pubDate>Mon, 04 Jan 2021 16:00:00 GMT</pubDate></item><item><title>Expanding MCU Interfaces with a Three-to-Eight (38) Decoder</title><link>https://mahaofei.com/en/blog/74hc138/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/74hc138/</guid><description>When designing MCU circuits, the number of MCU I/O pins is limited and sometimes cannot meet our design requirements. To control more devices, we need peripheral digital chips for pin expansion. A common choice is the 74HC138, also called a three-to-eight (38) decoder.</description><pubDate>Sun, 03 Jan 2021 16:00:00 GMT</pubDate></item><item><title>Proteus Simulation for Driving Multiple Two-Phase Four-Wire Stepper Motors</title><link>https://mahaofei.com/en/blog/multi-stepping-motor/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/multi-stepping-motor/</guid><description>The CD4066 is a quad bilateral analog switch. Connect the four inputs of the CD4066 to the L298N outputs and the CD4066 outputs to the stepper motor&apos;s A+, A-, B+, and B- terminals. Tie all four control pins to one MCU pin so a single pin can switch all four switches on the CD4066 together, enabling stepper motor selection.</description><pubDate>Sat, 02 Jan 2021 16:00:00 GMT</pubDate></item><item><title>Solution to the Proteus Simulation Error: No power supply specified for net 5V in Power Rail Configuration.</title><link>https://mahaofei.com/en/blog/proteus-nopower-bug/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/proteus-nopower-bug/</guid><description>Solution: Choose Design—Configure Power Rails. Under Power Supplies, add the power supply that is not connected to a net to the list of connected nets.</description><pubDate>Fri, 01 Jan 2021 16:00:00 GMT</pubDate></item><item><title>Two-Phase Four-Wire Stepper Motor Drive Principles and Proteus Simulation</title><link>https://mahaofei.com/en/blog/stepping-motor-simulation/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/stepping-motor-simulation/</guid><description>A microcontroller cannot drive a stepper motor directly, so an L298N is needed as the driver. This article introduces some L298N parameters, along with the drive principles and methods for a two-phase four-wire stepper motor. A simulation experiment is also performed in Proteus based on the drive principles described.</description><pubDate>Thu, 31 Dec 2020 16:00:00 GMT</pubDate></item><item><title>ESP8266–App Connection Experiment</title><link>https://mahaofei.com/en/blog/esp8266/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/esp8266/</guid><description>This experiment uses an ESP8266 NodeMCU. The firmware flashed is the official NodeMCU firmware. Open the official ESP8266Flasher, select the NodeMCU firmware in the Config tab, and set the flash address to 0x00000.</description><pubDate>Wed, 30 Dec 2020 16:00:00 GMT</pubDate></item><item><title>Fundamentals of Digital Methods: Common Functions</title><link>https://mahaofei.com/en/blog/opengl-note2/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opengl-note2/</guid><description>Fundamentals of Digital Methods: Common Functions. 1. Cross Product 2. Vector Normalization 3. Matrix Multiplication 4. Matrix Multiplication.</description><pubDate>Mon, 28 Oct 2019 16:00:00 GMT</pubDate></item><item><title>Fundamentals of Digitization Methods</title><link>https://mahaofei.com/en/blog/opengl-note1/</link><guid isPermaLink="true">https://mahaofei.com/en/blog/opengl-note1/</guid><description>Use OpenGL to perform various basic operations, including generating a tetrahedron, importing a local model, and applying matrix operations to a model, for a better understanding of digitization methods.</description><pubDate>Wed, 23 Oct 2019 16:00:00 GMT</pubDate></item></channel></rss>